【发布时间】:2010-09-09 00:28:16
【问题描述】:
我正在尝试找出将对象模型中的继承关系映射到关系数据库的最佳方法。例如考虑下面的类结构。
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
我认为这个选项是最好的,因为它可以防止我在任何字段中使用 Null 值,而且它可以更轻松地列出所有项目,和/或创建特定类型项目的列表(小部件或Doohickies)。
但是,我不确定如何创建 Items 表与 Widgets 和 Doohickies 表之间的关系。我不想在任一表中引用 Items 表中相同的 ItemID 的行结束。
例如,当我向 Widgets 表添加一个条目时,如何确保它链接到 Items 表中具有唯一 ItemID 的新条目?我是否应该只跟踪 ItemID 而不是单独的类型特定 ID(如 WidgetID 和 DoohickyID),并使用它在 Items 表和类型特定表之间创建一对一的关系?
选项 4
Items Table: ItemID (PK), Name, Size
Widgets Table: ItemID (PK), Color
Doohicky Table: ItemID (PK), Smell
【问题讨论】:
标签: database-design orm relational-database