数据库设置(多个表使用1个地址表)

时间:2015-02-12 10:52:05

标签: c# sql-server database entity-framework asp.net-mvc-3

我有一个Address表,其中id为主键(我知道这不是最佳方式,但与问题无关)。

我还有其他3个表:SUPPLIERPERSONCLIENT。他们所有人都有id PK

我想在其他3个表中使用这个1 Address表。在我的其他3个表中使用Address.id作为不可空的FK很简单(业务规则说SUPPLIERPERSONCLIENT必须始终有一个地址,所以空值是不允许的)

我可以轻松搞定......

但有人告诉我一个不同的方法:

完全删除SUPPLIERPERSONCLIENT中的FK,并创建一个名为ADDRESS_REL的新表格,其中包含以下列:

  • address_id(不允许空)
  • supplier_id(允许空值)
  • person_id(允许空值)
  • client_id(允许空值)

第二种方法有一些优点和缺点

缺点:

  • 当我说30个具有相同地址的人时,我的ADDRESS表中有1行,PERSON表中有30行,ADDRESS_REL中有30行表。另外,我ADDRESS_REL表中的这30行也有 一些空列(supplier_id& client_id)...

  • 当我介绍另一个数据库表时,我们说COMPANY,我希望它有一个地址,我必须使用列ADDRESS_REL来查看company_id表(还引入了一个额外的空栏)

  • 我必须使用数据库存储过程来确保SUPPLIERPERSONCLIENT始终拥有ADDRESS(我无法做到)这在我的程序代码中,因为有时我们会对数据库中的数据进行硬编码,并且我希望确保SUPPLIERPERSONCLIENT的业务要求始终具有地址

优点:

实际上无法想出一个很好的理由,但在开始实施和构建新的数据库结构之前,我想好好想一想。我的问题是和我一起思考,也许我忽视了一些事情。我现在倾向于使用第一种方法,除非人们可以用一些新的论点来说服我......

0 个答案:

没有答案