2

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

如果您可以看看我所做的,并告诉我这是否正确(或不正确),我将不胜感激。

我的数据库模型

4

1 回答 1

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仅使用该表来存储用户拥有的地址预设列表(以便可以为用户生成下拉选择)。当用户提交订单时,您只需将实际的文本地址信息插入表格上的“shipping_address”列orders


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

我的回答在这里:

于 2012-07-22T22:43:29.017 回答