设计带继承的数据库是个好主意吗?

Jat*_*ing 7 sql database inheritance database-design

例如,我有两个表:'客户'和'员工'.它们几乎相同,只有2​​个属性不同.那么我应该创建另一个名为'person'的表包含'customer'和'staff'的所有相同属性,然后创建fk键指向这个'person'?类似于类设计中的继承.

这种方法有什么缺点吗?

Ben*_*Lee 6

是的,这种方法有一个缺点.联接会增加查询复杂性(在某些情况下会非常如此),如果您不小心,可能会增加查询时间.

相反,执行此操作的标准方法(即,当子类之间只有少数属性不同时模拟对象继承)是执行称为单表继承的操作.此方法以一些未使用的数据库空间为代价来防止数据库连接.

它的工作原理如下:您创建一个包含所有属性的表,包括仅适用于其中一个type属性的属性,以及用于指定对象类型的属性.例如,如果customer有属性:

id,name,email,password,order_date

AND staff有属性:

id,name,email,password,hire_date

然后创建一个包含所有属性和类型的列的表:

id,type,name,email,password,order_date,hire_date

type列将始终包含"客户"或"员工".如果type是"客户",那么hire_date总是为NULL,并且没有意义.如果type是"职员"则order_date总是为NULL,并且没有意义.


Bil*_*win 5

您正在描述模式调用类表继承.这是一个有效的设计,但与任何其他设计一样,它必须具有良好的判断力.阅读Martin Fowler的"企业应用程序架构模式",了解有关其优缺点的更多详细信息.

有些人警告不要使用连接,但只有在需要特定于子类的列时才需要连接.当给定查询只需要公共列时,您可以避免额外连接.