加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

上下游依赖 这种er关系 在mysql 等关系型数据库中 如何设计 存储

发布时间:2020-12-13 22:47:08 所属栏目:百科 来源:网络整理
导读:问题场景: 在任务调度系统中,每个任务 既有上游 ,也有下游。如何设计 底层存储的表结构 支撑这种存储。 解决方法: 一. 采用图形 数据库 neo4j,每个节点 代表一个任务,节点之间的 边 (带有方向箭头) 表示 任务之间的依赖关系。 二. mysql等关系型数据库

问题场景: 在任务调度系统中,每个任务 既有上游 ,也有下游。如何设计 底层存储的表结构 支撑这种存储。


解决方法:


一. 采用图形 数据库 neo4j,每个节点 代表一个任务,节点之间的 边 (带有方向箭头) 表示 任务之间的依赖关系。



二. mysql等关系型数据库。

设计1 : 将 上下游依赖关系 作为 任务的属性 存储起来。 即: 任务id(主键)、任务名称、任务的上游id list、任务的下游id list。

优点: 这是最容易想到的方案。 但知觉告诉我不是很佳的方案,而且也显然不满足 3NF的设计原理。

缺点:


设计2: 只存储任务的上游依赖。 即 任务id(主键)、任务名称、任务的上游id list。


设计3: 将 任务之间的 依赖关系 单独 作为一个记录表 保存。依赖关系记录表的 表结构:自增主键id、上游任务id、下游任务id。同时 将 第二列、第三列都增加索引。

推荐设 计3.

优点: 因为依赖关系是 相对的,如果A和B有依赖关系,显然上游任务id就是A,下游任务id就是B。作为一条记录 insert 记录表。

如何查询 A的所有下游,则 select 下游任务id from 表 where 上游任务id=‘A’。 如果记录条数为0,则说明A无下游。

如何查询A的所有上游, 则 select 上游任务id from 表 where 下游任务id=‘A’。

而且不存在冗余。 对于任何一个依赖关系,只有一条记录。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读