mysql - 一个客户有多个可能的物理地址,如何设计数据库模式?

标签 mysql database database-design

我是数据库新手,我想构建一个项目以更好地理解这些主题。 我的问题是:让我们想象一下,我们正在接受向具有多个地址的客户交货的订单。每个客户可以注册 1 到 3 个地址。设计这样的数据库的最佳方法是什么,我应该在客户表中有 3 个不同的字段,如 adrs1、adrs2、adrs3 并将 adrs 插入该字段吗?此外,我应该能够使用所有地址字段查询同一客户。我想不出出路。 从现在开始谢谢。

最佳答案

您想要所谓的“一对多关系”。在像您这样的情况下,这意味着任何一个客户都有多个地址。

您可以使用至少两个数据库表来完成此操作:

Customers
 - id (auto incrementing)
 - name
 - etc...

Addresses
 - id (auto incrementing)
 - user_id
 - details

addresses 表中的 user_id 列是对客户的引用。设置此架构后,您可以根据需要使用联接来查询数据。

一个查询可能看起来像:(在 MySQL 中)

SELECT * FROM customers
RIGHT JOIN addresses ON addresses.user_id = customers.id

注意:此查询仅选择实际存储了地址的客户。

进一步阅读:http://www.techopedia.com/definition/25122/one-to-many-relationship

关于mysql - 一个客户有多个可能的物理地址,如何设计数据库模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682814/

相关文章:

database - 无法解析字符串值中的占位符 'database.driverClassName'

mysql - 无法将表单帖子存储在数据库中

mysql - MySQL 加密的最佳实践?

python - 如何使用sql数据库中的列值作为python函数的参数?

mysql - 触发器触发另一个触发器不起作用

SQL Server 2012 : How can a column-store index provide multiple columns at once?

sql - 字符串列的索引

mysql - ASP.NET MVC Razor,使用 url/profile/{username} 生成配置文件

mysql - 无法在表中插入值,出现错误,列数不匹配

database - 无法决定设置为主 ID 的方式和值