(50分)请教一个数据表设计方案

edwardrong 2006-08-02 05:28:22
假设有两个产品,同时购买就有一定的优惠,这样的话可以这样子设一个表:

表Bundle:
ID,PoductA_id,ProductB_id,total_price


但如果要是想设定同时买三个产品才有优惠,莫不成要在设一个含有三个产品的表;万一是四个五个呢……


所以我就想改一下表的设计,改成

表Bundle:
ID,Poduct_id,Bundle_id,total_price

其中Poduct_id是产品的id,Bundle_id可以是产品的ID(此时和上一个表中一样,表示有两种产品),也可以是Bundle表中ID(此时可以是把三个甚至多个产品联系起来)


可是问题还是很多,举个例子,A,B,C三个产品,究竟应该用A连BC呢,还是用B连AC,还是用C连AB?

理论上当然是两两产品之间关系出现越多就越应该直接连起来。但看起来这样的判断似乎很复杂

至此,想到脑袋都发热了,是不是有其他的解决方法呢?
...全文
187 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeroleonhart 2006-08-03
  • 打赏
  • 举报
回复
如果想某个产品是两个的,譬如两个A搭配一个B,应该怎样做?

在bundle字段写入A,A,B

-------------------------

use this
edwardrong 2006-08-03
  • 打赏
  • 举报
回复
先谢谢两位大虾的指教

lantersen(蓝水仁)和zeroleonhart(Strong Point:Algorithm) 的方法都不错,简直让我茅塞顿开!


zeroleonhart那个bundle表,如果想某个产品是两个的,譬如两个A搭配一个B,应该怎样做?

是在bundle字段写入A,A,B

还是多增加一个字段
id bundle qty price
i A,B 2,1 0.88

我马上去试试先,解决了就回来给分

zeroleonhart 2006-08-02
  • 打赏
  • 举报
回复
bundle:

id bundle price
i A,B,C, 0.88

use an array to get the products user buyed: sort($buyed[])

$first = $buyed[0];

"select * from bundle where bundle like '".$first.",%'"

then make each result be an array : $bundle

finally, if(array_intersect($bundle,$buyed) == $bundle)....

lantersen 2006-08-02
  • 打赏
  • 举报
回复
至于买了哪些产品,楼主可放到定单表当中去处理
lantersen 2006-08-02
  • 打赏
  • 举报
回复
你可以设计一个表5字段://可依据楼主的情况,增减字段
1:主键:
2:定单号;
3:用户ID;
4:客户总的购买金额;
5:对应的优惠比例(1表示1折,2表示2折,3表示3折);

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧