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_id
和item_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 或者如果这些项目。
当然,使用复合主键也是可行的,也是实现逻辑的一种非常可行的方法。
我的数据库中有两个 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_id
和item_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 或者如果这些项目。
当然,使用复合主键也是可行的,也是实现逻辑的一种非常可行的方法。