2010-08-21 13 views
0

Je conçois une base de données relationnelle de produits où il y a des produits qui sont des copies/bootlegs les uns des autres, et j'aimerais pouvoir le montrer à travers le système. Donc au début lors de mon premier brouillon, j'avais un champ dans des produits appelés "isacopyof" pensant simplement lister une liste d'ID de produit, séparés par des virgules, qui sont des copies du produit courant.Base de données MySQL - Résultats associés de la même table/Problème de conception de base de données Many to Many

Évidemment, une fois que j'ai commencé à mettre en œuvre, cela ne fonctionnait pas. Jusqu'à présent, la plupart des solutions relationnelles many-to-many tournent autour d'une table associative listant l'identifiant associé de la table A et l'identifiant associé de la table B. Cela fonctionne, mais ma situation implique des éléments connexes de la même table de produits.

Comment puis-je construire une solution autour de cela? Ou peut-être que je pense dans la mauvaise direction? Parce que quelque chose est une copie, cela signifie que vous avez une relation parent-enfant ... Données hiérarchiques.

Répondre

2

Vous overthinking.

Si vous avez une table products avec une productid clé, vous pouvez avoir une table clones avec productid1 et productid2 champs cartographie products-products et un multi-clé sur les deux champs. Pas de problème, et c'est toujours 3NF.

+0

oh mon Dieu .. J'Overthinking .. Je suppose que tout le tableau de clone nécessaire d'avoir ids de 2 sources différentes ... merci pour le nettoyage de ma tête! – Winterain

2

Vous êtes sur la bonne voie pour les données que vous souhaitez modéliser. Plutôt que d'avoir une table distincte pour contenir la relation, vous pouvez ajouter une colonne à la table existante pour contenir la valeur parent_id - la valeur de clé primaire indiquant le parent à l'enregistrement en cours. Ceci est an excellent read about handling hierarchical data in MySQL ...

Malheureusement, MySQL n'a pas la syntaxe de requête hiérarchique, qui pour des choses comme celles-ci, je recommande fortement la recherche à ceux qui le font:

  • PostgreSQL (gratuit)
  • SQL Server (express est gratuit)
  • Oracle (express est également gratuit)
+0

grâce à la perspicacité et l'article .. Je pense que cela peut être quelque chose que je vais faire face, mais pas ce cas particulier parce que je pourrais avoir plusieurs copies du même produit, donc un produit peut avoir 2 parentIDs, etc. – Winterain

1

Il n'y a aucune raison que vous ne puissiez pas avoir de liens vers la même table de produits dans votre table 'liens'.

Il y a quelques façons de faire, mais une conception de base peut être simplement 2 colonnes:

ProductID1, ProductID2 

Lorsque ces deux colonnes lien vers ProductID dans votre table de produits. Si vous savez quel est le produit 'réel' et quelle est la copie, vous pouvez avoir une logique/des contraintes qui placent le 'real' productID dans ProductID1 et le 'copy' productID dans ProductID2.

+0

hmm ok, vous avez soulevé un point intéressant que je manqué, donc je peut avoir un champ « is_original » pour marquer un produit « réel » ... – Winterain

+0

Si cela n'a pas d'importance si une copie est une copie directe ou une copie d'une copie, je pense que l'approche hiérarchique est probablement exagérée; Je voudrais juste utiliser la table de lien. Bonne idée de maintenir un drapeau pour les originaux. – sasfrog

Questions connexes