Sql ER图缺陷
我有以下银行数据库ER图-客户可能有多个账户,账户可能由多个客户共同持有,每个客户与一个账户集关联,账户是一个或多个账户集的成员。违反了哪些设计规则?应该进行哪些修改,为什么 到目前为止,我不确定的几个缺陷是: 1) AcctSets实体中的冗余所有者地址属性 2) 此ER不包括具有不同地址的多个所有者的帐户 我的问题是:我将如何着手修复这些缺陷和/或我在分析中可能遗漏的其他缺陷?谢谢Sql ER图缺陷,sql,database-design,relational-database,erd,Sql,Database Design,Relational Database,Erd,我有以下银行数据库ER图-客户可能有多个账户,账户可能由多个客户共同持有,每个客户与一个账户集关联,账户是一个或多个账户集的成员。违反了哪些设计规则?应该进行哪些修改,为什么 到目前为止,我不确定的几个缺陷是: 1) AcctSets实体中的冗余所有者地址属性 2) 此ER不包括具有不同地址的多个所有者的帐户 我的问题是:我将如何着手修复这些缺陷和/或我在分析中可能遗漏的其他缺陷?谢谢 我不确定AccountSet实体做什么 您与客户和客户之间存在多对多关系。因此,您需要一个CustomerAc
我不确定AccountSet实体做什么 您与客户和客户之间存在多对多关系。因此,您需要一个CustomerAccount实体,将客户与一个或多个帐户联系起来,并将帐户与一个或多个客户联系起来
CustomerAccount
---------------
CustomerAccountKey
CustomerKey
AccountKey
CustomerKey可以访问该实体以获取客户的帐户,AccountKey可以访问该实体以获取客户的帐户。CustomerAccountKey仅用于对数据库上的数据进行群集
CustomerAccount实体中的CustomerKey-AccountKey组合是唯一的
如果您希望一个客户有多个地址,这将成为客户实体和地址实体之间的一对多关系。这使得客户可以拥有夏季地址和冬季地址,这是一个真实的例子 我不确定AccountSet实体做什么 您与客户和客户之间存在多对多关系。因此,您需要一个CustomerAccount实体,将客户与一个或多个帐户联系起来,并将帐户与一个或多个客户联系起来
CustomerAccount
---------------
CustomerAccountKey
CustomerKey
AccountKey
CustomerKey可以访问该实体以获取客户的帐户,AccountKey可以访问该实体以获取客户的帐户。CustomerAccountKey仅用于对数据库上的数据进行群集
CustomerAccount实体中的CustomerKey-AccountKey组合是唯一的
如果您希望一个客户有多个地址,这将成为客户实体和地址实体之间的一对多关系。这使得客户可以拥有夏季地址和冬季地址,这是一个真实的例子 您没有说明使用抽象
帐户集的原因。您需要在客户
和账户
之间建立一个交集,因为您的业务规则是多对多的,但为什么要有一个中间的抽象呢
即使您保留它,属性所有者地址
也不属于帐户
和客户
(即帐户集
)之间的抽象/交叉实体。这根本没有道理。在您所陈述的规则或共同的经验中,没有任何内容表明客户地址在功能上依赖于客户和客户之间的关系。如果有什么区别的话,它将在功能上仅取决于客户。目前,您正在将这种依赖性建模为多值的,因此地址在功能上甚至不完全依赖于客户。唯一可以放置它的3NF位置是地址
实体类型
<>你应该考虑一个更好的名字而不是<代码>地址< /代码>。首先,您的实体应该根据它们所代表的对象命名。抵制使用复数名词的冲动。实体类型不是集合。实现实体类型的表将是实体实例的集合,但不用说,当您考虑关系的基数时,复数名词命名只会让您感到困惑。我建议将位置
作为实体类型名称,并将地址
作为属性。当你超越概念层面时,地址
几乎肯定会被分解
除此之外,根据您引用的业务规则,您的情况非常好。您没有说明使用抽象帐户集的原因。您需要在客户
和账户
之间建立一个交集,因为您的业务规则是多对多的,但为什么要有一个中间的抽象呢
即使您保留它,属性所有者地址
也不属于帐户
和客户
(即帐户集
)之间的抽象/交叉实体。这根本没有道理。在您所陈述的规则或共同的经验中,没有任何内容表明客户地址在功能上依赖于客户和客户之间的关系。如果有什么区别的话,它将在功能上仅取决于客户。目前,您正在将这种依赖性建模为多值的,因此地址在功能上甚至不完全依赖于客户。唯一可以放置它的3NF位置是地址
实体类型
<>你应该考虑一个更好的名字而不是<代码>地址< /代码>。首先,您的实体应该根据它们所代表的对象命名。抵制使用复数名词的冲动。实体类型不是集合。实现实体类型的表将是实体实例的集合,但不用说,当您考虑关系的基数时,复数名词命名只会让您感到困惑。我建议将位置
作为实体类型名称,并将地址
作为属性。当你超越概念层面时,地址
几乎肯定会被分解
除此之外,根据您所引用的业务规则,您的情况非常好。“账户可能是联合帮助”-您的意思是“持有”?“账户可能是联合帮助”-您的意思是“持有”?