Désolé pour le mauvais titre, mais je n'ai aucune idée de comment mettre cela en bref. Le problème est le suivant:Avoir un comportement de type instance dans les bases de données
J'ai un élément générique qui représente un groupe, appelons-le Car. Maintenant, ce Car a des attributs, qui vont dans certaines limites, disons par exemple la vitesse est comprise entre 0 et 180 pour un voiture d'habitude. Imaginez quelques autres attributs avec des plages ici, par exemple Couleur est entre 0 et 255 quelle que soit cette valeur.
Donc, dans ma table GenericItems J'ai:
ID Name
1 Car
Et dans mon Attributs Je:
ID Name Min_Value Max Value
1 Speed 0 180
2 Color 0 255
La relation entre la voiture et les attributs est donc 1: n.
Maintenant, je commence à avoir des instances très spécifiques de mon Car par exemple un FordMustang, un FerrariF40, et un DodgeViper. Ce sont des instances spécifiques et maintenant je veux leur donner des valeurs spécifiques pour leurs attributs.
Donc, dans ma table SpecificItem J'ai:
ID Name GenericItem_ID
1 FordMustang 1
2 DodgeViper 1
3 FerrariF40 1
Maintenant, je besoin d'une troisième table SpecificAttributes2SpecificItems, pour correspondre à des attributs à SpecificItems:
ID SpecificItem_ID Attribute_ID Value
1 1 1 120 ;Ford Mustang goes 120 only
2 1 2 123 ;Ford Mustang is red
3 2 1 150 ;Dodge Viper goes 150
4 2 2 255 ;Dodge Viper is white
5 3 1 180 ;FerrariF40 goes 180
6 3 2 0 ;FerrariF40 is black
Le problème avec cette le design est, comme vous pouvez le voir, que je copie toujours sur toutes les lignes d'attributs, et je me sens comme C'est un mauvais design, inconsistant, etc. Comment puis-je atteindre cette logique d'une manière correcte et normalisée?
Je veux être en mesure d'avoir plusieurs éléments génériques, avec plusieurs attributs avec des valeurs min/max comme intervalle, qui peut être « instanciées » avec des valeurs spécifiques
upvote pour être drôle;) Ce qui me préoccupe est que ma conception se sent tout simplement faux. Quand j'écris mes inserts ... en faisant défiler tous les attributs "template", et en les copiant dans ma table d'intersection, en les spécialisant avec une valeur. J'ai l'impression de simuler quelque chose ici, qui devrait être amélioré. – Tom