mysql - 这种情况我必须使用外键的哪一种方式??

标签 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 的新手。 广告感谢

最佳答案

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

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

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

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

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

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

关于mysql - 这种情况我必须使用外键的哪一种方式??,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13838404/

相关文章:

sql - 单个或多个数据库

mysql - Web API 没有得到正确的结果

mysql - 消除mysql中的空值

php - 想要将表单中的数据字段保存到两个模型的两列中

python - 将 MySQL 数据库凭据存储在一个文件中,然后在主脚本中调用该文件

mysql - Mysql Schema中多媒体内容的多语言管理

mysql - [MySQL] : table view or actual table.(跟踪主键)

mysql - 如何查询 mySQL 中的多个表

database - MS Access 的实体关系图

mysql - 非常基础的数据库设计(完全初学者)