1

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

4

3 回答 3

3

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

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

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

Addresses
 - id (auto incrementing)
 - user_id
 - details

地址表中的 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

于 2013-07-16T17:14:44.290 回答
1

要学习数据库设计的原理,参加范式是一种可靠的资源。
数据库规范化是根据标准范式的关系来表示数据库的过程,其中第一范式是最低要求。
第一个范式的示例部分中所示的示例是您问题的答案:

是的,您可能有一个单独的Address表。(如@aowie1 所述)
请注意,您可以根据业务需求对您的设计进行规范化和反规范化。

于 2013-07-17T12:30:50.967 回答
0

一种简单的方法是设置客户和地址表。将地址表中的所有地址字段和客户表中客户的所有人口统计字段保留:

CUSTOMER TABLE
id
field1
field2
etc..

ADDRESS TABLE
id
customer_id
type //billing, shipping, etc.
street1
street2
city
etc...

然后,您可以在查询中加入这两个表,然后在给定时间选择您需要的地址类型。您还可能在表中的 customer_id 和类型字段上有一个唯一索引。

于 2013-07-16T17:11:02.900 回答