mysql - 设计 mysql 表时的外键放置

标签 mysql database-design relational-database database-schema

在设计mysql表的时候,外键的放置有什么规定吗?

即一些开发人员会这样做。

//Place the "address_id" inside the customer table
//Customer Table
Customer_id, Address_id, Customer_Name
    1            1            Jay

//Address Table
Address_id,  City
    1       London

有些人会这样做。

//Place the "customer_id" inside the address table
//Customer Table
Customer_id, Customer_Name
    1            Jay

//Address Table
Address_id, Customer_id,  City
    1            1       London

哪种方法更好,为什么?这些开发人员在做出与外键放置相关的决策时会考虑什么?

这可能是一个愚蠢的问题,对某些人来说可能是显而易见的。但我真的很难消除这种困惑,非常感谢您的帮助。

最佳答案

第一种方法允许每个客户使用一个地址,第二种方法允许每个客户使用多个地址。这完全基于需求。例如,如果您想记录办公室和家庭地址,则首选第二种方法。记录现在和通信地址、总公司地址和分公司地址等多种场景。

Refer Wikipedia on Cardinality (data modelling)

关于mysql - 设计 mysql 表时的外键放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17526901/

相关文章:

mysql - Backand 地理点查询

python - Django super 保存和 #1062 键 "PRIMARY"的重复条目

mysql - 如何使用两个中间表进行连接?

mysql - 请求者和技术人员两类用户的数据库设计

sql - PostgreSQL - 使用 INHERITS 而不是引用来建模 OOP 继承的优点和缺点?

android - SQlite:数据只会第一次插入表中,第二次不会

使用 Like 内连接更新 MySQL

php - 如何通过 php 检测和修复 mysql 数据库中的字符编码?

c# - SQL Server 用户实例中的哪些内容使它们无法在非 Express Edition 中使用?

mysql - 建表时实体一一对应