je le scénario suivant: Une table enfant « téléphone » peut servir plusieurs tables de parents se joignent par des tableaux, comme suit:« attribut propriétaire appartenant à » la contrainte unique se joindre par la table
CREATE TABLE phone (
id BIGINT AUTO_INCREMENT,
number VARCHAR(16) NOT NULL,
type VARCHAR(16) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE employee_phone (
id BIGINT AUTO_INCREMENT,
employee BIGINT NOT NULL,
phone BIGINT NOT NULL,
PRIMARY KEY(id),
CONSTRAINT empl_phone_u_phone UNIQUE(phone),
CONSTRAINT empl_phone_fk_employee
FOREIGN KEY(employee)
REFERENCES employee(id) ON DELETE CASCADE,
CONSTRAINT empl_phone_fk_phone
FOREIGN KEY(phone)
REFERENCES phone(id) ON DELETE CASCADE
);
Laissez Alice et Bob vivre dans la même maison et être des employés de la même entreprise. HR a deux numéros de téléphone enregistrés pour Alice alors qu'ils n'en ont qu'un pour Bob, le numéro de téléphone fixe de la maison. Existe-t-il un moyen d'imposer au niveau de la base de données qu'un numéro de téléphone (type de numéro) ne peut pas être répété pour le même employé (ou le fournisseur, ou tout parent apparaissant plus tard) utilisant cette configuration? Ou devrais-je prendre en charge de telles restrictions dans la couche application? Je préfère ne pas utiliser de déclencheurs ou de dénormalisation de table (comme vu dans les questions connexes sur le site comme this one, qui fonctionnent avec des ID, pas avec d'autres champs), mais je suis ouvert à le faire s'il n'y a pas d'alternative. J'utilise MySQL. Merci de votre attention.
Je suis confus. Est-ce que ça va pour Alice et Bob d'avoir le même numéro de téléphone? –
@GordonLinoff Oui, c'est. Ils peuvent être un couple vivant dans la même maison, par exemple. Les RH ont besoin d'un numéro de téléphone pour chacun. – jpangamarca