收集常用数据库设计技巧

收集常用数据库设计技巧

ID:9797254

大小:61.86 KB

页数:15页

时间:2018-05-10

收集常用数据库设计技巧_第1页
收集常用数据库设计技巧_第2页
收集常用数据库设计技巧_第3页
收集常用数据库设计技巧_第4页
收集常用数据库设计技巧_第5页
资源描述:

《收集常用数据库设计技巧》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、收集常用数据库设计技巧一、树型关系的数据表  不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构:类别表_1(Type_table_1)名称     类型    约束条件   说明type_id    int      无重复    类别标识,主键type_name  

2、char(50)   不允许为空  类型名称,不允许重复type_father  int        不允许为空  该类别的父类别标识,如果是顶节点的话设定为某个唯一值  这样的设计短小精悍,完全满足3NF,而且可以满足用户的所有要求。是不是这样就行呢?答案是NO!Why?  我们来估计一下用户希望如何罗列出这个表的数据的。对用户而言,他当然期望按他所设定的层次关系一次罗列出所有的类别,例如这样:总类别  类别1    类别1.1      类别1.1.1    类别1.2  类别2    类别2.1  类别3    类别3.1    类别3.2  ……  看看为了实

3、现这样的列表显示(树的先序遍历),要对上面的表进行多少次检索?注意,尽管类别1.1.1可能是在类别3.2之后添加的记录,答案仍然是N次。这样的效率对于少量的数据没什么影响,但是日后类型扩充到数十条甚至上百条记录后,单单列一次类型就要检索数十次该表,整个程序的运行效率就不敢恭维了。或许第二类程序员会说,那我再建一个临时数组或临时表,专门保存类型表的先序遍历结果,这样只在第一次运行时检索数十次,再次罗列所有的类型关系时就直接读那个临时数组或临时表就行了。其实,用不着再去分配一块新的内存来保存这些数据,只要对数据表进行一定的扩充,再对添加类型的数量进行一下约束就行了,要完成上

4、面的列表只需一次检索就行了。下面是扩充后的数据表结构:类别表_2(Type_table_2)名称     类型    约束条件                      说明type_id    int      无重复                    类别标识,主键type_name  char(50)   不允许为空                  类型名称,不允许重复type_father  int        不允许为空                  该类别的父类别标识,如果是顶节点的话设定为某个唯一值type_layer   char(6)   

5、 限定3层,初始值为000000      类别的先序遍历,主要为减少检索数据库的次数  按照这样的表结构,我们来看看上面例子记录在表中的数据是怎样的:type_id     type_name         type_father         type_layer1            总类别              0                0000002            类别1               1                0100003            类别1.1             2             

6、   0101004            类别1.2             2                0102005            类别2               1                0200006            类别2.1             5                0201007            类别3               1                0300008            类别3.1             7                0301009        

7、    类别3.2             7                03020010           类别1.1.1           3                010101……  现在按type_layer的大小来检索一下:SELECT*FROMType_table_2ORDERBYtype_layer列出记录集如下:type_id     type_name         type_father         type_layer1            总类别              0        

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。