在数据库中建模继承的最佳实践是什么?
有什么权衡(例如可查询性)?
(我对 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)