Conversion d'une relation 1: M à une relation 1: 1

Nous avons une situation où la table 'A' est une table parente et il y a probablement une douzaine de tables qui sont des enfants de 'A'. Dans tous les cas, il existe une relation 1: M entre «A» et les tables enfants.

Il a été décidé hier que ces douzaines de relations 1: M devraient être converties en une relation 1: 1. Ainsi, pour chacune des douzaines de tables enfants, le développeur a mis un index unique sur la colonne FK qui reliait la table à 'A'. C'était sa façon d'imposer une relation 1: 1.

Je lui ai suggéré que ce qu'il aurait peut-être dû faire était de supprimer la colonne FK dans chacune des tables enfant et de créer une colonne FK dans la table 'A' qui référençait chacune des tables enfants. Il a remis en question cette approche car pour chaque ligne de 'A', beaucoup de ces colonnes FK seront nulles car elles ne sont pas toujours obligatoires.

Quelle serait l'approche souhaitée dans cette situation?

Merci – Randy

Si je vous comprends correctement, il ne peut y avoir qu'une seule ligne dans chaque enfant liée à une ligne spécifique dans la table parent.

Si tel est le cas, son approche semble meilleure pour les raisons exactes qu'il mentionne. En fin de count cela dépend beaucoup de ce que vous envisagez de faire avec datatables, mais la meilleure solution d'une perspective de modélisation de database est d'avoir une colonne FK dans chaque table enfant liée au PK dans la table parent.

À mon avis, votre collègue / développeur a proposé la solution la plus appropriée.

Du sharepoint vue de la design de database, il est courant de créer un index non clusterisé sur chaque colonne de key étrangère pour une table donnée. Supposons que vous disposiez de 12 foreign keys, comme vous le suggérez, sur la table Parent. Vous augmenterez considérablement les performances de vos opérations d'insertion dans cette table.

En plaçant une key étrangère unique dans chacune des 12 tables enfant faisant reference à la table parent, vous répartirez votre charge d'E / S plus efficacement.