存树形结构的nosql
求一条sql语句,树形结构
with?a?as?(
select?pk_comp,name,pk_fathercomp?from?company
union
SELECT?pk_dept,deptname,(CASE?WHEN?pk_fathedept=0?THEN?pk_comp?ELSE?pk_fathedept?END)?as?pk_comp?FROM?dept)
select?a.name,b.name?from?a?as?b
inner?join?a?on?a.pk_comp=b.pk_fathercomp
文档型数据库设计模式:如何存储树形数据
MongoDB树形数据存储
树形结构的存储是一种非常典型的需求,例如菜单、省市区、栏目等等.
将树形结构的每个节点作为一行存储,每个节点保存父节点的指针(pid).优点是简单易懂,插入修改比较简单.缺点是若要获取某个节点的所有子节点,将是一件非常恶心的事情.
在方式1中增加left和right,相当于btree的左右分支,分别存储左右分支节点的最大值和最小值.优点是查询一个节点的子节点容易,仅需做范围查询查询即可.缺点是由于树形结构存储在里面,增加或修改已存在的节点将可能产生连锁反应,操作复杂.
将整个树结构存成一个文档,文档结构即树形结构,简明易懂.缺点是文档越来越大,对所有节点的修改都集中在此文档中,并发操作受限.
将每个节点的子节点保存起来,优点是结构简单查询子节点方便,缺点是查询父节点会表麻烦.
充分利用文档型存储 schema-less的优点,受限存储一个大的树形文档,再将每个节点的其他信息单独存储.优点是操作简单,结构上的操作可直接操作树形文档,数据上的操作仅需操作单条数据.缺点,对所有节点的修改都集中在此文档中,并发操作受限.
建立一个树形结构的SQL表 3实现的功能
主要是要有ID,PID两个字段,下面是我用的一个表,仅供参考:
CREATE TABLE [dbo].[Sys_Menu](
[ID] [int] NOT NULL,
[PID] [int] NOT NULL,
[Url] [varchar](100) NULL,
[STATE] [bit] NOT NULL,
[IsSelected] [bit] NULL
) ON [PRIMARY]
GO
怎么往数据库里插入一个树形结构的表,并且用一句SQL语句将其遍历出来
树形结构统一使用下面的测试表与测试数据
CREATE TABLE test_tree (
test_id INT,
pid INT,
test_val VARCHAR(10),
PRIMARY KEY (test_id)
);
INSERT INTO test_tree VALUES(1, NULL, '.NET');
INSERT INTO test_tree VALUES(10, NULL, 'Database');
Oracle
使用 START WITH CONNECT BY
语句实现树状查询
SQL ed
Wrote file afiedt.buf
①. SELECT
SQL /
TEST_VAL
-----------------------------------------------------------
.NET
C#
J#
ASP.NET
VB.NET
EJB
Servlet
JSP
Database
MySQL
PL/SQL
Function
Procedure
Package
Cursor
SQL Server
T-SQL
使用 Common Table Expression (CTE) 来实现 递归调用.
①. WITH StepCTE
①.0 test_tree
①.1 WHERE
test_id pid test_val Lev
----------- ----------- ---------- -----------
①. NULL .NET 1
①.0 NULL Database 1
怎样在 MySQL 表中存储树形结构数据
在 MySQL 表中存储树形结构数据:
一般比较普遍的就是四种方法:(具体见 SQL Anti-patterns这本书)
Adjacency List:每一条记录存parent_id
Path Enumerations:每一条记录存整个tree path经过的node枚举
Nested Sets:每一条记录存 nleft 和 nright
Closure Table:维护一个表,所有的tree path作为记录进行保存.
以上就是日讯小常识小编为大家整理的存树形结构的nosql相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!
