例如,假设用户在soap
上购买名为1.50
且价格为20th sept 2012
的产品。这已记录在purchase
表格下的productID
和date
下的数据库中。
假设2012年9月22日,管理员将soap
的价格更改为1.20
,现在报价已因此而改变。
确保为旧报告存储1.50
的旧数据以及为新报告1.20
存储旧数据的最佳方法是什么?我应该将所有数据(包括产品名称,产品价格)插入purchase
表吗?
答案 0 :(得分:2)
您的问题的简单答案是肯定的。
对于财务系统,任何可能需要审计“交易”的系统都应该完整地存储在“文档”或“记录”中。
还有其他方法,例如使用“标记”(EG当前,删除,修改等),“from_date”和“to_date”记录每个删除或修改,而不是实际删除或修改数据库中的数据,但是这样将使用更多的服务器资源,编程不仅在mySQL而且在PHP中也要复杂得多。但它允许您同时仅提供记录之间的关系。
我的建议是保持简单并将所有必需的数据存储在一条记录中。您将节省时间和合法,如果系统需要审核您更安全。
祝你好运,我希望它有所帮助!答案 1 :(得分:0)
我认为没有必要将产品名称存储在购买表中,但我认为应该存储产品价格。
此外,如果您未在购买表中存储产品名称,则应注意删除产品。也许删除它们不是最好的主意,所以你应该将它们从商店中隐藏起来,而不是从db中删除它们。
答案 2 :(得分:0)
我通常使用productID和日期在购买表上存储产品的价格,或者如果购物车中有多个商品,您将拥有购买表和purchase_product表。这是因为如果您添加了优惠券代码或其他任何类似的东西,您将始终能够看到该人为该特定购买项目支付的费用。
答案 3 :(得分:0)
我最近一直致力于开发与您描述的产品接近的产品。我相信您的答案取决于您愿意实施项目的复杂程度。最简单的方法是将产品信息存储在发票记录中。但这会导致随时间的冗余。
另一方面,您可以实施修订机制,以便随时跟踪记录的变化。这可以通过为您的记录使用两个ID而不是一个来轻松完成。这是一个示例表:
CREATE TABLE IF NOT EXISTS `product` (
`product_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`entity_id` bigint(20) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`price` double NOT NULL DEFAULT '0',
PRIMARY KEY (`product_id`),
KEY `inx_entity_id` (`entity_id`)
) DEFAULT CHARSET=utf8 ;
虽然product_id
是您的普通自动增量ID,但entity_id
是一个特殊ID,对于同一产品的所有记录都是相同的。在此设计中,您永远不会删除记录,也不会更新记录。您将始终只需插入表格,当您需要获取产品列表时,您只需要记住entity_id
以上的组是有序的。产品信息可以在最大product_id
的记录中找到。也许您可能想要创建一个实体表来跟踪entity_id
s。
此设计比将产品信息复制到发票更复杂。但它有很多好处。就像您可以跟踪产品的价格变化一样。或者,您可以使用product_id
的外键指向产品的一个特定修订版,或使用entity_id
指示产品类型而不是某些特定版本。当然它的复杂性会花费你,但是你可以判断它是否值得。