1

嗨,我有点困惑..!

address_details(e_address_id(pk),hno,street....)
emp_details(eid(pk),ename,...,e_address_id(fk))

或者

emp_details(eid(pk),ename,...,)
address_details(e_address_id(pk),eid(fk)hno,street....)

无论哪种方式它都有效..但我无法决定我需要选择哪个,让我知道哪个更好..我是 DB Design 的新手。感谢广告

4

2 回答 2

1

第一个设计更好,但可能还不够好。

第二种设计要求如果两个员工共享相同的地址,则必须以冗余方式存储地址详细信息。

第一个设计允许多个员工共享一个地址,这可能是必要的。然而,第一种设计只允许员工拥有一个地址。如果这就是您的系统所需的全部,那么第一个设计就可以了。

但是,如果您可能需要允许员工拥有多个地址并由多个员工共享地址,那么您将不得不考虑从任一表中删除外键并将它们移动到新的交集表

employee_address(e_id(fk), e_address_id(fk))

您选择的设计取决于您的业务规则以及现实中的合理预期。

于 2012-12-12T12:46:51.823 回答
0

您需要了解关系数据库中的多重性概念或关系概念。

address_details(e_address_id(pk),hno,street....)
emp_details(eid(pk),ename,...,e_address_id(fk))

此结构将调用(emp entity1 和 Address entity2)从 Employee 到地址的一对多关系。这意味着多个员工可以住在同一个地址。但同时一名员工不能住在多个地点
所以 EmpA 住在 Add-A
EmpB 住在 Add-B
Empc 住在 Add-A(EmpA 也住在哪里)
在以下结构中 EmpA 不能住在两个地址。

emp_details(eid(pk),ename,...,)
address_details(e_address_id(pk),eid(fk)hno,street....)

上述结构是多一关系。
一个人可以住在多个地址,但两个人不能住在一个地址。希望这能解释很多。

了解更多关系数据库中的读取多重性

于 2012-12-13T04:55:16.640 回答