2008-11-03 6 views
4

Je fais une analyse FK de nos tables en créant un graphique orienté représentant les dépendances FK, puis en parcourant le graphique . Dans mon code, je nomme tout en utilisant la terminologie de graphique orienté, mais j'aimerais avoir quelque chose un peu plus "user friendly" dans le rapport.terminologie relationnelle: source de clé étrangère, destination?

Dans ce scénario:

create table t1(a varchar2(20)); 
alter table t1 add constraint t1_fk foreign key(a) references t2(b); 

t1.a doit exister dans t2.b. Alors, quels mots devrais-je utiliser dans les blancs?

t1 is the _______ of t2. 
t2 is the _______ of t1. 

De nombreux TIA!

Répondre

4

Je dirais que (les choses entre crochets sont facultatifs, mais je les utiliser)

 
[Column a of] table t1 references [column b of] table t2 

et

 
[Column b of] table t2 is referenced by [column a of] table t1 

?

Je spécifierais également l'action qui se produit lors de la suppression/mise à jour le cas échéant.

 
Column b of table t2 is referenced by column a of table t1. 
Deleting a record in table t2 will delete matching records on table t1 
1

je dirais que quelque chose le long des lignes de

 
t1 is the master of t2. An ID must be in t1, before it can be mentioned in t2. 
t2 is the slave of t1. It cannot refer to an ID that does not exist in t1. 

La plupart des gens non techniques saisira la terminologie maître/esclave très intuitive.

1

Vous pouvez adopter la forme de phrase suivante:

  • Chaque ligne t1 doit être liée à exactement un t2 rangée
  • Chaque ligne t2 peut être liée à un certain nombre de lignes t1, ou aucun
2
t1 is the parent of t2. 
t2 is the child of t1. 

Quelle est l'audience pour cela? Si ce sont les personnes qui comprennent un schéma relationnel, alors cela sera probablement le cas. Si ce sont des personnes non-techniques, alors généralement j'ai documenté dans mon outil de modélisation (ERWin) la signification des relations spécifiquement.

InvoiceLineItem is a part of Invoice. 
Invoice has one or more InvoiceLineItems. 

Ou:

User must belong to a Business. 
Business has zero or more Users. 
0

Dans le scénario expliqué, je pense que la dénomination correcte devrait être (techniquement parlant):
t2 est le parent de t1
t1 est l'enfant de t2

La table de la colonne contrainte est appelée enfant, tandis que la table de la colonne référencée est appelée parent.

Personnellement, je n'aime pas cette appellation, dans SQL Server lorsque vous interrogez pour la vue sys.foreign_keys la table enfant est appelé parent_object_id, alors que la table référencée est appelée referenced_object_id .. du point de vue de la contrainte elle-même, peut-être raison .. mais à la fin c'est très déroutant.

Questions connexes