我有3个表:数据库阿布罗奇 - 冗余数据
products (id, name, price, etc)
orders (id, date, payment_method, etc)
shipments (id, order_id, product_id, address, etc)
我的问题是:这是正确的,以保持出货量表PRODUCT_ID?我将它保留在这里以查找有关已发货产品的信息,而不使用订单表。
我有3个表:数据库阿布罗奇 - 冗余数据
products (id, name, price, etc)
orders (id, date, payment_method, etc)
shipments (id, order_id, product_id, address, etc)
我的问题是:这是正确的,以保持出货量表PRODUCT_ID?我将它保留在这里以查找有关已发货产品的信息,而不使用订单表。
我建议:
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, ...)
出货是一种多余的 - 我想补充继真与美的原则,地址等转化为订单......
你可以这样做,但要小心 - 如果在订单表中的信息可能会改变,这将是一个问题 - 即,如果在订单表相应的记录改变PRODUCT_ID,数据库会出现不一致。
我确实使用冗余列,例如在静态词典中。
还检查数据库设计的正常形式(NF),我不知道这个冗余是否违反了一些正常的形式。但如果你决定保留一些NF,这取决于你。
,你不应该存储冗余数据 - 这是发生错误的好机会,这很丑陋,会引起未来开发人员的困惑。
你被允许打破真与美的原则,但只有当你遇到一个问题,你不能以任何其他方式解决。例如,如果通过加入订单表发现您的查询太慢了,那么将数据非规范化(这是您正在做的事情的技术名称)是可以的 - 如果您记录它并确保所有开发人员都了解。
只是在查询中避免额外加入似乎不是一个足够好的理由....
订单中是否包含产品?在我看来,订单有1-> n个产品和1-> n个出货。这不是这种情况吗? – GarlicFries
如果您在同一订单上有两种产品,您会做什么? –
为什么这样做?您只需编写适当的连接以从架构的正确标准化版本获取数据 – manku