我有一个相当简单的问题,关于自然/代理关键用法在明确定义的背景中经常表现出来,并且我将说明.
假设您正在使用SQL Server 2005作为DBMS设计产品的数据库模式.为简单起见,假设只涉及两个实体,它们已映射到2个表,Master和Slave.假使,假设:
问题是:您将如何为这些表设计键/约束/引用?你愿意(争论你的选择):
至于我,我会选择2),主要是因为假设3)和表现方面,但我想听听别人的意见(因为关于这个话题有相当公开的辩论).
谢谢
在我们的数据库模型中,我们有一个受益人实体.受益人可以是自然人或公司受益人; 一个物理受益人有许多属性,如姓名,性别等; 此外,受益人(公司或自然人)可以是外国的,也可以不是; 这种进一步的区别转化为"共同"属性集的不同域值(例如,在我居住的意大利,税ids可能具有与英国税ids不同的数据格式).
我们现在正在重新设计受益人表,因为最初从事数据库分析和建模工作的开发人员做了一个(IMO)短视选择.他将主键约束放在属性BeneficiaryName上,用于存储公司名称(例如"Microsoft Corporation")(如果是公司受益人)或姓氏(例如Smith)用于实际受益人.这样我们就有了(不可接受的)约束,我们的数据库中不能有超过1名姓氏为"Smith"(或名为"Smith"的公司)的受益人.
我对这种"重新分解"的方法将引入受益人实体的概括; 我会
这应该解决上述BeneficiaryName的唯一性问题.到目前为止似乎还可以吗?
我遇到的真正问题是:我该怎样/应该如何处理这个模型中"外来"属性所增加的复杂性?我应该留下外国,即受益人的旗帜属性吗?如果是这样,我如何处理对于概念上类似的信息(即邮政编码,税号)以及重复属性(zipcode_foreign,zipcode,taxid_foreign,taxid等)的不同属性的需求?我是否真的应该努力将不同的域值容纳到一个字段中?
任何建议都会受到欢迎......