一级类别 二级类别 三级类别 产品 数据库怎样设计更合理?

pamchow 2011-12-04 02:36:06
如题:
一级类别 二级类别 三级类别 产品 很多产品属性

例:
三级类别C1可能属于二级类别B1,也可能属于二级类别B2。
产品F1可能属于三级类别C1,也可能属于三级类别C3

是多对多建表?具体咋个弄?数据才能不冗余,而又方便添加、查询数据,性能更优?

CateTable 分类表
Id Name ParentId LevelId(级数,如一级)

Photo 产品表
Id Name ParentId CateId(分类表的分类ID)

它一个产品可以属于多个三级分类中,三级分类可以属于任意的二级分类,二级分类可以属于任意的一级分类,并且可有可无。

大家帮忙看看吧~
...全文
998 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
三断笛 2011-12-06
  • 打赏
  • 举报
回复
要注意区分层级和属性,不要把一些本放作为属性的信息放到了层级里边,如果弄混了处理数据会很麻烦.
我的经验是:
1.
在同一个维度(或角度)有从属关系,父子级关系的才建立层级.比如从地理区域维度可以建立"中国>广东>广州"这样的层级结构,而如果广州下有一个公司A,则不适合建立"中国>广东>广州>A公司"这样的层级,即使A是属于广州的,但A不属于地理区域维度.
所以不属于同一维度,没有明确的父子关系不要放在一个层级树中,可以考虑将那些信息作为属性字段.层级不要太深.
像你说的2级分类可有可无 并且可以从属任何父类,那可不可以考虑把它作为属性?当然,要看你们的具体情况
2.
建表的话要两个.和一楼差不多了.
一个是产品资料表.要保证每个产品是唯一的,在产品编码上建立主键.
产品资料表
MatCode MatName MatProperties...
二个是关系表,要建立约束,不要有重复的路径,也不要有环路.
产品分组表
MatCode ParentMatCode Path
约束:MatCode>ParentMatCode
Path可以为varBinary类型,会比较省资源,Level可以不用了,直接判断Path的长度可以得到Level
添加数据就要用触发器 或用存储过程添加了.
百度BOM去吧.

yusheng622 2011-12-06
  • 打赏
  • 举报
回复
学习贴!实用贴!
唐诗三百首 2011-12-04
  • 打赏
  • 举报
回复
产品属性木有体现出来喔.
饮水需思源 2011-12-04
  • 打赏
  • 举报
回复
参考这个:

产品类别表
类别编码 类别名称 类别级次 是否末级
01 A1 1 N
0101 A2 2 Y
02 B1 1 N
0201 B2 2 N
020101 B3 3 y
03 C1 1 Y

产品档案表
产品编码 产品名称 所属类别编码
001 A001 0101
002 B001 020101
003 C001 03

注意点:
1,产品档案中选择产品类别只能选择“是否末级”为“Y”的类别
2,产品末级类别在产品档案中引用后就不能再增加下级类别

22,210

社区成员

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

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