- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在寻找有关在关系数据库中对层次结构建模的一些反馈/指导。我的要求是我需要一个树结构,树中的每个节点都可以代表不同类型的数据。例如:
在上面的示例中,Organization、Department、Employee、Office Equipment 和 Team 都可以是数据库中的不同表,并且具有与之关联的不同属性。此外,诸如办公设备之类的东西可能不一定需要与部门相关联 - 它可以与团队或组织相关联。
围绕此建模我有两个想法:
第一个想法是有一个像下面这样的层次结构表:
hierarchys
hierarchy_id (INT, NOT NULL)
parent_hierarchy_id (INT, NOT NULL)
organization_id (INT, NULL)
department_id (INT, NULL)
team_id (INT, NULL)
office_equipment (INT, NULL)
在上表中,每一列都是一个可以为 null 的字段,并带有对其相关表的外键引用。这个想法是每一行中只有一列会被填充。
我的第二个想法是有一个像下面这样的单一表格:
hierarchys
hierarchy_id (INT, NOT NULL)
parent_hierarchy_id (INT, NOT NULL)
type (INT, NOT NULL)
在这种情况下,上面的表将管理层次结构,每个“节点表”都有一个 hierarchy_id,它有一个指向层次表的外键引用(即组织会有一个 hierachy_id 列)。类型列将是一个查找,以表示正在表示哪种类型的节点(即组织、员工等)。
我看到了这两种方法的优缺点。
一些附加信息:
有没有人遇到过类似的情况?我已经搜索了很多关于这种方法的信息和指导,但一直找不到任何信息。我感觉有一个特定的术语来表示我正在寻找的东西,但我没有使用。
提前感谢社区的帮助。
最佳答案
您可能想查看“嵌套集”。这是一个用两个极限表示有序集子集的模型,我们可以称之为“左”和“右”。在此模型中,(6,7) 是 (5,10) 的子集,因为它“嵌套”在其中。如果您将嵌套集与您的层次结构单独表的设计一起使用,您将在层次结构表中得到四列:leftID、rightID、ObjectID(FK)和级别。
维基百科对嵌套集合模型有很好的描述,可以通过clicking here查看.
关于mysql - 数据库层次结构 - 不同的节点表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485341/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!