2010-05-06 16 views
0

J'ai un système, qui a deux types d'utilisateurs (entreprises et particuliers). Tous les types ont un ensemble de propriétés partagées, mais ils diffèrent dans un autre. Quelle est la meilleure conception fusionner tout dans une table qui autorise null pour les propriétés sans correspondance, ou les séparer dans deux tables liées à une table de base avec une relation un à un. Merci.Base de données de conception

+1

Créez une table de base avec les propriétés partagées et le lien vers deux tables distinctes avec les propriétés uniques. Cela suivrait le processus de normalisation, je crois. – Lazarus

+0

quel est le nombre de champs différents? – DForck42

Répondre

3

Performance-sage, c'est une question de compromis.

La sélection des propriétés d'une autre table nécessite un JOIN supplémentaire (ce qui est mauvais pour les performances) mais réduit la taille de la table principale (ce qui est bon pour les performances).

JOIN est une opération assez coûteuse, donc à moins que vous ayez, comme, 200 de ces propriétés (ce qui augmentera beaucoup la table), mieux vaut les conserver dans une table. Cependant, en séparant les tables, les contraintes CHECK et NOT NULL seront plus simples.

3

Pour de meilleures performances, utilisez une table pour les deux, autorisez les valeurs NULL pour les différentes propriétés et ajoutez un attribut de type. La relation one-one (équivalente à la sous-classe dans le monde OO) rendra votre schéma plus facile à maintenir et à comprendre, mais impliquera un impact sur les performances. Choisissez votre pilule

Questions connexes