美文网首页
SQL 之 外键与树状数据结构

SQL 之 外键与树状数据结构

作者: ouyounger | 来源:发表于2018-08-23 13:48 被阅读0次

先立个flag:看好多书上说,不提倡使用外键。想到一句话:应当是不提倡 [初学者] 使用外键。然后以讹传讹就变成了不提倡所有人使用了。大家谁都是从初学者过来的,但不要满足于初学者的水平啊!这个外键感觉在数据库中 树状数据结构 的操作很有用啊,可以好好学习一下。


关于外键的介绍:👉 w3school


master table

mId mName
1 市场
2 人力
3 研发

slave table

sId mName mId
1 张三 2
2 李四 1
3 王五 3

slave table 中,mId 就被称为 'slave table 的外键'
对于外键可以建立一种约束关系,叫做外键约束,一般所说的外键的作用,多是指外键约束的作用

1 预防破坏表间连接的动作;
2 预防非法数据插入到外键列,因为外键列的值只能取外键约束指向的表中(的列)的值之一;
3 可以设置Update 和 Delete 方法,在主表中被引用的列字段更新时,能自动更新从表中的主键值。

至于如何操作外键,还是参见👆面的地址。


个人认为:

1 外键对于不常删除数据的表,例如集团组织架构,用起来非常方便。尤其是在组织架构调整的时候;
2 对于存在外键的数据表,不建议存在软删除的操作;
3 对于外键的查询需要用到inner/left join,关于join 的用法也是一个很有意思的知识点。


关于数据库中树状数据结构的查询

Oracle 数据库中好像有专门的语句(源自CSDN):

select * from table
start with org_id = id值
connect by prior org_id = parent_id;

SQL Server 可以用with as语句块:

testtable

nId nName pId
node Id node Name parent Id
节点Id 节点名称 父节点的Id
-- Alter  
Create Procedure testtable
(
  @Id Int
)
As
Begin
  with cte as
  (
    select nId,nName,pId,0 as lvl from testtable where nId = @Id 
    -- lvl => level 意为节点深度
    union all
    select d.nId,d.nName,d.pId,lvl+1 from cte c inner join testtable d
    on c.nId = d.pId
    -- 这里是根据父节点Id 查询所有子节点
    -- on c.pId = d.nId  
    -- 这里是根据子节点Id 查询所有父节点
  )
  select * from cte;
  -- with ... as 语句后要紧跟select 语句
End

据说with ... as 语句块在执行两次以上时,会自动添加temp 表,以加快查询速度。


即将到来的新活,将部门所有的代码重写一遍。想想都掉头发,哎~~~

相关文章

  • SQL 之 外键与树状数据结构

    先立个flag:看好多书上说,不提倡使用外键。想到一句话:应当是不提倡 [初学者] 使用外键。然后以讹传讹就变成了...

  • SQL 外键

    SQL 什么时候使用外键? 个人观点: 建议使用情况:对于小部分固定人群使用,可以使用以降低开发维护和维护难度,像...

  • Sql知识

    主键外键 主键:PRIMARY KEY 外键:FOREIGN KEY 创建SQL FOREIGN KEY关于数据库...

  • SQL的主键和外键的作用

    SQL 的主键和外键的作用: 简而言之,SQL的主键和外键就是起约束作用。关系型数据库中一条记录中有若干个属性,若...

  • 第七章 SQL表之间的关系

    第七章 SQL表之间的关系 要在表之间强制执行引用完整性,可以定义外键。修改包含外键约束的表时,将检查外键约束。 ...

  • d3 树状布局tree

    树状布局Tree-Layout简介 显而易见,树状布局就是我们通常所理解的数据结构中的树,由一个根节点向外展开,与...

  • MySQL数据库的主键和外键详解

    MySQL数据库的主键和外键详解(SQL:外键字段不能为空字符串('')只能是null或有效值) 1)只有Inno...

  • SQL演练及外键

    1. 准备数据 创建数据表 插入数据 2. SQL语句的强化 查询类型cate_name为 '超极本' 的商品名称...

  • 映射(Map)

      知道某些键的信息,并想要查找与之相对应的元素。映射(map)数据结构就是为此设计的。映射用来存放键/值对。 1...

  • 树状数组

    复习一下树状数组 树状数组 一种用于处理单点修改和区间查询的数据结构。树状数组C的定义: C[x] = Sum ...

网友评论

      本文标题:SQL 之 外键与树状数据结构

      本文链接:https://www.haomeiwen.com/subject/qbgpiftx.html