1
virusdefender 2014-10-11 18:38:08 +08:00
类似淘宝保存商品快照
|
2
444683462 OP @virusdefender 大哥 清楚一点啊
|
3
mhycy 2014-10-11 18:39:37 +08:00
所有商品不做实际删除,仅作删除标记
为了日后快照需要,每次更新都是一个新的副本,如果这个副本没有任何引用,可以直接覆盖 |
5
mhycy 2014-10-11 18:46:09 +08:00
@444683462
设想这么一个场景: 某商家上架了一个商品 假设ID:10050 然后半小时后更新了一些图片和说明. 更新的那个商品,实际上,如果在更新与上架期间有客户购买的话,这个商品的更新将不会在原纪录操作,而是标记成失效/过期,10050这个id将会存在于这些订单中. 更新的数据将会写入到一条新的商品条目,对外ID可以一致,但是内部ID必须更新. (对外id:2205,内部id:10051) |
6
Mac 2014-10-11 20:18:14 +08:00
设计思路问题,商品表就只是个商品表,没事不要去删除。
另做进销的表,算库存再决定订单是否能下单。 能不用外键尽量别用外键,用表链接 JOIN。 |
8
Mac 2014-10-11 20:25:23 +08:00
@mhycy 对于你这个场景,你可以把订单表设计成字段包含所有商品描述的字段,例如
商品表:ID,商品名称,商品规格,商品单价 订单表:ID,商品表对应ID,件数,商品名称,商品规格,商品单价,订单日期,下单人,下单地址,BLABLABLA 在程序中生成订单表记录的时候,就直接插入当前商品表关于商品的描述属性,商品表再怎么变,订单表是不会变的,别用外键。 |
10
Mac 2014-10-11 20:51:51 +08:00
@444683462 外键是用来做外键约束的,是数据库层面的自动操作,你用外键约束简化了你编写CRUD的操作,但不利于你将来对库进行变更和增加或减少约束项。表链接只是用关键字段将几不同的表联系起来,各种CRUD的操作都是在你程序层面进行的,比较灵活和自由。我以前也是用外键,但实际使用中,发生很多问题,比如我要更改某条记录中被约束的字段,就会发生错误。后来改用表链接,所有联动的CRUD都在程序中完成,各种舒爽。关于表链接,你可以看看这篇BLOG http://my.oschina.net/gschen/blog/229034
|
12
Mac 2014-10-11 21:37:47 +08:00
@444683462 我觉得你最好先认真的学一下SQL基本的CRUD操作如何用你编写的语言来实现。淘宝的商品快照其实很简单,即在订单表中保存所有下单时所有链接表的相关字段,只是字段的堆砌而已,没有什么复杂的东西。
|
14
444683462 OP @virusdefender 商品快照我可不可以理解成 更新就是新插一个商品。
|
15
Mac 2014-10-11 22:03:59 +08:00
@444683462 你可以建立一个只保存商品快照的表,在生成订单的时候,再做一个插入动作,采集所有当前商品信息的字段,插入到这个表里。用客户下单的订单号作为关联字段。调用快照的时候就直接读这个表的内容即可。
|
17
Mac 2014-10-11 22:19:09 +08:00
@444683462 数据库肯定是金字塔化的最为合理,你这样做等于把腰弄的很肥,与订单的关西变成互为自子集,尽量避免这种设计,关系交叉的太频繁。不利于将来的扩展和修改。
|
18
virusdefender 2014-10-12 10:47:13 +08:00
其实主要看你的使用场景了,简单的网站就复制一下商品的名字价格单位介绍到商品快照就行了,商品也不要删除,使用下架功能就行了。至少我是这么用的。复杂的你要所想做到京东淘宝那样就麻烦去了。
|