MySQL数据库中的循环引用


Circular reference in MySQL database

我正在处理一个数据库,其中我有一个客户表,一个供应商表和一个地址表。我认为应该在地址表的每一行中放置客户id和供应商id,但允许它们为空。

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

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

客户表将具有字段"default_shipping_id"answers"default_billing_id"

我可以在没有FOREIGN KEY约束的情况下做到这一点,但是如果我尝试用约束创建这些表,就会因为循环引用而得到错误。我应该使约束是单向的,还是可以/应该在表全部创建后添加约束?

在设计数据库时尽量简洁灵活。解决方案的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表将是所有customersvendors的所有addressesdump。这两个映射表都为您提供了添加任意数量地址的灵活性。is_billingis_shipping布尔字段将让您知道客户的地址类型。