qq357552440 2021-07-02 10:48 采纳率: 100%
浏览 128
已采纳

问下 以下情况的 组织机构表设计思路

假如组织机构有以下层级节点:
【系统】>【小区】>【园区】>【楼栋】>【单元】>【楼层】>【套间】>【房间】>【床位】

现在遇到的问题,如下:
1.上面节点中除了【系统】节点固定不变,【房间】到【床位】节点 固定不变。 其他节点 不一定 存在,即可开启关闭的。例如现场组织机构节点可能是这样:
【系统】>【房间】>【床位】
【系统】>【小区】>【楼栋】>【房间】>【床位】
【系统】>【小区】>【楼栋】>【楼层】>【房间】>【床位】
等等。

2.每种节点 都有自己的 不同属性。
3.因为是组织机构,所以系统经常以树形展示。

我现在的设计:

img

通过在组织机构表加标识,标识出不同类型层级。
但感觉还不是很灵活,特别是在 要查出它下级,的具体表详情内容,就不太方便。
例如:一个查询 楼栋详情的接口,要带出该楼栋下 床位相关的列表以及详情,以及床位的关联外键表如【床位标签表】的
信息。

查询流程就是:【t_building】 关联查询到【t_structure】表,再查t_structure其对应下级床位节点,再关联到 【t_bed】表,以及查询出 床位标签【t_bedlabel】表信息。

有没有更灵活的设计思路啊,
我想直接通过 具体层级表 就可以查询出上下级,例如链表形式,但因为 层级顺序不固定,想不到办法。
追求的是最好能直接用 懒加载导航属性那样, 直接【点】 就可以查询出下级集合, 因为我很懒,不想手写这么多关联代码

  • 写回答

3条回答 默认 最新

  • 小雨青年 PHP领域优质创作者 2021-07-02 17:27
    关注

    先占坑,你可以这么理解。

    每个层级都是一个实体,比如小区、园区等,他们都有自己的属性。

    他们之间存在层级关系,但是这个关系并不是固定的,中间可能会缺少层次。

    那么固定的在实体上去存下一级的id.

    我给的思路是单独去建立关联关系表,建立 实体_实体_map表,这样处理问题更加灵活。

    CREATE TABLE level_map (
    id int(10) unsigned NOT NULL AUTO_INCREMENT,
    up_id int(10) NOT NULL COMMENT '上级id',
    down_id int(10) NOT NULL COMMENT '下级id',
    weight int(10) NOT NULL DEFAULT '0' COMMENT '排序权重',
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?