数据库树状结构
‘壹’ 数据库有哪几种类型啊
1. 网状数据库(Network Database):这种数据库以网状结构组织数据,允许数据之间存在多对多的关系。
2. 关系数据库(Relational Database):基于关系模型,使用表格结构存储数据,表格中的行代表记录,列代表字段。例如:Oracle、DB2、Sybase、MS SQL Server、Informix、MySQL。
3. 树状数据库(Hierarchical Database):数据以树状结构组织,每个节点都有唯一的父节点,除了根节点。
4. 面向对象数据库(Object-oriented Database):这种数据库系统设计用来存储对象,支持复杂的对象和数据类型,以及继承等面向对象的特性。
随着信息技术的发展和市场的需求变化,特别是自20世纪90年代以来,数据库管理系统(DBMS)的功能已经超越了简单的数据存储和管理。现代数据库系统能够提供满足各种用户需求的数据管理方式。数据库的类型多样,从简单的表格到复杂的大型数据库系统,它们在各个领域都有着广泛的应用。
‘贰’ 数据库常见的数据模型有哪三种
1. 层次模型:在这种模型中,数据被组织成树状结构。每个结点最多只有一个父结点,除了根结点外,其他结点都只有一个父结点。层次模型确保了数据记录呈现出有序的层次关系,而不是杂乱无章的图形结构。
2. 网状模型:与层次模型不同,网状模型允许结点拥有多个父结点,这意味着一个结点可以有多个双亲。这种模型通过链接(或指针)来表示数据之间的复杂关系。在网状模型中,数据库中的数据可以形成任意图形的集合,提供了更灵活的数据组织方式。
3. 关系模型:关系模型采用表格形式来表示数据及其之间的联系。每个表格包含多列,每列都有唯一的列名。在关系模型中,无论是实体还是实体之间的联系,都使用统一的数据结构类型进行表示。这种模型通过表格来简化数据的组织和查询。
‘叁’ java 递归数据库生成 树形结构问题
1、准备表结构及对应的表数据
a、表结构:
create table TB_TREE
(
CID NUMBER not null,
CNAME VARCHAR2(50),
PID NUMBER //父节点
)
b、表数据:
insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0);
insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);
insert into tb_tree (CID, CNAME, PID) values (3, '广东省', 1);
insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);
insert into tb_tree (CID, CNAME, PID) values (5, '广州市', 3);
insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);
insert into tb_tree (CID, CNAME, PID) values (7, '海珠区', 5);
insert into tb_tree (CID, CNAME, PID) values (8, '天河区', 5);
insert into tb_tree (CID, CNAME, PID) values (9, '福田区', 6);
insert into tb_tree (CID, CNAME, PID) values (10, '南山区', 6);
insert into tb_tree (CID, CNAME, PID) values (11, '密云县', 2);
insert into tb_tree (CID, CNAME, PID) values (12, '浦东', 4);
2、TreeNode对象,对应tb_tree
public class TreeNode implements Serializable {
private Integer cid;
private String cname;
private Integer pid;
private List nodes = new ArrayList();
public TreeNode() {
}
//getter、setter省略
}
3、测试数据
public class TreeNodeTest {
@Test
public void loadTree() throws Exception{
System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
}
/**
* 递归算法解析成树形结构
*
* @param cid
* @return
* @author jiqinlin
*/
public TreeNode recursiveTree(int cid) {
//根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)
TreeNode node = personService.getreeNode(cid);
//查询cid下的所有子节点(SELECT * FROM tb_tree t WHERE t.pid=?)
List childTreeNodes = personService.queryTreeNode(cid);
//遍历子节点
for(TreeNode child : childTreeNodes){
TreeNode n = recursiveTree(child.getCid()); //递归
node.getNodes().add(n);
}
return node;
}
}
输出的json格式如下:
{
"cid": 1,
"nodes": [
{
"cid": 2,
"nodes": [
{
"cid": 11,
"nodes": [
],
"cname": "密云县",
"pid": 2
}
],
"cname": "北京市",
"pid": 1
},
{
"cid": 3,
"nodes": [
{
"cid": 5,
"nodes": [
{
"cid": 7,
"nodes": [
],
"cname": "海珠区",
"pid": 5
},
{
"cid": 8,
"nodes": [
],
"cname": "天河区",
"pid": 5
}
],
"cname": "广州市",
"pid": 3
},
{
"cid": 6,
"nodes": [
{
"cid": 9,
"nodes": [
],
"cname": "福田区",
"pid": 6
},
{
"cid": 10,
"nodes": [
],
"cname": "南山区",
"pid": 6
}
],
"cname": "深圳市",
"pid": 3
}
],
"cname": "广东省",
"pid": 1
},
{
"cid": 4,
"nodes": [
{
"cid": 12,
"nodes": [
],
"cname": "浦东",
"pid": 4
}
],
"cname": "上海市",
"pid": 1
}
],
"cname": "中国",
"pid": 0
}