我做了我的模型的草图,但我不知道关系(识别和非识别)是否正确,我不想继续让它过去。
如果您可以看看我所做的,并告诉我这是否正确(或不正确),我将不胜感激。
我做了我的模型的草图,但我不知道关系(识别和非识别)是否正确,我不想继续让它过去。
如果您可以看看我所做的,并告诉我这是否正确(或不正确),我将不胜感激。
一种产品可能有多个订单;一份订单可能包含许多产品:
您的交叉引用表具有以下结构:
+-----------------+
| 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
。
为了更好地理解识别与非识别关系之间的区别,请参阅:
我的回答在这里: