Mysql数据库设计为客户提供多个地址和默认地址

时间:2014-01-12 22:31:37

标签: mysql database database-design e-commerce

我正在使用Mysql和INNODB引擎创建电子商务的数据库结构。

第1点:要为拥有此表的客户创建多个地址

我是以正确的方式做到的吗?我应该如何存储默认地址(在哪个表中)?

第2点:我有另一个名为"供应商"的桌子,我应该只使用" supplier_address"将其连接到地址。表还是有更好的方法?

第3点:表格城市和国家/地区如何?我应该添加一些东西还是可以的?也许是一个领域"区"在两个之间的另一个表?

2 个答案:

答案 0 :(得分:4)

在我看来,你做得太复杂了。没有必要使您的地址架构过度规范化。我见过的大多数处理多个客户地址的系统都有一个类似于你的客户表,然后有一个地址表,如下所示:

 customer_id
 address_ordinal  (small number for each customer: 0,1,2,3 etc).
 primary    (boolean)
 address_1
 address_2
 locality   (city, village, etc)
 province   (state, etc)
 postcode   (zip, postcode etc)
 country

customer_idcustomer表的外键。主键是(customer_idaddress_ordinal)的组合。如果地址是主要地址,则primary列为true

关于您关于供应商的问题,您可能希望创建一个名为“联系人”的公用表,并为您的客户和供应商提供contact_ids。

如果您的系统包含一个包含(邮政编码,地区,省)行的参考表(可能是您从数据供应商处购买的东西),您可以使用它来帮助填充您的地址表。但是你应该避免强迫你的地址只包含硬编码的邮政编码:这些参考表的速度非常快。

答案 1 :(得分:0)

我将用陈词滥调开始回答:“不止一种方法可以给猫皮肤涂抹。”那就是说,我有一些建议:

第1点 - 假设客户可以拥有多个地址(即计费和邮寄),那么是的,就单独的映射表而言,您有正确的想法。至于将一个字段添加到称为默认或首选的customer_addresses或类似的东西,这不是一个坏主意,但另一个选择是添加一个名为address_type的新字段,该字段将引用具有两个记录的单独表,“Billing”和“Mailing” “和/或你想要的任何其他东西。然后,在您编码的任何应用程序中,将使用地址数据,具体取决于您在计费信息页面上的内容,然后编写您在页面本身使用的地址类型{{1} }。

第2点 - 与客户相同。

第3点 - 您是否希望能够显示缩短的国家/地区名称?例如,将“美国”缩写为“美国”,将“加拿大”缩写为“CAN”,或将“英国”缩写为“英国”?为此,我考虑为缩写的国家/地区名称添加字段。