ERD 一张桌子从另一张桌子(一张桌子)得到 2 FK

问题描述 投票:0回答:2

我正在设计一个ERD,我有一个问题:

如你所见,我的“account”表在“order”表中有 2 个 FK 关系。那么这样做是一个好习惯吗?或者我必须将我的“帐户”表分成“员工”表和“客户”表?

database-design erd
2个回答
1
投票

实体之间存在多重关系没有限制。有时一个实体存在多个自引用关系。 但是在您的特定领域中,员工和客户是否共享相同的概念?它们在概念上是否在某种抽象层次上共享相同的概念?

也许您可以创建一个 Account 实体,以及另外两个实体,StaffAccount 和 ClientAccount,它们都与 Account 实体具有 IS-A 关系。 然后,当您实现数据库和创建表时,您可以决定天气创建具有一个表或多个表的这三个实体。


0
投票

是的...

同一张表之间可能有多个关系。这是有道理的 如果关系意味着不同的事情。在这里,您可能有

staff_id
告诉工作人员中谁正在处理订单,而
customer_id
告诉谁已经订购并应支付和接收订单。

这对于鱼尾纹 ERD 表示法可能看起来很奇怪,因为它们看起来多余。然而,这不是致命的:

  • 完全可以为关系命名,将名称放在行的中间附近,或者甚至在行的前半部分和后半部分指出每一侧的精确含义(例如“订购者”/“订单”与“由“/”进程处理)。一些例子这里.
  • Chen 的符号表示 ERD 中的关系,带有一个大的命名菱形,清楚地说明了关系的含义。

但是...

department_id
available
似乎只与员工相关,与客户无关。另一方面,对于客户,我还希望有送货地址和账单地址。

如果只有很少的几个字段只与客户或员工相关,那么让这些字段可以为空并确保以一致的方式填写它们将是完全有效的。这称为“单表继承”(将两种不同类型的实体视为一个实体)。

但是,客户不是账户,员工也不是。所以你不应该引入继承(“IS-A”关系)。客户和员工都有一个帐户。因此,强烈建议引入两个独立的表格

STAFF
CUSTOMER
,并将
order
与这些表格中的每一个相关联。
Account
也指
staff_id
customer_id
(由您决定两者对于应用程序帐户是否互斥)。这将增加关注点的分离。这是未来的证明(例如,公司客户可能允许同一家公司的多个帐户)

不相关:永远不要存储

password
。相反考虑一个
password_hash
:这增加了员工和客户的安全;-)

© www.soinside.com 2019 - 2024. All rights reserved.