关于具有多种行为的Document表的数据库设计的意见

时间:2017-07-20 12:32:52

标签: sql postgresql database-design

Document是一种结构,其中包含有关origindestination之间的交易的所有信息。 origindestination都可以是两种类型,companyperson。模拟这样一个用例的最佳方法是什么?

观念1:

Document
**document_columns**
origin_id -> foreign key
origin_type -> customer or person
destination_id -> foreign key
destination_type -> customer or person

观念2:

Document
**document_columns**

DocumentOrigin
document_id
origin_id
origin_type

DocumentDestination
document_id
destination_id
destination_type

观念3:

DocumentCompany
**document_columns**
company_id

DocumentPerson
**document_columns**
person_id

可能影响彼此选择的事情是需要收集所有Documents的报告,就好像它们是相同的一样。还应考虑使用UNION或其他更高级的SQL命令来生成有关模式的信息。

1 个答案:

答案 0 :(得分:1)

假设您已经拥有公司和个人表。你可以创建一个actor表,它有一个CompanyID和一个PersonID外键,如果它是一个人,那么PersonID将有一个值,否则它将为null。如果它是公司,那么CompanyID将具有值,否则它将为null。因此,您将拥有Actor(ID,CompanyID,PersonID,...),Company(CompanyID,...),Person(PersonID,...)和Document(DocumentID,OriginID,DestinationID),其中包含OriginID和DestinationID将是Actor表的外键,其中OriginID将引用原始人/公司,而DestinationID将引用目标人/公司。