有多种商品, 属性不同, 是应该每一种商品建一个表还是允许全部建在一起?(我只有20分了)

DD88 2005-01-22 02:44:33
举个例子, 现在商场有电视机, 洗衣粉,电脑等商品出售.
电视机的属性有: 屏幕尺寸, 产地, 类型(如液晶,等离子,传统等), 品牌, 型号, 售价...
洗衣粉的属性有: 品牌, 包装(桶装,袋装等), 重量, 产地, 售价...
电脑的属性有: 品牌, 型号, CPU, 内存, 显示器类型, 售价...

象这样类型的产品可能很多很多, 有些属性可以通用(如售价), 有些就各自不同了.而且一个商场, 象这样的商品很多很多, 而且随时有可能增加新商品, 可能又有未预料的属性.

我想问问这种情况大家如何处理的?
如果设每个商品一个表, 那如果增加每增加一个新商品岂不就要加一次表?(包括主从表似乎也一样)
如果设一个总表, 似乎就更不行了?
...全文
509 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangyanyan_1999 2005-01-27
  • 打赏
  • 举报
回复
我问了别人一下,就是用一个表来实现,属性共有的可以直接列出来,个别的可以靠给属性分类来实现。
Scraftk 2005-01-27
  • 打赏
  • 举报
回复
我也有相同的问题。
我计划用的是:楼主的1号方案。用一张表来记录属性表结构。这样做查询还是有问题。
思考中~~~
DD88 2005-01-27
  • 打赏
  • 举报
回复
另外一个想法就是交叉表
1。表1,同上帖
2。表2:
id(fk) 属性名 属性值
-------------
4 型号 2909
4 品牌 海尔
4 售价 10000
..........
5 品牌 DELL
5 CPU类型 赛扬2.4G
..........
DD88 2005-01-27
  • 打赏
  • 举报
回复
昨天晚上为这个问题考虑了很久,能想到的有两种做法:

1。3个表,
一个表记录树结构:(-1代表无父节点)
Parent_id self_id
------------
-1 0 (即根)
0 1
0 2
1 3
2 4(假设表电视机)
2 5(假设表电脑)
.............

另一个作为主表,预留足够的列数来记录所有商品属性
id(表1中id的fk) 型号 品牌 售价 产地 field1 fild2 field3 .......fieldN
----------------------------------------------------------------------------------------
4 2909 海尔 10000 青岛 等离子 true 2005.1
5 510-M DELL 5000 美国 赛扬2.4G 15'液晶 256M
..................

最后一个表用来记录表2中的属性对应的含义和中文称呼(对应含义即该字段实际字段名)
id(同上) 字段名 含义 中文称呼
-----------------------------------------------
4 field1 TV_Type 屏幕类型
4 field2 P_i_P 是否带画中画
....
5 field1 CPU_Type CPU类型
5 filed2 Moni_Type 显示屏类型
....



DD88 2005-01-27
  • 打赏
  • 举报
回复
有些属性可能还是必须要单独占一个列,因为有可能要求可以方便按类统计,特别是象那些屏幕尺寸啊、品牌啊、重量啊什么的。

web700 2005-01-27
  • 打赏
  • 举报
回复
还是把商品分大类后放在一个表中比较好些。

电视机的属性有: 屏幕尺寸, 产地, 类型(如液晶,等离子,传统等), 品牌, 型号, 售价...
洗衣粉的属性有: 品牌, 包装(桶装,袋装等), 重量, 产地, 售价...
电脑的属性有: 品牌, 型号, CPU, 内存, 显示器类型, 售价...

好多属性可以放在一起,比如:电脑属性没有必要列的太详细,把一些无关信息放在一个MEMO就行了。
widows 2005-01-27
  • 打赏
  • 举报
回复
我觉得应该这样
如果每一种商品有多种型号,可以考虑建立多个表;
如果每一种商品型号不多,可以建立一个表,当有商品加入时,如果有特殊的属性,可以在修改表,加入相应的字段。

(不知是否能够解决问题,继续关注!)
DD88 2005-01-27
  • 打赏
  • 举报
回复
嗯。我实现的方法有很多种。我现在尝试用方案2实现,因为要实现交叉表,我曾经做过交叉表,在客户端的性能不是非常好。现在再试试看。
Rail100 2005-01-27
  • 打赏
  • 举报
回复
这么多商品,买家最关心是什么?
无非是价钱。当然还有其他信息,不过都是千变万化的。放一个TEXT字段,把产品信息写进去就可以了。把产品归类,例如电视机属于家电,电冰箱也是家电,每个牌子都对应唯一的ID。
DD88 2005-01-26
  • 打赏
  • 举报
回复
可否考虑交叉表呢?
即:
字段1 字段2 字段3 字段4
电视机 海尔2908 屏幕尺寸 42
电视机 海尔2908 屏幕类型 等离子
。。。。。。

这样容易是否又太大了呢?

DD88 2005-01-24
  • 打赏
  • 举报
回复
那么比如A类商品有20个属性, B类商品有5个属性, 商品B类的数量很多(也就是说很多种商品属于B类商品), 那么对于B而言,岂不是冗余很多?
另外,对于象paradox这种数据库,是不是没有variant类型呢?
mengyun5005 2005-01-23
  • 打赏
  • 举报
回复
本人认为只要做一个表,如果有一万种这样不同的商品是不是要建一万个表啊,怎么建呢,要你们怎么处理了,共性一定要单独字段,不共性嘛,我认为可以写成说明或是备注什么的,找那些做过超市的人员说一说可能会更有体会了
5207 2005-01-23
  • 打赏
  • 举报
回复
好像就目前我们的做法都是放在同一个表中,只要做好查询就可以了。做多个表有一点麻烦,如果系统太大表多了会带来很多的问题,我建议用单表。仅仅是建议,具体情况具体解决!
skm 2005-01-23
  • 打赏
  • 举报
回复
用同一个属性值表,预设尽可能多的字段,每个字段设为sql_variant类型

示例
下例假定 tableA 包含 colB 和属于 sql_variant 类型的 colA,检索有关值为 46279.1 的 colA(其中 colB =1689)的 SQL_VARIANT_PROPERTY 信息。

CREATE TABLE tableA(colA sql_variant, colB int)
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)
SELECT SQL_VARIANT_PROPERTY(colA,'BaseType'),
SQL_VARIANT_PROPERTY(colA,'Precision'),
SQL_VARIANT_PROPERTY(colA,'Scale')
FROM tableA
WHERE colB = 1689

peterluolaw 2005-01-22
  • 打赏
  • 举报
回复
不应该使用同一个表
DD88 2005-01-22
  • 打赏
  • 举报
回复
to aiirii
组合是怎么实现呢? 能说说吗?
是不是用什么分隔符分割各属性呢?这样的话用SQL语句查找起来方便吗?
DD88 2005-01-22
  • 打赏
  • 举报
回复
伟大兄可以详细说说吗?
这样可以吗?
主表:
ProductID ProductType
000001 电视机
000002 洗衣粉
000003 电脑
............

电视机从表:
TypeID ScreenSize ProdArea ScreenType Brand Model Price
000001 29 QingDao LCD Hair H1080 10000
aiirii 2005-01-22
  • 打赏
  • 举报
回复
應該在同一個表, 加一個或多個字段來區分才對!

>>电脑的属性有: 品牌, 型号, CPU, 内存, 显示器类型, 售价...
這個有個組合的概念, 一些普通的 進銷存 軟件中, 都會處理這個, 看看別人是怎麼做的
Kshape_zh 2005-01-22
  • 打赏
  • 举报
回复
可以建立多个表
之间用主从表关系来连接

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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