讨论alibaba产品数据库的设计

seai 2008-06-04 10:47:10
alibaba行业是二级联动分类的,当选择不同的分类时,表单的规格栏发生相应的变化。
例如,当选择"电器类"的时候有"额定电压"的信息栏供填写;当选择"食品类"的时候有"保质期"。

alibaba的行业类别足有数千,每类别产品对应数个不同规格参数,把不同类别的规格参数累加起来至少又是数千,这些信息是如何存储和组织起来的呢?

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

拟设计产品数据表包含数十个字段存储产品规格,字段具体含义从产品类别的规格说明获取,一一对应,形如:
产品表
字段:产品名 类别 规格1 规格2 规格3……
   天逸S180 1   P4.24  256   17  ……
类别表
字段:类别名 规格1 规格2 规格3……
   计算机 CPU   内存 显示器
这样似乎能解决问题,但规格都只能存储文本信息,对产品信息搜索造成不便,且有很多冗余,可读性不好,程序效率不高

不知道有什么好的做法没有?
...全文
220 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
seai 2008-06-04
  • 打赏
  • 举报
回复
对了,值表少了个列来描述是哪个产品的

更正如下:

值表
属性id 属性值 产品id
a1 天逸 p1
a2 联想 p1
a3 dell p2
a4 清华大学出版社 p3
seai 2008-06-04
  • 打赏
  • 举报
回复
怎么会乱阿?
Herb2 2008-06-04
  • 打赏
  • 举报
回复
p1: “我的电脑1”是“计算机”,“型号”是“天逸”,“品牌”是“联想”
-------------------------------------------------------------
这样不行,思路混乱。
seai 2008-06-04
  • 打赏
  • 举报
回复
这样就把各分类的专有属性放到值表里,有什么专有属性只管添加就可以了,但添加的一定时所属分离的属性(在属性表里找),属性表描述分类有哪些属性待填写,真正的值放值表里。
seai 2008-06-04
  • 打赏
  • 举报
回复
二级或多级其实是一个样,这里讨论的主要是在不同类上会有不同的属性,多级分类的不同级别也还是可以存在同样的问题。

我整理下,大家看看这样是不是可行的。

分类表(对产品进行归类)
分类id 分类名称 上级分类id (分类说明,......)
c1 计算机 这是计算机类
c2 笔记本 c1 这是笔记本
c3 台式机 c1
c4 图书

属性表(各分类具有的属性)
属性id 属性名称 属性分类 (属性说明,.......)
a1 型号 c1 这是计算机的型号
a2 品牌 c1 这是计算机的品牌
a3 品牌 c2 这是笔记本的品牌
a4 出版社 c4 这是图书的出版社

值表
属性id 属性值
a1 天逸
a2 联想
a3 dell
a4 清华大学出版社

产品表
产品id 产品名称 产品分类 详细介绍
p1 我的电脑1 c1
p2 我的电脑2 c2
p3 我的图书 c4

产品的含义就是
p1: “我的电脑1”是“计算机”,“型号”是“天逸”,“品牌”是“联想”
p2: “我的电脑2”是“笔记本”,“品牌”是“dell”
p3: “我的图书”是“图书”,“出版社”是“清华大学出版社”
hery2002 2008-06-04
  • 打赏
  • 举报
回复
二级联动实现就是先确定第一级以后,
第二级的范围也就确定了,
关键是看你的数据库怎么设计.
如果大量的数据只是以代码设计,
而基本信息作为一个单独的表这种方式的话,
也是很快的,
Herb2 2008-06-04
  • 打赏
  • 举报
回复
1.分类表:你说的好像是二级分类,我估计是多级分类。
分类ID 分类名称 上级分类ID
1 电脑 0
2 农机 0
3 笔记本 1
2.属性表:
分类ID 属性ID 属性名称 属性值
1 1 品牌 联想
3 2 显示器尺寸 12寸
3.产品表:
产品ID 分类ID ...
1 3
4.产品属性:
产品ID 属性ID
1 1
1 2
哈哈,产品1是联想12寸笔记本电脑。
seai 2008-06-04
  • 打赏
  • 举报
回复
能不能把示例表画出来啊,思路很乱
Herb2 2008-06-04
  • 打赏
  • 举报
回复
呵呵,回到前面 ,需求决定设计。
如果你要设计满足用户能够查找显示器尺寸在10-17英寸之间的需求,那么动态属性就很难做到这一点。
Herb2 2008-06-04
  • 打赏
  • 举报
回复
1、冗余就没有。
2、只能存文本,所以开始说只能选择输入,不能范围输入。
3、类似于这样的扩展要求(后面会有什么行业新增,什么属性新增都不是你我能控制的),只能这样设计。
4、程序可读性应该很好,结构非常清晰。
5、效率嘛,在于分类的分区和索引的建立。
seai 2008-06-04
  • 打赏
  • 举报
回复
还有一点是,如果各自的专有属性都是选项的,像你上面列的那种,只能选的话,那样做也还行。

但如果,专有属性是不固定的,各用户填写的,那样肯定行不通了
seai 2008-06-04
  • 打赏
  • 举报
回复
你这个做法,和我开始的提法有什么不同吗?

存在这个问题啊:
这样似乎能解决问题,但规格都只能存储文本信息,对产品信息搜索造成不便,且有很多冗余,可读性不好,程序效率不高

不知道有什么好的做法没有?
Herb2 2008-06-04
  • 打赏
  • 举报
回复
哦,原来我很笨。
不过我说了是动态属性
建表:属性表
字段:属性ID,属性名称,属性值。
1 尺寸 10.4英寸
2 尺寸 12.1英寸
...
19 黑白响应时间 8ms
20 黑白响应时间 12ms
当然,为了减少单表的记录数过于庞大,可能会分大类建表。
seai 2008-06-04
  • 打赏
  • 举报
回复
当选择分类1的时候,出现属于分类1的项目供用户填写或选择,并保存
当选择分类2的时候,出现属于分类2的项目供用户填写或选择,并保存
seai 2008-06-04
  • 打赏
  • 举报
回复
说的不是“匹配与选择”的问题,是怎样为不同的分类设计不同的选择项目,怎么保存他们!!!!!!!!!!!!
Herb2 2008-06-04
  • 打赏
  • 举报
回复
应该是动态属性:只能等值匹配,你只能选择。
尺 寸:10.4英寸 | 12.1英寸 | 14英寸 | 14.1英寸 | 15英寸 | 15.4英寸
17英寸 | 17.4英寸 | 19英寸 | 19.6英寸 | 20英寸 | 20.1英寸
21英寸 | 22.2英寸 | 24英寸 | 32英寸 | 其他
黑白响应时间:8ms | 12ms | 13ms | 14ms | 15ms | 16ms | 17ms | 20ms | 22ms 23ms | 25ms | 26ms | 30ms | 33ms | 40ms | 50ms | 62ms | 其他
平均亮度:250cd/m2 | 270cd/m2 | 280cd/m2 | 300cd/m2 | 350cd/m2 | 400cd/m2 430cd/m2 | 450cd/m2 | 500cd/m2 | 550cd/m2 | 600cd/m2 | 2000cd/m2 其他
seai 2008-06-04
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。
你没看alibaba,就不用来讨论了,呵呵,不是你想的那种。

设,有产品分了2000类别,
若选个分类1,会出现:共同属性a、共同属性b、分类1专有属性11、分类1专有属性12、分类1专有属性13、......
若选个分类2,会出现:共同属性a、共同属性b、分类2专有属性21、分类2专有属性22、分类2专有属性23、......
..............

数据库怎样设计?

问题其实就是这样的。
Herb2 2008-06-04
  • 打赏
  • 举报
回复
应该用的是动态属性。
你试试它的属性能不能进行数值计算,也就是输入条件可不可以输入数值范围,还是只能输入数字按相等匹配。
seai 2008-06-04
  • 打赏
  • 举报
回复
怎么说?
相应的类如果需要不同的属性,就给它另一张专有属性表吗?
这样的话,我大致浏览了他们的行业,分了有几千个(虽然有些行业是包含了相同的属性),大体看过后,也应该有上千个不同的。那不是要建上千个属性表,然后把他们分配给相应的行业?
感觉很不实际!!
ojuju10 2008-06-04
  • 打赏
  • 举报
回复

它有个专门存放行业属性的关系数据字典表

id,大分类,小分类,属性id,属性值


每个分类都存放在不同的表里面,分别由一般字段和特殊字段组成

加载更多回复(6)

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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