PHP China | 中国开源之路 's Archiver

winglechen 发表于 2008-10-24 10:49

电子商务网站产品属性筛选解决方案

我现在在开发一个电子商务系统,开发过程中遇到如下问题:请高手指点

每个产品有有限个产品属性(如电脑有cpu、内存、硬盘尺寸等)
不同产品有不同的产品属性(类似于阿里巴巴产品属性的显示形式)

对于以上情况我们应该如何设计程序,如何设计数据库结构呢?

我的思路有三个:
第一种:建一个属性表,字段如下:
productID AttibuteName Value
1 名牌 李宁
1 材料 。。
.. ... ...
第二种,每一个产品表加几个属性字段
productID Attribute1 Attribute2 Atrribute3 ...(10或更多个)
1 奔四 120G 2G内存 。。。

第三种 类似于TAG的解决方法
每个产品的属性序列化成一个字符串(如:名牌:李宁,面料:。。)

高手有没有更好的解决办法啊

asu530 发表于 2008-10-24 17:59

有个蛮笨的方法就是product表默认10个空字段,a1,a2,a3,a4,a4 ......a10 这样。这些字段存放内容
另一个自定义字段表 ziduan
ID  name product_id  a_x  rootid       (product_id关联是那个产品,a-x 是那一个字段,这样还可以编辑自定义字段的顺序)

我新做的一个东西就是用这个思路,效率方面还没有测试,网上也找不到资料看。

我做的这个是多用户的,直接增加字段又不行,头疼。产品表空那么多字段效率影响到底有多少我还不知道。

[[i] 本帖最后由 asu530 于 2008-10-24 18:08 编辑 [/i]]

dmlk31 发表于 2008-10-24 18:11

三个表
gattrib_set 商品属性集表(比如电脑)
    gattrib_set_id
    name

gattrib_item 商品属性项表(比如CPU,硬盘,内存)
    gattrib_item_id
    gattrib_set_id
    name //属性名称
    formc_type //表单域类型(用于构建界面)
    formc_data //表单域所需的数据
    formc_html //根据其他属性生成的表单域HTML代码
    formc_value //表达域默认值
    formc_style //表达域样式

gattrib_val 商品属性值(比如CPU是P4,硬盘是SATA...)
    goods_id
    gattrib_item_id
    gattrib_item_name
    formc_value
    text
呵呵,我的那套自定义自定义商品属性,界面构造方面我用了JS窗口技术和Ajax,基本实现了C/S应用程序的用户体验。

[[i] 本帖最后由 dmlk31 于 2008-10-24 18:25 编辑 [/i]]

winglechen 发表于 2008-10-25 13:09

[quote]原帖由 [i]dmlk31[/i] 于 2008-10-24 18:11 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=670996&ptid=86271][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
三个表
gattrib_set 商品属性集表(比如电脑)
    gattrib_set_id
    name

gattrib_item 商品属性项表(比如CPU,硬盘,内存)
    gattrib_item_id
    gattrib ... [/quote]

dz 的ecshop用的方式是三个表
ecs_goods_attr // 商品属性(商品ID,属性ID,属性值,属性附加价)
ecs_attribute // 商品属性(分类,名称,选择样式,类型,值,检索类型,排序,是否关
联)
ecs_goods // 商品(分类ID,名称,点击,品牌ID,供应商名称,库存,重量,市场价,
售价,fitting_price(未知),促销价,促销开始日期,结束日期,警告数量,关键字,简介,
描述,缩略图,图,原图,是否真实商品,扩展代码,是否上架,是否单独销售,是否关联,
配件关联,是否赠品,能否成为赠品,单位,添加时间,排序,是否回收,精品,新品,推
荐,热销,红包ID,更新日期,商品类型,商品备注,首页轮播)


这种方式可以解决,不过不知道有没有更好的办法
我想用类似于搜索引擎分词的方式来解决(如:在google 搜索  “php mysql linux apache” 和 搜索 “linux  apache mysql php”的结果是一样的
所以说我们可以把每一个产品的关键词定成(如:电脑------PVI 2G 120G 。。)然后搜索的时候用搜索引擎的搜索算法来做
不过细节的东西及算法实现现在还没底

winglechen 发表于 2008-10-25 13:11

希望高手多多支持

aaxron 发表于 2008-10-27 10:47

建议别费脑筋了,
就用类似ecshop的吧.
我也是的.

七月十五 发表于 2008-10-27 16:19

每种类型的商品属性是不同的
比如:
衣服有品牌,颜色,面料等
电脑有品牌,配置信息等
价格也是有变动的,而且是可以查询的
那么表就不同的

表一:商品表(goods)
id, name, category_id, comment

第二:分类表(category)
id, name, comment

第三:价格表(price)
id, goods_id, start_date, end_date, value

第四:具体属性表(比如,电脑配置,衣服信息;依据goods.category_id查询,依据category.name命名)
一)、电脑配置表(category_computer)
goods_id, brand_id, cpu, memory, harddisk, ...
二)、衣服信息表(category_cloth)
goods_id, brand_id, color, size, ...

...

quanhaier 发表于 2008-10-27 16:23

主要就是设计数据库
程序员,还是老和数据库打交到
tukiz27 tukiz27 tukiz27

七月十五 发表于 2008-10-27 16:25

当然对于不确定和动态的属性,依据EC的做法是很好的

ecs_goods
商品表(商品ID,名称,……)
ecs_goods_attr
商品属性(商品ID,属性ID,属性值,属性附加价)

ecs_attribute
商品属性(分类,名称,选择样式,类型,值,检索类型,排序,是否关联)

winglechen 发表于 2008-10-27 18:32

ec的做法是可行的,不过搜索引擎里确有类似的解决办法,估计效率更高,有没有开发过搜索引擎的朋友啊,亮个像啊
呵呵

七月十五 发表于 2008-10-27 20:14

建议楼主读一下SQL范式,2NF

winglechen 发表于 2008-10-28 13:54

sql范式限于关系型数据库吧,不过多谢诸位的指点

xyiyo 发表于 2008-11-14 21:41

动动脑筋就能做的东西,用2个表就能搞掂这个东西,一个商品属性名称表,一个商品属性值表~

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.