如题,在商城系统开发时遇到商品的多级分类,为增强扩展性,子类可以任意添加,不知此类问题数据库如何设计更为科学,请高手指点!
试试我的答案,如果哪里不好,请指出来,我也是初学者。
我的办法很简单,就是再类别表加一个父类型编号,也就是所有的自连接,以商品类型为例,数据表如下:
Create Table ProductType
(
ID int identity(1,1) primary key,
Name varchar(10) not null unique,
--引用自身表的ID作为外键
fatherTypeID int null foreign key references ProductType(ID)
)
这样,当你添加某个商品类型时,如果是最高级别的类型,则将fatherTypeID置空,如果存在父类型,则引用父类的ID,如食品理论上应该是父类,酒类应该是食品的一个子类,而红酒类又是酒类的一个子类。假设食品类的ID是1,酒类的ID是2,红酒类的ID是3,那么数据库中的记录应该为
ID Name fatherTypeID
1 食品 NULL
2 酒类 1
3 红酒 2
不知道这样说楼主能不能看得懂?另外,查询时候需要用自身连接。
你这个第一条数据
1 食品 NULL
是怎么插入的????
难道你还有一条记录是这样的
NULL 未知 NULL
int 类型还可以是NULL????
表结构为: id(编号) name(分类名) parentID(父类编号) 简单举例如下:
id name parentID
1 饮料 0(为0表示第一大类)
2 水果 0
3 百事可乐 1
4 雪碧 1
5 苹果 2
6 香蕉 2
这样设计的好处是:可以无限极分类。。。。便于维护和统一管理。
以上仅供参考。。如有疑问请联系我。。
和 ASP.NET 的 TreeView 控件的生成一样的原理。
我赞成jaryleely 的做法 我就是这么解决的