MySQL数据库中的循环引用

时间:2014-05-06 16:37:39

标签: php mysql

我正在开发一个数据库,我有一个客户表,一个供应商表和一个地址表。我以为我会在地址表的每一行中放置一个客户ID和供应商ID,但允许它们为空。

供应商可能一次只有一个地址,但为了以防万一,我会创建它以允许多个地址。

客户通常会有2个地址,但可能有很多地址。

客户表格将包含字段" default_shipping_id"和" default_billing_id"

我可以在没有FOREIGN KEY约束的情况下执行此操作,但如果我尝试使用约束创建这些表,则由于循环引用而出现错误。我应该单向制作约束还是可以/应该在创建表之后添加约束?

1 个答案:

答案 0 :(得分:1)

尝试设计数据库时要整洁灵活。 5个表格供您的解决方案使用 -

1) `address` table
`id`
`address`

2) `customers` table
`id`
`name`
`email`

3) `customer_address_mapping` table
`id`
`customer_id` (FK to `customers` table)
`address_id` (FK to `address` table)
`is_billing` (Boolean field)
`is_shipping` (Boolean field)

4) `vendors` table
`id`
`name`
`email`

5) `vendor_address_mapping` table
`id`
`vendor_id` (FK to `vendors` table)
`address_id` (FK to `address` table)


说明:

address表格将是所有dumpaddresses中所有customers的{​​{1}}。两个映射表都可以让您灵活地添加所需的地址。 vendorsis_billing布尔字段将告诉您客户的地址类型。