我必须使用外键这种情况?

时间:2012-12-12 11:09:28

标签: mysql database-design

嗨,我有点困惑..!

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的新手。 谢谢你

2 个答案:

答案 0 :(得分:1)

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

第二种设计要求,如果两名员工共用同一地址,则地址详细信息必须存档。

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

但是,如果您可能需要允许员工拥有多个员工共享的多个地址和地址,那么您必须考虑从任一表中删除外键并将其移动到新的交叉表< / EM>:

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

您选择的设计取决于您的业务规则以及实际期望的合理程度。

答案 1 :(得分:0)

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

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

此结构将调用(emp entity1和Address entity2)从Employee到address的1-many关系。这意味着多个员工可以住在同一个地址上。但与此同时,一名员工无法居住在多个地点
因此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....)

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

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