关于数据库中的无限级别设计

 

    今天一个网友在网上问我“无限极分类采用的什么方法”,一开始我还闷了,以为是什么新的技术,后来问清楚才知道是关于数据库设计方面的问题,害我一身⊙﹏⊙b汗,落伍了。

      言归正传,平时这种无限极分类,基本是导航中需要用到的,大概有四种方法:

        一、递归循环法:泰州seo一般都是在表里面建这么  编号,名称,父节点的编号 三个字段基本可以解决问题了,读取的时候使用递归就都出来了。这种方法的优点是:理论上可以无限添加级别,修改的时候比较方便。当然也有比较明显的缺点,就是当级别比较多的时候是相当消耗资源。    

       二、设置fid字段类型为varchar,将父类id都集中在这个字段里,用符号隔开,比如:1,3,6这样可以比较容易得到各上级分类的ID,而且在查询分类下的信息的时候,可以使用:SELECT * FROM category WHERE pid LIKE “1,3%”。这种方法的优点是读取的时候是相当快的,但也有缺点就是修改的时候是比较麻烦的,而且单独查询某个节点的父节点和子节点的时候也是比较麻烦的。

       三、使用预排序遍历树算法,也叫左右值算法。特别适用于多层数据结构设计,像Windows,linux下文件夹结构。在这种数据结构中,设置每个节点的 左右值为唯一。通过左右值把所有节点连接起来。按顺序遍历左右值到达查询效果,这种查询速度非常之快,而且只要一次查询就能得到想要的结果,可以轻易的查 询节点是否存在子节点,父节点的路径等。但同样面临的在增删改的时候操作比较复杂。这种预排序遍历树算法的核心就是大量牺牲了写的性能来换取读取的性能。 而且完全可以扩展到无限级应用。

数据结构:   
id: 类别id,主键
name: 类名
lft: 左值
rgt: 右值

      四、这个方法是泰州seo参考了一和三以后想到的方法:就是设计的时候还是使用第一种方法 编号,名称,父节点的编号,但是在读取的时候并不是一次性全部都读取出来,只读取三层,在某一个节点被点击后,再去读取他的下两层,重新绑定,这样就可以省去第一次递归所消耗的资源了。而修改的时候又很方便,所以泰州seo觉得这种方法应该还是可行的。

责任编辑:泰州seo
转自:泰州SEO[http://www.96SEO.com]
原文链接:http://www.96seo.com/a/jingjiangseojianzhan/mssql/2011/0330/103.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1/61 第七章 关系数据库设计 数据库系统概念与技术 第七章 关系数据库设计 友谊就是将自 尊延伸到他人. 无限风光在险峰 1 France 数 据 库 系 统 概 述 3 关 系 模 型 及 关 系 运 算 Hungary 课 程 概 况 Belgium 0 实 体 - 联 系 模 型 Germany 2 SQL Ireland 4 SQL 编 程 Italy 5 数 据 完 整 性 Latvia 6 关 系 数 据 库 设 计 Lithuania 7 查 询 处 理 及 优 化 Luxemburg 8 数 据 库 管 理 系 统 DBMS Netherlands 9 2/61 第七章 关系数据库设计 7.1 关系数据库设计 存在的问题 7.2 关系模式规范化 7.3 关系数据库设计过程 数据库 数据的集合 process process process process process request response 访问语言 语言处理 数据结构 交互式语言 嵌入式语言 完整性控制 DBMS其它 查询优化处理 数据的概念模型 数 据 库 系 统 设 计 现实世界 逻辑结构 数据操作 物理结构 S(S#, SN, SD, DEAN, C#, G) SC(S#, C#, G) S_SD(S#, SN, SD, DEAN) 分解 3/61 第七章 关系数据库设计 第七章 关系数据库设计 7.1 关系数据库设计存在的问题 7.2 关系模式规范化 7.3 关系数据库设计过程 4/61 第七章 关系数据库设计 n插入异常: 如果没有职工具有8级工资,则8级工资的工资 数额就难以插入. o删除异常: 如果仅有职工赵明具有4级工资,如果将赵明 删除,则有关4级工资的工资数额信息也随之删除了. 7.1 关系数据库设计存在的问题 700 6 周祥 600 5 李开 700 6 孙志 600 5 钱广 500 4 赵明 工资 级别 职工 职工的工资信息表 × 由于暂时没有人达到 8级工资, 8级工资数 额在表无法存储. 关系数据库设计存在的问题 5/61 第七章 关系数据库设计 p数据冗余: 职工很多,工资级别有限,每一级别的工资数额 反复存储多次. q更新异常: 如果将5级工资的工资数额调为620,则需要找 到每个具有5级工资的职工,逐一修改. 7.1 关系数据库设计存在的问题 700 6 周祥 600 5 李开 700 6 孙志 600 5 钱广 500 4 赵明 工资 级别 职工 职工的工资信息表 620 620 关系数据库设计存在的问题 6/61 第七章 关系数据库设计 解决之道: 分解,分解,再分解. 7.1 关系数据库设计存在的问题 700 6 周祥 600 5 李开 700 6 孙志 600 5 钱广 500 4 赵明 工资 级别 职工 职工的工资信息表 700 6 900 8 600 5 500 4 工资 级别 6 周祥 5 李开 6 孙志 5 钱广 4 赵明 级别 职工 职工的工资级别表 工资级别信息表 分解 620 n o p q 职工工资表(职工,级别,工资) 7/61 第七章 关系数据库设计 n解决了插入异常: 8级工资可存储在工资表,不依赖于 职工而独立存在,需要时可插入. o解决了删除异常: 4级工资存储在工资表,即使职工赵 明被删除,4级工资仍然存在. p解决了数据冗余: 5,6级工资数额在工资表仅存储一次. q解决了更新异常: 5级工资数额发生变化,只需在工资表 更新一次即可. 7.1 关系数据库设计存在的问题 解决之道: 分解,分解,再分解. 8/61 第七章 关系数据库设计 问题根源: 不良的函数依赖. 700 6 周祥 600 5 李开 700 6 孙志 600 5 钱广 500 4 赵明 工资 级别 职工 职工的工资信息表 700 6 600 5 500 4 工资 级别 6 周祥 5 李开 6 孙志 5 钱广 4 赵明 级别 职工 职工的工资级别表 工资级别信息表 分解 职工工资表(职工,级别,工资) 职工J级别 级别J工资 职工级别表(职工,级别) 职工J级别 职工J工资 工资级别表(级别,工资) 级别J工资 蕴含 工资依赖于职工 工资不再依赖于职工 7.1 关系数据库设计存在的问题 9/61 第七章 关系数据库设计 7.1 关系数据库设计存在的问题 7.2 关系模式规范化 7.3 关系数据库设计过程 插入异常 删除异常 数据冗余 更新异常 第七章 关系数据库设计 10/61 第七章 关系数据库设计 样例 82 C01 省身 D03 乐天 S05 78 C02 述圣 D02 安然 S04 95 C01 述圣 D02 刘海 S03 92 C02 思齐 D01 杨明 S01

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值