J'essaie de déterminer la meilleure façon de mapper les relations d'héritage dans un modèle objet dans une base de données relationnelle. Considérons par exemple la structure de classe suivante.Stockage des objets hérités dans une base de données
public Class Item
{
public String Name{get; set;}
public int Size {get; set}
}
public Class Widget:Item
{
public String Color{get; set;}
}
public Class Doohicky:Item
{
public String Smell{get; set;}
}
Voici quelques options que je considère pour enregistrer cette structure dans une base de données.
Options 1: Table unique pour tous les types d'éléments
Items Table: ItemID, Name, Color, Smell
Cette suce, car cela nécessiterait des valeurs NULL.
options 2: tables séparées pour chaque type d'élément
Widgets Table: WidgetID, Name, Color
Doohicky Table: DoohickyID, Name, Smell
Cela vaut mieux, mais serait plus difficile d'énumérer tous les articles
options 3: Tables liées
Items Table: ItemID (PK), Name, Size
Widgets Table: WidgetID (PK), ItemID (FK), Color
Doohicky Table: DoohickyID (PK), ItemID (FK), Smell
Je pense que cette option est la meilleure, car elle m'empêche d'avoir des valeurs nulles dans tout champs, plus il sera plus facile de lister tous les éléments, et/ou de créer une liste d'un type spécifique d'élément (Widgets ou Doohickies).
Cependant, je ne sais pas comment créer la relation entre la table Items et les tables Widgets et Doohickies. Je ne veux pas finir avec une ligne dans l'une ou l'autre des tables référençant le même ItemID dans la table Items. Par exemple, lorsque j'ajoute une entrée à la table Widgets, comment puis-je m'assurer qu'elle est liée à une nouvelle entrée dans la table Items avec un ItemID unique? Dois-je à la place suivre uniquement l'ID d'élément plutôt que des ID spécifiques de type distincts tels que WidgetID et DoohickyID, et l'utiliser pour créer une relation un à un entre la table Items et les tables spécifiques au type?
Options de 4
Items Table: ItemID (PK), Name, Size
Widgets Table: ItemID (PK), Color
Doohicky Table: ItemID (PK), Smell
Ahh cela aide beaucoup. Je voudrais vraiment suivre le modèle "Class Table Héritage". –