IT源码网

.net之如何有效地对数据库中的继承进行建模

third_qq_acbf90bbd2dede1d 2025年05月04日 程序员 19 0

在数据库中建模继承的最佳实践是什么?

权衡是什么(例如可查询性)?

(我对 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 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!