2011-06-15 9 views
2

StructureCombinez deux tables ou conservez-les séparées?

TableA (each row in TableA can map to one or more row in circle) 
    Id 
    Name 

TableB (each row in TableB can map to only one row in TableA) 
    Id 
    TableAId 
    UniqueValue 

Exemple de données

TableA 
    1,Sooprise 

TableB 
    1,1,something 
    2,1,somethingElse 

Donc dans ce cas, "UniqueValue" ne peut s'associer à une ligne dans TableA. Serait-il plus logique de combiner les tables?

Structure

TableC 
    Id 
    Name 
    UniqueValue 

Exemple de données

TableC 
    1,Sooprise,something 
    2,Sooprise,somethingElse 

Je penche plus vers le premier choix, mais comme il est un pour un mappage de B à A, ceux-ci tables peut être être combinées. Je comprends que la combinaison des tables aboutirait à une redondance des données (Nom) mais peut-être que des exceptions peuvent être faites pour ne pas utiliser deux tables relationnelles?

Répondre

3

Je garderais les deux tables séparées. Et je voudrais créer une vue pour obtenir la structure suivante si nécessaire.

+0

Pouvez-vous expliquer ce que vous entendez par « créer une vue d'obtenir la structure suivante si nécessaire »? Merci! :) – sooprise

+0

Je créer quelque chose comme ça: 'CREATE VIEW DenormalizedView AS SELECT TableB.Id, TableA.Id, TableA.Name, TableB.UniqueValue DE TableA INNER JOIN TableB SUR TableA.Id = TableB.Name' – Joss57

+0

De cette façon , Je garde une structure "normalisée" pour mes données et j'ai un moyen d'interroger une sorte de vue "dénormalisée" de mes données (pour faciliter les développements ultérieurs). – Joss57

0

Cela dépend. À quoi servent les tables? Si vous avez besoin de données provenant de plusieurs tables relationnelles en même temps, il est probablement conseillé de les joindre. Si leur utilisation est largement distincte et que vous estimez que des tables séparées améliorent la clarté, gardez-les séparées.

1

Je pense que le choix sera déterminé par ce que les tables vont être utilisées. Deux tables sont probablement la meilleure conception si vous regardez l'espace de base de données (ce qui peut ne pas être une préoccupation), et si vous êtes préoccupé par la mise à jour. (si 1, Sooprise devient 1, Sooprise_New voulez-vous mettre à jour tous les enregistrements de la table B, ou voulez-vous que les valeurs restent 1, Sooprise pour certaines entrées)?

J'ai trouvé que pour les futurs changements dans les structures de données de son mieux pour garder les tables TWP

+0

Dans mon cas, si Sooprise devenait Sooprise_New, le changement entrerait en vigueur pour toutes les valeurs de Sooprise. – sooprise

+0

Puisque vous voudriez que les changements se répercutent sur tous les enregistrements associés dans les données associées, je pense que vous préférerez avoir deux tables. –

Questions connexes