2009-09-10 8 views
0

Je crée une nouvelle base de données pour gérer les listes de souhaits.Conception de la base de données, liste de souhaits et de ses éléments

Solution A:

Deux tables,

  • wish_list et
  • wish_list_item

Solution B:

One table,

  • wish_list_with_item

    Cela aurait une liste de souhaits élément par colonne, de sorte qu'il sera de colonnes sur ce tableau.

Quel est le meilleur?

+0

J'aimerais vous aider, mais je n'ai qu'une vague idée de ce que vous essayez de représenter ici. Précisez s'il vous plaît! –

+0

@Thom, je viens d'éditer, j'espère que c'est beaucoup plus clair –

Répondre

2

La solution A est meilleure. Chaque fois que vous essayez de stocker des collections dans des colonnes plutôt que des lignes, vous allez rencontrer des problèmes.

1

Je definitly aller avec la première solution:

  • au moins, cela signifie que vous pouvez avoir autant d'articles que vous voulez - et il sera probablement plus facile à traiter, du côté de l'application (pensez à « suppression d'un élément » ou « ajouter un élément », par exemple)
  • la deuxième solution ne absolutly sent pas bonne solution
3

A est normalisée et la solution B n'est pas. Dans la plupart des cas, la solution A sera meilleure et plus flexible. L'heure principale n'est pas vraie si vous créez une table récapitulative de certaines jointures complexes sur de grandes tables pour les utiliser comme source de requêtes rapides pour des questions courantes. Sauf si vous construisez un Datamart, il est peu probable que ce soit le cas. Aller avec la solution A.

0

La deuxième solution ne serait meilleure que si vous êtes obligé de faire une dénormalisation pour faciliter la mise en cache ou si votre application se développe énormément et que vous avez besoin d'un découpage de base de données. Dans tous les autres cas, je préfère une conception plus propre de la base de données.

0

Multi-table est compliquée, donc, une seule table est pratique, simple et mérite donc d'être considérée. En supposant que la liste de souhaits est une caractéristique d'un site Web, où certains utilisateurs viennent, créer un compte d'utilisateur, puis énumérer leurs souhaits, il peut ne pas être complètement évident, mais si vous y pensez, la question doit être posée, pourquoi voudriez-vous avoir une table d'en-tête définissant la ou les liste (s) de souhaits au lieu d'avoir seulement la deuxième table, énumérant les souhaits. Dans mon esprit, la nécessité d'une telle approche indique que chaque utilisateur voudra (probablement) avoir plus d'une liste de souhaits. Un pour les amis et parents proches et un pour l'aventure de vaisseau spatial prévu pour l'année 2050 :) Sinon, tous les souhaits pourraient probablement être soigneusement répertoriés dans la liste des souhaits (deuxième), sans le premier, pour une liste de souhaits énorme (appelons-le par défaut liste de souhaits), sans distinction entre les désirs, soyez quelque chose que vous souhaitez pour un cadeau, ou prévoyez d'accomplir tout en préparant pour les aventures de vaisseau spatial (mai tous vos souhaits se réalisent :)).

Pour en revenir à la conception des tables, voici quelques considérations. Si vous ne prévoyez pas

  1. utilisation liste de souhaits pour la liste de souhaits réalisation
  2. ajouter des détails, des détails pour chacun des « whishes » séparément

que de stocker la liste dans quelque chose comme une longue chaîne champ permet une seule table. Si vous avez besoin de 2, ajouter une deuxième table est justifié, mais vous pouvez toujours l'éviter en tournant le champ "chaîne longue" dans une colonne XML avec des attributs, où vous pouvez associer l'élément souhaité et quelques commentaires et/ou informations supplémentaires.

Si vous avez besoin de 1, deux solutions de table sont requises afin qu'une relation puisse être établie entre les éléments de la liste de souhaits et tout élément lié à cet élément spécifique, que ce soit un cadeau d'ami ou de parent. souhait, ou quelque chose comme un catalogue de choses stockées dans une autre table.

Si vous utilisez une approche multi-tables, vous devez faire attention à ce que le tableau répertoriant les souhaits individuels n'ait pas d'entrées sans entrée d'en-tête correspondante définissant la liste elle-même. Généralement, les bases de données utilisent une clé étrangère pour appliquer une telle relation. Ainsi, le tableau "item" devra avoir un champ avec une clé de la table parent. En résumé, il est très probable que vous aurez 2 ou 3 tables. Tableau 1 - Liste des comptes utilisateurs Dans le cas le plus simple, cette table aura un champ "ma liste de souhaits" avec une longue chaîne de caractères et/ou une colonne XML. Tableau 2 - énumération des listes de souhaits d'utilisateurs avec une clé notant le compte d'utilisateur associé. Tableau 3 - énumération des éléments de souhait, avec la clé de l'un ou l'autre compte utilisateur (si l'utilisateur ne peut avoir qu'une seule liste de souhaits) ou Tableau 2 si chaque utilisateur peut avoir plusieurs listes de souhaits distinctes. Enfin, en théorie, les utilisateurs peuvent avoir des listes de souhaits partagés. Par exemple, Kate et Simon envisagent de se marier en l'an 2025. Ils souhaitent avoir une cérémonie de mariage dans une cabine sur Vashon Island (la ligne est longue et la dernière fois que j'ai vérifié l'endroit est réservé 4 ans à l'avance). Dans ce cas, une possibilité de 4ème table arrive. Ce tableau permettra de comparer les "utilisateurs" et les "listes de souhaits", afin de permettre la propriété jointe de la liste de souhaits.

Espérons que cela aide.

- bravo!

Questions connexes