Jat*_*ing 7 sql database inheritance database-design
例如,我有两个表:'客户'和'员工'.它们几乎相同,只有2个属性不同.那么我应该创建另一个名为'person'的表包含'customer'和'staff'的所有相同属性,然后创建fk键指向这个'person'?类似于类设计中的继承.
这种方法有什么缺点吗?
是的,这种方法有一个缺点.联接会增加查询复杂性(在某些情况下会非常如此),如果您不小心,可能会增加查询时间.
相反,执行此操作的标准方法(即,当子类之间只有少数属性不同时模拟对象继承)是执行称为单表继承的操作.此方法以一些未使用的数据库空间为代价来防止数据库连接.
它的工作原理如下:您创建一个包含所有属性的表,包括仅适用于其中一个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,并且没有意义.