用于电子商务方法的PHP / MYSQL解决方案

时间:2012-09-24 10:37:33

标签: php mysql

例如,假设用户在soap上购买名为1.50且价格为20th sept 2012的产品。这已记录在purchase表格下的productIDdate下的数据库中。

假设2012年9月22日,管理员将soap的价格更改为1.20,现在报价已因此而改变。

确保为旧报告存储1.50的旧数据以及为新报告1.20存储旧数据的最佳方法是什么?我应该将所有数据(包括产品名称,产品价格)插入purchase表吗?

4 个答案:

答案 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指示产品类型而不是某些特定版本。当然它的复杂性会花费你,但是你可以判断它是否值得。