数据库方法 - 冗余数据

时间:2011-07-22 14:46:52

标签: mysql duplicate-data redundancy

我有3张桌子:

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

我的问题是:保存在货件表product_id中是否正确?我保留在这里,以便在不使用订单表的情况下查找已发货产品的信息。

3 个答案:

答案 0 :(得分: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, ... )

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

答案 1 :(得分:1)

您可以这样做,但要小心 - 如果表格顺序中的信息可能会发生变化,则会出现问题 - 即如果表格顺序中的相应记录更改了product_id,则数据库将不一致。

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

同时检查数据库设计的NORMAL FORMS(NF),我不确定这种冗余是否违反了某些正常形式。但如果您决定保留一些NF,则取决于您。

答案 2 :(得分:1)

遵循真理和美的原则,你不应该存储多余的数据 - 这是发生错误的好机会,它很难看,它会引起未来开发人员的思维混乱。

你被允许打破真理和美丽的原则,但只有当你遇到一个问题时,你才能以任何其他方式解决。例如,如果您通过加入订单表发现查询速度太慢,那么对数据进行非规范化(这是您正在做的技术名称)是可以的 - 如果您记录它并确保所有开发人员都能理解。

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