在数据库中建模继承的最佳实践是什么?
权衡是什么(例如可查询性)?
(我对 SQL Server 和 .NET 最感兴趣,但我也想了解其他平台如何解决此问题。)
最佳答案
有多种方法可以对数据库中的继承进行建模。您选择哪个取决于您的需求。以下是一些选项:
每种类型表 (TPT)
每个类都有自己的表。基类中包含所有基类元素,从它派生的每个类都有自己的表,有一个主键,也是基类表的外键;派生表的类仅包含不同的元素。
例如:
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
会产生如下表格:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
每个层次结构表 (TPH)
有一个表代表所有继承层次结构,这意味着其中几个列可能是稀疏的。添加了一个鉴别器列,它告诉系统这是什么类型的行。
考虑到上面的类,您最终会得到这个表:
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
对于行类型为 0(人)的任何行,开始日期将始终为空。
每混凝土工作台 (TPC)
每个类都有自己的完整表格,不引用任何其他表格。
考虑到上面的类,您最终会得到以下表格:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate
关于.net - 如何有效地对数据库中的继承进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/190296/