我最近在关系数据库设计中发现了子类型/超类型方法,因此提出了这个问题:这是与子类型/超类型设计方法混合的正确设计吗?
在我提到persons
和organisations
作为两种不同的类型之前。我知道拥有andparty
的超类型是一种更好的方法。现在,解决了这个问题,添加and both apply for和 for ,从而将它们连接到 supertype 。people
organisation
adresses
additional_addresses
organisations
persons
parties
此外,我需要记录不同的人群,employees
比如projectcontacts
和suppliercontacts
。这些都是不同类型的persons
, 在party
. 这是加入表格persons
以实现此目标的正确方法吗?suppliers
and 也一样debtors
,链接到organisation
表格,因为supplier
and debtors
are always organisations
。
我相信这是一种很好的设计方式,但我可能会错过主键和外键的一些内容,尤其是在查看SupplierContacts
. 有一个外键partyid
应该引用a person
,也有一个外键supplierid
,但这也引用了自己表中supplierid
的某个。partyid
能够从该表中查询信息不是一项非常艰巨的工作吗?这种设计是否合适?
我主要担心的是,许多表需要引用一个人或一个组织,而不是到处都有两个外键,因为我存储了一个person
OR an的记录,所以始终留下一个 NULL organisation
,现在我只有一个外键:partyid
.