Schéma proposé
Tout d'abord, voici un exemple de mon schéma proposé à référencer tout au long de mon post:
Clothes
----------
ClothesID (PK) INT NOT NULL
Name VARCHAR(50) NOT NULL
Color VARCHAR(50) NOT NULL
Price DECIMAL(5,2) NOT NULL
BrandID INT NOT NULL
...
Brand_1
--------
ClothesID (FK/PK) int NOT NULL
ViewingUrl VARCHAR(50) NOT NULL
SomeOtherBrand1SpecificAttr VARCHAR(50) NOT NULL
Brand_2
--------
ClothesID (FK/PK) int NOT NULL
PhotoUrl VARCHAR(50) NOT NULL
SomeOtherBrand2SpecificAttr VARCHAR(50) NOT NULL
Brand_X
--------
ClothesID (FK/PK) int NOT NULL
SomeOtherBrandXSpecificAttr VARCHAR(50) NOT NULL
Énoncé du problème
J'ai une table de vêtements qui a des colonnes comme le nom, la couleur, le prix, le brandid et ainsi de suite pour décrire les attributs d'un vêtement particulier.
Voici mon problème: différentes marques de vêtements nécessitent des informations différentes. Quelle est la meilleure pratique pour traiter un problème comme celui-ci?
Notez que pour mes besoins, il est nécessaire de trouver des informations spécifiques à la marque à partir d'une entrée de vêtements . C'est parce que j'affiche d'abord les informations d'une entrée de vêtements à l'utilisateur, après quoi je dois utiliser ses informations spécifiques à la marque pour acheter l'article. En résumé, il doit y avoir une relation directionnelle entre les vêtements (de) et la marque_x tables .
Solution proposée / actuelle
Pour y faire face, j'ai pensé au schéma de conception suivant:
La table de vêtements aura une colonne de marque qui peut avoir des valeurs d'ID allant de 1 à x, où un ID particulier correspond à une table spécifique à la marque. Par exemple, l'id valeur 1 correspondra à la table brand_1 (qui pourrait avoir une colonne url ), l'id 2 correspondra à brand_2 (qui pourrait avoir une colonne fournisseur ), etc.
Ainsi, pour associer une entrée de vêtements particulière à ses informations spécifiques à la marque, j'imagine que la logique au niveau de l'application ressemblera à ceci:
clothesId = <some value>
brand = query("SELECT brand FROM clothes WHERE id = clothesId")
if (brand == 1) {
// get brand_1 attributes for given clothesId
} else if (brand == 2) {
// get brand_2 attributes for given clothesId
} ... etc.
Autres commentaires et réflexions
J'essaie de normaliser l'ensemble de ma base de données dans BCNF, et bien que ce soit ce que j'ai trouvé, le code d'application qui en résulte me rend très anxieux. Il n'y a aucun moyen d'imposer des relations, sauf au niveau de l'application, et donc la conception semble très hacky et, je pense, très sujette aux erreurs.
Recherche
J'ai vérifié les entrées précédentes avant de publier un article. Voici un article avec un problème presque identique que j'ai réussi à trouver. J'ai quand même fait ce post car il semble que la seule réponse fournie ne dispose pas d'une solution SQL ou basée sur la conception (c'est-à-dire qu'elle mentionne la POO, l'héritage et les interfaces).
Je suis également un peu novice en ce qui concerne la conception de bases de données, et j'apprécierais donc toutes les informations.
Il semble qu'il y ait des réponses plus utiles sur Stack Overflow:
- Ici
- Et ici
- Aaaand ici (le concept clé étant: l'héritage de table de classe)
J'y ai fait référence aux solutions et je suggère à d'autres personnes qui trouvent ma question de le faire également.
Malgré les liens ci-dessus, je suis toujours à la recherche de réponses ici et j'apprécierais toute solution fournie!
J'utilise PostgreSQL.