【发布时间】:2021-09-19 07:30:46
【问题描述】:
您好,我正在使用 phpmyadmin 创建一个数据库来控制从companyA 到其他公司的订单。我创建了两种公司可以订购并且需要区分的对象:
- 配件(可以是该企业使用
InventoryItems的电池,也可以是从其他企业购买的电池) - InventoryItems(可以是从其他企业购买的螺钉或钉子)
这就是我在deliver 表中得到的内容
CREATE TABLE `deliver` (
`AccesoryId` int(36) NOT NULL,
`ItemId` int(36) NOT NULL,
`OrderId` int(36) NOT NULL,
`quantity` int(11) NOT NULL
)
一切看起来都不错,但这是我的问题:
- 我不能下一个不只包含配件或只包含物品的订单。它们不能为 NULL,因为它们是主键的一部分 所以我尝试将它们从主键中删除,并且只使用 orderId 但现在:
- 我无法将不同的商品或配件链接到一个订单。因为它会重复主键
所以我尝试删除复合主键以摆脱这些问题并创建一个可以链接每个表的主键的关系(这将有助于我能够同时将对象链接到订单是时候让我把它们设为 NULL)
现在我的问题是,关联表没有任何主键是不是很糟糕,还是有更好的方法来做到这一点?
【问题讨论】:
-
你应该张贴
CREATE表格的声明而不是图片。 -
any 表没有主键,这非常很糟糕。
-
我不同意之前的帖子。关联表可以在没有主键的情况下完美运行。虽然关联表的整个 point 是它为新关联创建了一个新行,但您的第二个点无论有没有都可以工作。
-
附注:与您的命名保持一致。 inventory_item 表有一个 itemid。那么库存是如何发挥作用的呢?听起来肯定存在一些库存表,而inventory_item表是item和inventory之间的关联表。由于不是这种情况,要么命名表inventory_item 和ID inventory_item_id,要么命名表item 和ID item_id。顺便说一句,复合名称是关联的好名称:order_item、order_accessory、item_accessory 是数据库中关联表的好名称。