2017-10-13 26 views
-1

1< 1 - image> Une clé étrangère faisant référence aux clés primaires de plusieurs tables.Une clé étrangère faisant référence à plusieurs clés primaires de la table

< 1,1> Lorsque primaire1 tableau comporte deux colonnes primary1_id int (11) et first_name varchar (10) dans lequel primary1_id est une clé primaire .

< 1,2> Identique Table primaire1, primary2 table a également deux colonnes primary2_id int et last_name varchar dans lequel primary2_id est une clé primaire.

< 1,3> ** Il y a également un ** foreign1 table a deux colonnes foreign_id int et full_name int dans lequel full_name est une clé étrangère qui fait référence à plusieurs tables de primaire touches comme primary1_id et primary2_id.

2< 2 - image> Cette clé étrangère, full_name ne permettent d'insérer les valeurs qui sont les mêmes dans les deux primary1_id et primary2_id colonnes.

< 2,1> Donc, si j'entre cinq entrées dans primaire1 tableau et quatre entrées dans primary2.

< 2,2> Dans ce de primary1_id sont définis comme 1 à 5 et de primary2_id sont définis comme 1 à 4.

< 2,3> Mais pourquoi cette full_name clé étrangère permet à moi d'entrer 1 à 4 seulement qui sont disponibles dans les deux tables de la clé primaire?

+1

Votre question n'est pas claire. Veuillez expliquer ce que vous entendez par "utile". Vous semblez utiliser "relation" (à tort) pour "relation" dans son sens de FK (clé étrangère). Que dit la source de ces dessins à leur sujet? Que comprenez-vous et ne comprenez-vous pas? Un FK dit que les valeurs doivent apparaître ailleurs comme PK/UNIQUE. Pourquoi n'est-ce pas suffisant pour savoir? [S'il vous plaît utiliser le texte pour le texte, ne pas utiliser les images/liens] (https://meta.stackoverflow.com/q/285551/3404097). – philipxy

+1

"Les contraintes de clé étrangère indiquent uniquement que les ID principaux qui sont disponibles en commun dans toutes les tables de contraintes de clé primaire" ne sont pas clairs. S'il vous plaît écrivez-le plus clairement. Utilisez plus de mots et de phrases se référer aux choses clairement; n'essayez pas de le fourrer dans une phrase. Essayez translate.google.com, il est maintenant meilleur via AI. – philipxy

+0

Salut. Quand vous dites "pourquoi", je suppose que vous savez que les * FKs * disent que les valeurs full_name doivent apparaître comme des PK, donc je suppose * que vous voulez dire, quel genre de * business situations * aurait un tel design? Mais vous ne dites pas clairement. (Voir aussi d'autres parties de mon dernier commentaire.) Je suppose que vous avez inventé ces noms de colonnes parce que, dans la vie de tous les jours, cela n'a pas de sens que chaque nom complet se limite à être un prénom et un nom. Mais chacun de mes coéquipiers doit être à la fois parmi les athlètes et les adultes. PS Voyez comment la réponse de sqlvogel présente une table de manière concise, standard et même formelle. – philipxy

Répondre

2

Il est inhabituel dans mon expérience, mais il est logique de mettre en œuvre certaines règles métier avec une signification similaire à "A doit être à la fois B et C".

Un exemple possible: une table StaffDiscount identifiant les clients qui sont également employés et qui bénéficient d'une réduction. Une telle table peut avoir une clé étrangère unique qui référence à la fois la table Customer et la table Employee.Cela suppose qu'une clé commune est utilisée pour identifier les clients et les employés.

CREATE TABLE StaffDiscount 
(CustomerEmployee INT NOT NULL PRIMARY KEY /* Same key identifies customer and employee */, 
    FOREIGN KEY (CustomerEmployee) REFERENCES Customer (CustomerNum), 
    FOREIGN KEY (CustomerEmployee) REFERENCES Employee (EmployeeNum)); 
+0

Je reçois votre exemple ..... Mais pouvez-vous l'expliquer brièvement ...... –

+0

Ajouté un exemple SQL – sqlvogel

0

Oui, il est possible dans le cas où l'on va créer une relation entre plusieurs tables. Comme la présence de la clé étrangère montre l'existence de toutes les tables liées avec cette table. Et aide à la récupération des données de cet environnement à une seule requête relationnelle.