我想弄清楚的是爲對象模型的繼承關係映射到關係型數據庫的最佳方式。例如考慮以下類結構。貯藏繼承的對象在數據庫中
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;}
}
下面是我正在考慮如何將此結構保存到數據庫的幾個選項。
選項1:所有項目類型
Items Table: ItemID, Name, Color, Smell
這吮吸,因爲它需要NULL值單桌。
選項2:爲每個項目類型
Widgets Table: WidgetID, Name, Color
Doohicky Table: DoohickyID, Name, Smell
這是更好的,但是會比較困難,列出所有項目單獨的表
選項3:鏈接表
Items Table: ItemID (PK), Name, Size
Widgets Table: WidgetID (PK), ItemID (FK), Color
Doohicky Table: DoohickyID (PK), ItemID (FK), Smell
我認爲這個選項是最好的,因爲它阻止我在任何空值字段,再加上它可以更容易地列出所有的項目,和/或創建一個特定類型的項目(小工具或Doohickies)列表。
但是,我不知道如何創建項目表和窗口小部件和Doohickies表之間的關係。我不想結束在任何表中引用Items表中的相同ItemID的行。
例如,當我添加到窗口小部件表中的條目,我怎麼能確保其鏈接到項目表具有獨特的ItemID的新條目?我是否應該只跟蹤ItemID而不是像WidgetID和DoohickyID那樣分離類型特定的ID,並使用它來創建Items表和類型特定表之間的一對一關係?
選項4
Items Table: ItemID (PK), Name, Size
Widgets Table: ItemID (PK), Color
Doohicky Table: ItemID (PK), Smell
啊這有助於很多。我當然想遵循「類表繼承」模式。 – 2010-09-14 22:31:33