1

我有 3 张桌子:

products (id, name, price, etc)
orders (id, date, payment_method, etc)
shipments (id, order_id, product_id, address, etc)

我的问题是:保留在出货表product_id 中是否正确?我把它放在这里是为了在不使用订单表的情况下查找有关已发货产品的信息。

4

3 回答 3

2

我会建议:

products (product_id, name, price, etc)
orders (order_id, date, payment_method, etc)
orderitem (orderitem_id, order_id, product_id, ...)
shipment (shipment_id, order_id, ... )

装运有点多余-我会将地址等添加到订单中...

于 2011-07-22T14:56:22.033 回答
1

你可以这样做,但要小心——如果表orders 中的信息可能发生变化,那将是一个问题——即如果表orders 中的相应记录更改了product_id,则数据库将不一致。

我确实使用了冗余列,例如在静态字典中。

还要检查数据库设计的标准形式(NF),我不确定这种冗余是否不违反某些标准形式。但是,您是否决定保留一些 NF 取决于您。

于 2011-07-22T14:52:58.800 回答
1

遵循真与美的原则,你不应该存储冗余数据——这是一个错误发生的好机会,它很丑陋,它会导致未来开发人员的头脑混乱。

你可以打破真与美的原则,但前提是你遇到了无法以任何其他方式解决的问题。例如,如果您发现通过加入 orders 表查询太慢,那么非规范化数据(这是您正在做的事情的技术名称)是可以的 - 如果您记录它并确保所有开发人员都理解。

仅仅避免在查询中加入额外的连接似乎不是一个足够好的理由......

于 2011-07-22T15:31:59.387 回答