Sql ER图缺陷

Sql ER图缺陷,sql,database-design,relational-database,erd,Sql,Database Design,Relational Database,Erd,我有以下银行数据库ER图-客户可能有多个账户,账户可能由多个客户共同持有,每个客户与一个账户集关联,账户是一个或多个账户集的成员。违反了哪些设计规则?应该进行哪些修改,为什么 到目前为止,我不确定的几个缺陷是: 1) AcctSets实体中的冗余所有者地址属性 2) 此ER不包括具有不同地址的多个所有者的帐户 我的问题是:我将如何着手修复这些缺陷和/或我在分析中可能遗漏的其他缺陷?谢谢 我不确定AccountSet实体做什么 您与客户和客户之间存在多对多关系。因此,您需要一个CustomerAc

我有以下银行数据库ER图-客户可能有多个账户,账户可能由多个客户共同持有,每个客户与一个账户集关联,账户是一个或多个账户集的成员。违反了哪些设计规则?应该进行哪些修改,为什么

到目前为止,我不确定的几个缺陷是:

1) AcctSets实体中的冗余所有者地址属性

2) 此ER不包括具有不同地址的多个所有者的帐户

我的问题是:我将如何着手修复这些缺陷和/或我在分析中可能遗漏的其他缺陷?谢谢


我不确定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位置是
地址
实体类型

<>你应该考虑一个更好的名字而不是<代码>地址< /代码>。首先,您的实体应该根据它们所代表的对象命名。抵制使用复数名词的冲动。实体类型不是集合。实现实体类型的表将是实体实例的集合,但不用说,当您考虑关系的基数时,复数名词命名只会让您感到困惑。我建议将
位置
作为实体类型名称,并将
地址
作为属性。当你超越概念层面时,
地址
几乎肯定会被分解

除此之外,根据您所引用的业务规则,您的情况非常好。

“账户可能是联合帮助”-您的意思是“持有”?“账户可能是联合帮助”-您的意思是“持有”?