2017-01-20 3 views
0

Supposons que j'ai deux entité forte E1 et E2 reliés par une relation 1 à plusieurs R.ER Diagramme à la conversion de base de données

E1 < --------- -------- R - E2

Combien de tables seront créées quand je convertirai le diagramme ER ci-dessus en base de données?

Je sais que lorsque E2 sera en participation totale, la réponse sera 2. Comme, la clé primaire de E2 va se fondre parfaitement. Je ne suis pas sûr d'au-dessus. J'ai vu plusieurs endroits et trouvé une réponse différente. Je cherche un argument solide avec une réponse.

La réponse peut être 2 ou 3. Je veux savoir lequel est le plus correct.

Répondre

0

La méthode originale de Chen mappait chaque relation d'entité et relation relationnelle à une table distincte. Cela produirait 3 tables:

E1 (e1 PK) 
E2 (e2 PK) 
R (e2 PK, e1) 

La pleine participation soit E1 ou E2 peuvent être traitées par une contrainte FK. Comme vous pouvez voir, E2 et R ont le même déterminant/PK. Cela nous permet de combiner les deux relations dans une table, en utilisant une colonne e1 nullable si E2 participe partiellement à la relation, non nullable si elle participe pleinement. la pleine participation E1 exige encore une contrainte FK:

E1 (e1 PK) 
E2 (e2 PK, e1) 

Je veux savoir qui est plus correct.

Logiquement, les deux solutions sont à peu près équivalentes.

La création de 3 tables préserve la structure du modèle conceptuel (ER), mais produit plus de tables, ce qui augmente la complexité d'une manière. D'un autre côté, il évite les nulls qui créent leur propre complexité.

La création de 2 tables réduit le nombre de tables mais introduit des valeurs nulles. De plus, nous devons recourir à différents mécanismes (colonnes nullables vs contraintes FK) pour implémenter un concept unique (participation complète).

D'autres exigences peuvent également influer sur la décision. Si j'ai 50 attributs optionnels, je ne veux certainement pas faire face à 50 tables distinctes! Cependant, si je voulais créer une autre relation (R2) qui ne s'applique qu'aux valeurs de E2 qui participent déjà à R, je pourrais appliquer cette contrainte dans la première conception en utilisant une contrainte FK: R2 (e2) referencing R (e2). Dans la deuxième conception, je devrais utiliser un déclencheur puisque je veux seulement permettre des références à e2 qui ont des valeurs non-nulles e1.

Il n'y a pas de réponse correcte au final. La modélisation conceptuelle, logique et physique répond à différentes préoccupations, et des exigences encore inconnues affecteront votre modèle et contrediront vos décisions. Comme dans la programmation, essayez de garder les choses simples, de refactoriser en continu et d'espérer le meilleur.