我有一个问题,我可能已经知道答案,但我仍然希望听取您的意见。在店铺数据库中维护历史数据
我正在创建一个简单的商店数据库。我有一个产品表和一个订单表,并且我在这两者之间创建了一个名为Order2Product的联结表来存储订单的内容。
Product
- id (pk)
- name
- price
Order
- id (pk)
- order_date
- customer (fk)
Order2Product
- order (fk)
- product (fk)
- quantity
在这个小模型中,我可以通过向Order2Product表中添加记录并设置每个记录上的数量来存储订单。
但是,该模型不保留历史数据。如果店主更改产品3的价格,而产品3的订单是一年前订购的,那么订单的价格将会发生变化,因此我无法在发货后可靠地打印发票订单已被放置。
同样的产品名称。如果店主决定将产品的'糖果盒'重新命名为'杰克丹尼尔的礼品盒',这在发票的重印上显得很奇怪。
因此,在我看来,我需要做的就是将产品表中的名称和价格复制到Order2Product表中,而不是使用产品外键链接到产品。
您认为如何?这感觉有点有趣,因为复制数据在数据库设计中是不好的做法。另一方面,我认为这是一种情况,如果我想保持已下达订单的可靠记录,就没有其他解决方案。
另一种解决方案可能是使用产品修订版并在记录的每次更改中存储新产品记录。但是这种模式适用于Ms Access,用户可以通过Access数据表直接访问数据,因此他/她可以修改产品记录。
我打算复制价格以及产品名称和税率。我希望发票能够反映订单发出时的情况。谢谢。 – Julius 2012-04-14 13:05:12
我不会复制产品名称,但我明白你的观点。经常有法律要求能够重新打印发票。此外,产品记录可能会成为跑步者。我的应用程序就是这种情况。当然,出于同样的原因,您可能希望将客户记录中的信息复制到订单标题中。 – 2012-04-14 13:21:06
我甚至没有想过客户的信息。好点子。 – Julius 2012-04-14 14:00:42