SQL 之 外键与树状数据结构

先立个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 表,以加快查询速度。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 若一个实体的某字段指向另一实体的主键,此字段即为外键。被指向的实体叫作主表,负责在指向的实体叫做从表。外键的作用用...
    JunChow520阅读 320评论 0 1
  • 闲聊云服务技术系列#1--OpenStack 闲聊云服务技术系列#2--Docker 闲聊云服务技术系列#3--K...
    ForestXie阅读 555评论 1 0
  • 給你寫信了。其實我知道,你不是壞姑娘,你是好孩子。你所說的這些,所做的這些,有自己的苦楚,其他人不是你,無法...
    十二在路上阅读 199评论 0 1
  • 1、树形分类表如何快速定位最高父级:用一个字段按顺序专门保存所有父级ID,并用分隔符分开。 2、查询的内容关联表太...
    夜藍阅读 241评论 0 0
  • 问题定义 零售商为客户提供一组产品。对给定产品的需求依赖于许多因素,包括产品本身的特性如价格或品牌,同类产品竞争对...
    0_Eric阅读 960评论 0 0