识别和识别模型上的关系

时间:2012-07-22 21:59:46

标签: mysql database model relational-database mysql-workbench

我做了我的模型的草图,但我不知道这种关系(识别和非识别)是否正确,我不想继续让它通过。

如果你能看看我做了什么,告诉我这是否正确,我将不胜感激。

Model of my database

1 个答案:

答案 0 :(得分:2)

一个产品可能有许多订单;一个订单可能包含许多产品:

您的交叉引用表具有以下结构:

+-----------------+
| orders_products |
+-----------------+
| id           PK |
| orders_id    PK |
| products_id  PK |
+-----------------+

我不认为自动递增id字段是必要的,除非订单可以多次包含相同的产品(这没有意义)。如果您这样做是为了记录订单中指定的每种产品的数量,那么为每个quantity添加order_id -> product_id列会更好。我会将该表的结构更改为:

+-----------------+
| orders_products |
+-----------------+
| orders_id    PK |
| products_id  PK |
| quantity        |
+-----------------+

一个用户可能有多个地址预设;一个地址预设可能只属于一个用户:

我认为将addresses表连接到orders表不是一个好主意。如果用户删除或更新他/她的地址预设,该怎么办?删除/更改将级联到包含该地址的任何过去订单。根据您设置级联操作的方式,这些订单记录将被完全删除,或者您将对旧订单进行错误信息。这是参考完整性不合适的一种情况。下订单后,不应该在以后的路上更改为该订单指定的送货地址。

您应该做的是仅使用addresses表来存储用户具有的地址预设列表(以便可以为用户生成下拉选择)。当用户提交订单时,您应该只将实际的文本地址信息插入orders表的“shipping_address”列。


为了更好地理解识别与非识别关系之间的区别,请参阅:

我的答案在这里: