由于公司产品刚上线,有相关促销活动由于准备不到位而延到下个版本执行.对于促销活动这块的表结构设计,我心里没底,于是我研究了一下;
首先看知乎上观点:
网址如下:
https://www.zhihu.com/question/19807793,摘录部分观点如下:
用户a观点:
以上各位大多是侧重功能和产品方面的,我稍微说点技术和领域建模方面的:
1 促销模型:
-促销基本信息; promotion information [名称,时效性,关联活动,创建者,... ]
-满足条件;qualification [sku, 数量,金额,... ]
-实施优惠; benefit [赠,减,折, ... ]
此模型是目前行业内相对比较典型的做法,扩展性和灵活性足够了;其他不属于模型的特殊促销(极少数情况了),只要额外实现即可。
2 数据关系上,一次促销活动是一个具体的实例,对应到数据库表中的行记录;而常见的10种左右的促销,其实是一个class,或者叫schema ;因此我们可以创建促销模板,以降低促销维护人员的使用门槛。
在实现之前,尽量把设计得细一些,对开发有利;祝你好运!
用户b观点:
促销模块,从结构上来说分三个部分:限制条件,促销范围,促销结果。然后从每个维度上都有若干玩法,例如:
限制条件:时间,订单金额,购买数量,购买人数,支付方式,收货地址,运输方式,用户类型,积分等等
促销范围:单个商品,一组商品,品类,整单,以及例外品
促销结果:折扣,扣减,返券,买搭,买赠等等
然后,你把三个维度再做一下组合。。。有的玩呢~
最后,需要有一个促销效果汇总的功能,用来记录分析每一个促销活动的实际花费、带来的销售、毛利、转化率等等。用于持续调整促销活动的效果。
实际操作,像前面两位说的,可以基于ecshop、zencart、magento这些开源网店来改,但是也完全可以拆解了之后从头做,如果需要架构很灵活的话。
用户c的建议如下:
国内可以用ecshop,shopex等(假开源也只能先凑合着用了),外贸可以用zencart,prestashop,magento等开源网店,功能都非常先进,里面也自带了很多优惠功能,还可以第行二次开发,非常方便。
前面两位用户的观点,我理解得浅,所以就去下载了ecshop上下载了源码运行,可运行没成功.
后来在http://www.cnblogs.com/lmule/archive/2010/11/05/1869624.html 上找着了ecshop的表结果,
里面关于促销类的表结果,我只找着了一个,如下:
-- 表的结构 `ecs_goods_activity`
CREATE TABLE IF NOT EXISTS `ecs_goods_activity` (
`act_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID号',
`act_name` varchar(255) NOT NULL COMMENT '促销活动的名称',
`act_desc` text NOT NULL COMMENT '促销活动的描述',
`act_type` tinyint(3) unsigned NOT NULL,
`goods_id` mediumint(8) unsigned NOT NULL COMMENT '参加活动的id,取值于ecs_goods的goods_id',
`goods_name` varchar(255) NOT NULL COMMENT '商品的名称,取值于ecs_goods的goods_id',
`start_time` int(10) unsigned NOT NULL COMMENT '活动开始时间',
`end_time` int(10) unsigned NOT NULL COMMENT '活动结束时间',
`is_finished` tinyint(3) unsigned NOT NULL COMMENT '活动是否结束,0,结束;1,未结束',
`ext_info` text NOT NULL COMMENT '序列化后的促销活动的配置信息,包括最低价,最高价,出价幅度,保证金等',
PRIMARY KEY (`act_id`),
KEY `act_name` (`act_name`,`act_type`,`goods_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='拍卖活动和夺宝奇兵活动配置信息表' AUTO_INCREMENT=5 ;
CREATE TABLE IF NOT EXISTS `ecs_goods_activity` (
`act_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID号',
`act_name` varchar(255) NOT NULL COMMENT '促销活动的名称',
`act_desc` text NOT NULL COMMENT '促销活动的描述',
`act_type` tinyint(3) unsigned NOT NULL,
`goods_id` mediumint(8) unsigned NOT NULL COMMENT '参加活动的id,取值于ecs_goods的goods_id',
`goods_name` varchar(255) NOT NULL COMMENT '商品的名称,取值于ecs_goods的goods_id',
`start_time` int(10) unsigned NOT NULL COMMENT '活动开始时间',
`end_time` int(10) unsigned NOT NULL COMMENT '活动结束时间',
`is_finished` tinyint(3) unsigned NOT NULL COMMENT '活动是否结束,0,结束;1,未结束',
`ext_info` text NOT NULL COMMENT '序列化后的促销活动的配置信息,包括最低价,最高价,出价幅度,保证金等',
PRIMARY KEY (`act_id`),
KEY `act_name` (`act_name`,`act_type`,`goods_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='拍卖活动和夺宝奇兵活动配置信息表' AUTO_INCREMENT=5 ;
依然不够理解;于是继续寻找:
也找到了关于ecshop的促销表结构,如下:网址:http://blog.csdn.net/chamtianjiao/article/details/6081430
促销活动
Sql代码
- --
- -- Table structure for table `ecs_favourable_activity`
- --
- CREATE TABLE IF NOT EXISTS `ecs_favourable_activity` (
- `act_id` smallint(5) unsigned NOT NULL auto_increment,---自增id
- `act_name` varchar(255) NOT NULL,--活动名称
- `start_time` int(10) unsigned NOT NULL,--开始时间
- `end_time` int(10) unsigned NOT NULL,--结束时间
- `user_rank` varchar(255) NOT NULL,--参加的会员等级
- `act_range` tinyint(3) unsigned NOT NULL,--优惠范围;0,全部商品;1,按分类;2,按品牌;3,按商品
- `act_range_ext` varchar(255) NOT NULL,--根据优惠活动范围的不同,该处意义不同;但是都是优惠范围的约束;如,如果是商品,该处是商品的id,如果是品牌,该处是品牌的id
- `min_amount` decimal(10,2) unsigned NOT NULL,--订单达到金额下限,才参加活动
- `max_amount` decimal(10,2) unsigned NOT NULL,--订单达到金额上限,0表没有
- `act_type` tinyint(3) unsigned NOT NULL,--参加活动的优惠方式;0,送赠品或优惠购买;1,现金减免;价格打折优惠
- `act_type_ext` decimal(10,2) unsigned NOT NULL,--如果是送赠品,该处是允许的最大数量,0,无数量限制;现今减免,则是减免金额,单位元;打折,是折扣值,100算,8折就是80
- `gift` text NOT NULL,--如果有特惠商品,这里是序列化后的特惠商品的id,name,price信息;取值于ecs_goods的goods_id,goods_name,价格是添加活动时填写的
- `sort_order` tinyint(3) unsigned NOT NULL default '50',--活动在优惠活动页面显示的先后顺序,数字越大越靠后
- PRIMARY KEY (`act_id`),
- KEY `act_name` (`act_name`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
其实还是有点蒙,继续找资料:
然后再参考了一下这个资料:http://www.pmcaff.com/article/index/522932721808512