社区
Java SE
帖子详情
问树形结构模型数据库的设计问题?!要求提取数据时效率高,而且数据库的结构在各种大型数据库通用,维护方便!
thankyou
2004-08-21 12:22:31
数据库该的表该如何设计了?
...全文
163
12
打赏
收藏
问树形结构模型数据库的设计问题?!要求提取数据时效率高,而且数据库的结构在各种大型数据库通用,维护方便!
数据库该的表该如何设计了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
overcast
2004-08-26
打赏
举报
回复
嗬嗬,只能说各有千秋了,但是楼主说是通用的
如果照你这么设计的话,如果我需要找某个节点的所有子节点,是不是需要用like来匹配,当数据量很大的时候,你觉得效率会很高??
按照我的想法,n深的树最多只要n次查询就出来的,递归当然是不用的,除非你的算法够滥
当然,如果知道n很浅但是数据量很大的话,我相信这样的算法会效率会比较高
我相信按照你这么做的话,实际上是不能支持很深的树的,除非把主键设得很长,呵呵
作为通用算法的话,是需要考虑各种情况的
AllError
2004-08-26
打赏
举报
回复
呵呵,楼主是要求提取数据时效率高。然后数据库通用。
AllError
2004-08-24
打赏
举报
回复
哎,你不听老人言,吃亏在眼前。如果你是做应用,有谁没事改关键字啊。如果你只用ID和Pid你能一次就把一颗树检索出来吗,你能一下子把所有子节点找出来吗。搞个递归你觉得效率好吗。当然这种方法也有缺点,就是某字段有些浪费。不过为了方便,浪费点应该还是值得的
flyxxxxx
2004-08-24
打赏
举报
回复
参考:
http://community.csdn.net/Expert/TopicView.asp?id=3190905
lakesea
2004-08-24
打赏
举报
回复
overcast(Good Good Study):
生成一棵树其实只用superID、ID足以,但是我觉得对一棵树superID、ID的规划更应该从你都实际情况出发。如果你的树节点不会从一个节点移动到另外一个节点,只是会增删节点,那我觉得用superID和ID关联可能效率要高一些。比如你要删除一个节点下的所有子节点,你就不用一次一次循环的从数据库中去检索。
但是如果你的节点经常要变换位置,那我的方法就不是很可取了,但是如果superID和ID之间没有什么关系的话,在需要删除或是查找节点之间的关系的话又十分困难。不知道在这种情况下是不是可以增加一个字段来表示之间的关系。
我一般做的树都只是增删,很少有移动节点位置的,所以对第二种没有深入做过。
overcast
2004-08-23
打赏
举报
回复
问几个问题
1,如果以及记录了SUPERID,为什么还要吧ID设置为SUPERID开头?检索的时候当然是根据SUPERID=#VALUE#来查
2,如果用PID+分隔符+ID来做主键的话,如果一个记录的PID修改了,是不是需要修改这个纪录的ID?这样的话如何保证其他表的记录引用了这个字段的主键作为外键?另外修改主键有时候效率很低,除了需要索引之外,还要检查其他表的外键引用。
实际上,应该是两个字段PID和ID(这一点和lakesea(虚无飘渺)一样),而不是合并起来,在查询的时候似乎SQL不能返回一棵树,而是返回一个记录列表,我的做法是根据PID排序,然后在程序中生成树结构,但是这样的做法在树很深的时候很麻烦,而且结果集的冗余数据会很多,这样的情况下可以用一些变通的方法,比如对于n深的树,可以查n次,每次只查第i级的数据,然后把所有i级的id作为第i+1级的pid。
在表的设计上,如果每一级数据都是一样的话,可以做一个表,加一个自引用,这样可以实现无限量级的树。
thankyou
2004-08-23
打赏
举报
回复
ding
tanyun1111
2004-08-23
打赏
举报
回复
表:
ID NAME .... PARENT_ID
ID是自动编号,NAME ....是其他列名,PARENT_ID对应ID,就是说如果PARENT_ID等于0,那么NAME就是第一节点,如果PARENT_ID等于其他记录的ID,那么PARENT_ID所对应的NAME就是其他记录的子节点,依次类推,可以无限循环下去
AllError
2004-08-21
打赏
举报
回复
就是.我一般用PID+分隔符+ID.这样的好处是位数不限.字段大小根据实际情况调整了
lakesea
2004-08-21
打赏
举报
回复
ID SUPERID 就这两个字段就可以表示一棵树了。其他的就是这颗树的相关信息了。
如果你要想在检索上效率高一些,ID和SUPERID需要有一定关系的。
比如SUPERID为10,那ID就应该是10××,位数根据你节点的多少调整。
这样检索时用superid like '10%' 就可以找出10下的所有节点以及其节点下的所有只节点
Frank1982
2004-08-21
打赏
举报
回复
没看懂啊
说仔细一点吧
软件工程知识点
主要有以下几个方面的
设计
任务:制定规范、系统构架
设计
、软件
结构
设计
、公共
数据
结构
设计
、安全性
设计
、故障处理
设计
、可
维护
性
设计
、编写文档、
设计
评审。 2.系统构架
设计
(1)集中式
结构
集中式系统由一台...
9.
数据
库
设计
设计
一个优良的
数据
库
逻辑模式和物理
结构
,并据此建立
数据
库
及其应用系统,使之能够有效地存储和管理
数据
,满足各种用户的应用需求,包括信息管理
要求
和
数据
处理
要求
:① 信息管理
要求
:在
数据
库
中存储和管理需要的...
基于PowerDesigner的
数据
库
设计
与建模(理论和实战驱动)
在
设计
数据
库
时
,对现实世界进行分析、抽象、并从中找出内在联系,进而确定
数据
库
的
结构
,这一过程就称为
数据
库
建模。它主要包括两部分内容:确定最基本的
数据
结构
;对约束建模。
数据
库
建模的过程:概念
模型
->...
(常见)
数据
模型
用
树形
结构
来表示各类实体以及实体间的联系。用有向图表示实体和实体之间的联系。可以看做是放松层次
数据
模型
的约束性的一种扩展。去掉了层次
模型
的两个限制:允许多个节点没有双亲结点。允许结点有多个双亲结点。...
计算机复试面试基础知识(八股文)(
数据
库
、
数据
结构
、操作系统、计网、机组等)
一、
数据
库
部分
数据
库
绪论 1、简述三层模式、两级映射,分别有什么...内模式(存储模式):
数据
物理
结构
和存储方式的描述,是
数据
在
数据
库
内部的表示方式,如存储方式是按照某个属性升序存储,什么索引等。 外模式模
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章