购物系统多种参数的数据库设计

cwm545 2007-10-13 03:03:31
好郁闷,一直都找不到很好的方法来解决这个问题.

大家可以参考WWW.IT168.COM
例如:
硬盘这类产品都有:
转速
容量
等参数;
照相机都有:
像素
镜头类型
等参数;
数据库怎么设计才能使每一类产品都显示该产品的详细参数?

谢谢..
...全文
275 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwm545 2007-10-17
  • 打赏
  • 举报
回复
因为之前没设计过这样结构的数据库,一旦决定了这样的结构,所有的程序都要围绕着这样的结构来编写,就是不知当中会不会有一些特殊的问题而且程序很难实现,还望高手指点一下,谢谢。
cwm545 2007-10-17
  • 打赏
  • 举报
回复
喔,好的,谢谢您.
谢谢楼上的各位了!
wanghui0380 2007-10-17
  • 打赏
  • 举报
回复
A030201是那个项目的里的东西,是国家政府采购品目表里的品目编号

你可以看这里《政府采购品目分类表》
http://map.mas.gov.cn/expert/six.htm
cwm545 2007-10-17
  • 打赏
  • 举报
回复
wanghui0380,谢谢您,我觉得你早期的这个结构都相当不错了,我想模仿你这个试一下.
对了,你最后那个A030201是做什么用的?
如下:
14 计算机 12 1,7,12,14 3 0 A030201






wanghui0380 2007-10-17
  • 打赏
  • 举报
回复
就像我上面说的,这个的解决方案有两种

1.传统的方案:使用数据库来保存
你这个东西实际上就是一个树,如果你换种思维来考虑,不用那种显示方式,换用treeview来显示会如何。实际上你就会看到treeview完全适合你的项目,所以他本质上就是一颗树。所以你可以使用树的方式来表达他,而传统上我们在用数据库表达树这种结构的时候,我们通常这么设计

id编号 属性名称 属性值 父id编号 idlist//深度节点列表 deep//节点深度 lock//锁定值(表明是否可以删除和操作)



比如我自己的一个早期的项目里有个品目表就类似这个
id编号 属性名称 父id编号 idlist deep lock
1 品目设置 1 1 0 1
7 货物类 1 1,7 1 0 A
8 工程类 1 1,8 1 0 B
9 服务类 1 1,9 1 0 C
10 土地 7 1,7,10 2 0 A01
11 建筑物 7 1,7,11 2 0 A02
12 一般设备 7 1,7,12 2 0 A03
14 计算机 12 1,7,12,14 3 0 A030201
15 家具 12 1,7,12,15 3 0 A0303
16 办公消耗用品 7 1,7,16 2 0 A04
17 建筑材料.装饰材料 7 1,7,17 2 0 A05
18 物资 7 1,7,18 2 0 A06
19 专用材料 7 1,7,19 2 0 A07
20 成品软件 7 1,7,20 2 0 A08


基本上传统的用数据表表示的结构就如此,你看着自己改成你需要的

2.现代一点的方法:既然他就是树,那么你就可以直接用treeview来表示,treeview本身就提供对树操作的完整方法,你可以直接生成一颗树,而不需要使用数据表了。问题出来了,虽然你生成了一颗树,但你要在别处使用他,这样你必须把这个树保存起来以便别处能用,ok了,net允许你把一个对象序列化成一个string 或xml以保存改类的状态,这样你就可以把这个对象存入一个xml,数据库或文本文件里,当你需要这个对象可以反序列化成对象。这样设计就比传统的方法简化多了。你数据库里只要一个字段就可以表明整个结果
cwm545 2007-10-16
  • 打赏
  • 举报
回复
wanghui0380,谢谢您,我觉得这个思路也挺不错的,很直观.

我这么设计

设计一个类

class productPro()
{
string proname;//属性名称
string proValue;//属性值
}

对于某个产品,可以使用集合类 productpro[]表明其属性列表

入库的时候直接序列化productpro[]成字符串入库,显示时候反序列化字符串成productpro[]就可以


入库的时候直接序列化productpro[]成字符串入库,显示时候反序列化字符串成productpro[]就可以

这是什么意思,能不能说详细点?
wanghui0380 2007-10-16
  • 打赏
  • 举报
回复
我这么设计

设计一个类

class productPro()
{
string proname;//属性名称
string proValue;//属性值
}

对于某个产品,可以使用集合类 productpro[]表明其属性列表

入库的时候直接序列化productpro[]成字符串入库,显示时候反序列化字符串成productpro[]就可以

ps:这只是我最直觉的一个设计,算是提一个解决思路吧!具体完善尚需要商量!看看下面那位大大能有兴趣把他完善一下

提交前,突然想起一个东西!你这个整体上看着就想是一颗树,那么能不能直接借用treeview的treenode来弄呢,正好treenode有text,value两个属性,也有chirld.add方法,看着真像啊!呵呵,如果可以使用treenode,把treenode序列化入库可能简单了
cwm545 2007-10-16
  • 打赏
  • 举报
回复
idot谢谢,不错,挺清淅的.

不过不知道执行的效率会怎样?


idot 2007-10-16
  • 打赏
  • 举报
回复
创建三个表:
1 产品表:
ID 产品内容
1 硬盘
2 照相机

2 属性表
ID 属性内容
1 转速
2 容量
3 像素
4 镜头类型

3 产品属性表
产品表ID 属性表ID
1 1
1 2
2 3
2 4
此外,要求产品表产品属性表有主外键关系,并且要求级联删除和级联更新。属性表和产品属性表也是如此。

这样设计的好处是:三个表的数据都是唯一的,没有重复数据,其次实现了数据一致性,
NqIceCoffee 2007-10-15
  • 打赏
  • 举报
回复
关注ing
cwm545 2007-10-15
  • 打赏
  • 举报
回复
比如产品表:
1 硬盘
2 照相机
属性表
属性内容 产品表ID
1 转速 1
2 容量 1
3 像素 2
4 镜头类型 2

xiangzaopao
谢谢您.
如果按照你这样来设计数据库,那最终的型号表要怎么设计,如佳能的pc110这款型号.(有相素\镜头类型\可拍摄距离...)
能不能更详细点?谢谢.

cwm545 2007-10-15
  • 打赏
  • 举报
回复
Eddie005
谢谢您.如果按照这样排序,例如一个相机可能有几十个品牌,一个品牌可能有几百款相机.一款相机的参数可能有十多个.
这样算一下来单是相机的数据库纪录可能就有很多条了.

ID 产品ID 产品类别 参数名称 参数值
1 硬盘A 硬盘类 转速 5400
2 硬盘A 硬盘类 容量 120G
3 硬盘b 硬盘类 转速 7200
4 硬盘b 硬盘类 容量 80G
5 照相机xx 相机类 像素 ....
6
7
cwm545 2007-10-15
  • 打赏
  • 举报
回复
youyuan1980
谢谢!
不过不明白为什么要用XML?
youyuan1980 2007-10-15
  • 打赏
  • 举报
回复
直接把参数写成XML存入一个字段里面。
然后在外面用一个标志字段。
读的时候先读标志字段,再选择数据表结构DATASET。
对XML进行解析。
xiaoliangwh 2007-10-13
  • 打赏
  • 举报
回复
up
xiangzaopao 2007-10-13
  • 打赏
  • 举报
回复
同意楼上的
比如产品表:
1 硬盘
2 照相机

属性表
属性内容 产品表ID
1 转速 1
2 容量 1
3 像素 2
4 镜头类型 2
Eddie005 2007-10-13
  • 打赏
  • 举报
回复
ID 产品ID 产品类别 参数名称 参数值
1 硬盘A 硬盘类 转速 5400
2 硬盘A 硬盘类 容量 120G
3 硬盘b 硬盘类 转速 7200
4 硬盘b 硬盘类 容量 80G
5 照相机xx 相机类 像素 ....
6
7
.....
Eddie005 2007-10-13
  • 打赏
  • 举报
回复
用父子表来解决就好了

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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