有这么一种情况,会员根据充钱的多少会有相应的折扣,问题来了,比如会员A所享有的折扣是5折,但是会员A对某一特定的商品享有4折,请问会员和商品的表该怎么设计,两种情况,一种是商品比较少,另一种是商品很多的情况,分别该怎么搞,求回答,谢谢
1 根据充钱多少来判断享受多少折扣-----可以看成VIP等级, 不同等级的VIP对应不同折扣。。
2 A对某一特定的商品享有4折------可以理解为:商品对不同VIP有不同的折扣。
所以这里有3张表
1 会员表 (字段包括vip等级)
2 折扣表 (字段包括:vip等级, 折扣率, 商品号)
3 商品表 (商品ID)
这里可以根据VIP等级找到商品对应的折扣率。。
不要用数据库的表来表示规则,数据库应该只存储必要的数据。比如说通用的折扣、专有折扣、专有折扣应用的用户等等。
逻辑放在程序中实现。因为规则是无穷变化的,而数据库的表不能随意变动。所以规则应该放在程序中。
具体是某个折扣不和别的折扣同时享受,还是允许折上折还是哪个优先权高,这个需要和用户商量,而不是说你的程序做死了只能按照一种方式行事,那样用户不骂你才怪。
有一种设计模式,叫 策略模式
你可参考一下: http://blog.csdn.net/zsp_skyer/article/details/20698851
会员根据充钱的多少会有相应的折扣,显然折扣是计算和保存在用户表中的
对某一特定的商品享有更多的折口,显然这个折扣是保存在商品表中该商品上的
A 享有 5 折,商品本身 8 折,则 A 对该商品享有 4 折。0.5 * 0.8 = 0.4
所以,不要把简单的事情弄复杂了
会员肯定有会员表,商品有商品表,对于折扣这个对象而言他应该有自己的表,这张表里面肯定有不同的折扣种类以及具体的折扣信息,最后对于会员商品折扣三者关系,需要特别的一张表,不同的会员对不同 的商品有什么样的折扣的问题了,其实和权限划分是一样的
create table discount (
userid int,
goodId int ,
discount double ,
primary key (userid,goodId)
)
userid goodId discount
-------- -------- ---------
会员A 0 0.50
会员A 商品1 0.40
往简单的来想, 商品多少都应该把商品单独的抽一张表(T1),会员一张表(T2)
T2 包括 唯一标识 姓名 本身折扣(会员根据充钱的多少会有相应的折扣)等
T1 包括 唯一标识 商品名称 类型等
如若会员A对某一特定的商品享有特殊折扣 再起一张映射表 对应会员 商品 的相应折扣即可