Database 数据库:类和其中一个子类之间的外键。是否使用单个FK列?
我正在修改和扩展一个现有的数据模型,其中一个部分包含个人数据。当前的person表只是一个包含所有字段的大表,包括自然人和法人的字段,而非相关字段仍然为空。 随着我们添加越来越多的字段,我们的想法是要有一个单人表和两个子类NATURALPERSON和LEGALPERSON,其中一个人不可能同时拥有这两个子类 听起来很简单,但开始阅读并怀疑我最初的方法。你会怎么做Database 数据库:类和其中一个子类之间的外键。是否使用单个FK列?,database,database-design,foreign-keys,Database,Database Design,Foreign Keys,我正在修改和扩展一个现有的数据模型,其中一个部分包含个人数据。当前的person表只是一个包含所有字段的大表,包括自然人和法人的字段,而非相关字段仍然为空。 随着我们添加越来越多的字段,我们的想法是要有一个单人表和两个子类NATURALPERSON和LEGALPERSON,其中一个人不可能同时拥有这两个子类 听起来很简单,但开始阅读并怀疑我最初的方法。你会怎么做 我想到的第一个选择是在PERSON表中为外键LEGAL_NATURAL设置一列,它将是指向LEGALPERSON或NATURALPER
这里有明确的赢家吗?三张桌子的设计看起来不错 就PKs和FKs而言,我推荐一种称为共享主键的技术 person表有一个ID字段,用作主键。
自然人和法人表没有独立的ID字段。相反,这两个子类都使用PersonID作为它们自己表中的PK。PersonID也是引用person表中ID的FK
这使连接变得简单、容易和快速。有趣的方法,我没有考虑过这个选项。这也将使数据迁移更容易。
SELECT *
FROM PRSN pr
left join LEGALPERSON_DETAIL lp on pr.legal_natural = lp.id
left join NATURALPERSON_DETAIL np on pr.legal_natural = np.id;