MySQL 没有主键的订单项目?

MySQL items of an order without primary key?

我的数据库中有两个 table,它们属于彼此。 mp_order 和 mp_order_items。

mp_order 包含客户订单的主要信息,如地址、日期等。 (order_id, customer_company, customer_name, customer_adress, order_date, ... [等等])

mp_order_items 有已订购的 priducts/items (order_id, item_id, item_qty)

由于 order_id 和 item_id 可以重复(但不能组合),我无法将一列设置为主键。 我应该将另一列作为单个条目的唯一标识符,还是在没有主键的情况下使用 table 是否有效?

既然你的要求是order_iditem_id不能重复组合意思是:(ord_134,itm_123)不能重复自己,我相信您需要创建一个 COMPOSITE KEY.

PRIMARY KEY(order_id, item_id)

基本上,订单 ID 和项目 ID 的组合将唯一标识 table 中的记录。 需要注意的是,如果需要,在定义 FOREIGN KEY 时,您不能仅使用 order_id link table。您需要在 FOREIGN KEY 关系中包括属于 COMPOSITE KEY 的所有列。

您有两个选择:

  • (order_id, item_id)
  • 上定义一个主键
  • 定义合成主键,例如自增列。

我更喜欢第二种方法。未来更灵活:

  • 也许一个订单可能包含相同的商品,但价格或送货地址或送货时间不同。
  • 这些行是用一个数字唯一定义的,如果您以后需要修改行,可以更容易地找到它们。
  • 在另一个 table 中更容易引用这些行,例如,如果您有一个 returns table 或者如果这些项目。

当然,使用复合主键也是可行的,也是实现逻辑的一种非常可行的方法。