我有一个Address
表,其中id
为主键(我知道这不是最佳方式,但与问题无关)。
我还有其他3个表:SUPPLIER
,PERSON
和CLIENT
。他们所有人都有id
PK
。
我想在其他3个表中使用这个1 Address
表。在我的其他3个表中使用Address.id
作为不可空的FK很简单(业务规则说SUPPLIER
,PERSON
或CLIENT
必须始终有一个地址,所以空值是不允许的)
我可以轻松搞定......
但有人告诉我一个不同的方法:
完全删除SUPPLIER
,PERSON
和CLIENT
中的FK,并创建一个名为ADDRESS_REL
的新表格,其中包含以下列:
第二种方法有一些优点和缺点
缺点:
当我说30个具有相同地址的人时,我的ADDRESS
表中有1行,PERSON
表中有30行,ADDRESS_REL
中有30行表。另外,我ADDRESS_REL
表中的这30行也有
一些空列(supplier_id& client_id)...
当我介绍另一个数据库表时,我们说COMPANY
,我希望它有一个地址,我必须使用列ADDRESS_REL
来查看company_id
表(还引入了一个额外的空栏)
我必须使用数据库存储过程来确保SUPPLIER
,PERSON
和CLIENT
始终拥有ADDRESS
(我无法做到)这在我的程序代码中,因为有时我们会对数据库中的数据进行硬编码,并且我希望确保SUPPLIER
,PERSON
和CLIENT
的业务要求始终具有地址
优点:
实际上无法想出一个很好的理由,但在开始实施和构建新的数据库结构之前,我想好好想一想。我的问题是和我一起思考,也许我忽视了一些事情。我现在倾向于使用第一种方法,除非人们可以用一些新的论点来说服我......