一、树型关系的数据表
不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。
设计结构:
名称 | 类型 | 约束条件 | 说明 |
type_id | int | 无重复 | 类别标识,主键 |
type_name | char(50) | 不允许为空 | 类型名称,不允许重复 |
type_father | int | 不允许为空 | 该类别的父类别标识,如果是顶节点的话设定为某个唯一值 |
type_layer | char(6) | 限定3层,初始值为000000 | 类别的先序遍历,主要为减少检索数据库的次数 |
这样设计的好处就是遍历方便,只需要一个检索即可,通过设置type_layer即可设定遍历顺序,000000为3层,若要求多则可增加,每一层允许最多99个子类。010101表示为第三层。
检索过程:SELECT * FROM Type_table_2 ORDER BY type_layer
列出记录集如下:
type_id type_name type_father type_layer
1 总类别 0 000000
2 类别1 1 010000
3 类别1.1 2 010100
4 类别1.2 2 010200
5 类别2 1 020000
6 类别2.1 5 020100
7 类别3 1 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
10 类别1.1.1 3 010101
……
二、商品信息表的设计(如何使数据表的属性可扩展)
假设你是一家百货公司电脑部的开发人员,某天老板要求你为公司开发一套网上电子商务平台,该百货公司有数千种商品出售,不过目前仅打算先在网上销售数十种方便运输的商品,当然,以后可能会陆续在该电子商务平台上增加新的商品出售。现在开始进行该平台数据库的商品信息表的设计。每种出售的商品都会有相同的属性,如商品编号,商品名称,商品所属类别,相关信息,供货厂商,内含件数,库存,进货价,销售价,优惠价。
商品类型表(Wares_type)
名称 | 类型 | 约束条件 | 说明 |
type_id | int | 无重复 | 类别标识,主键 |
type_name | char(50) | 不允许为空 | 类型名称,不允许重复 |
type_father | int | 不允许为空 | 该类别的父类别标识,如果是顶节点的话设定为某个唯一值 |
type_layer | char(6) | 限定3层,初始值为000000 | 类别的先序遍历,主要为减少检索数据库的次数 |
供货厂商表(Wares_provider)
名称 | 类型 | 约束条件 | 说明 |
provider_id | int | 无重复 | 供货商标识,主键 |
provider_name | char(100) | 不允许为空 | 供货商名称 |
商品信息表(Wares_info)