bgc*_*ode 7 sql database tree normalization hierarchy
大学有不同的组织部门的方式.有些学校去了School -> Term -> Department.其他人介于两者之间,最长的是School -> Sub_Campus -> Program -> Term -> Division -> Department.
School,Term和,并且Department是学校的"树"部门中唯一存在的.这些类别的顺序永远不会改变,我给你的第二个例子是最长的.每一步都是1:N的关系.
现在,我不确定如何建立表之间的关系.例如,列中包含哪些列Term?其母公司可能是Program,Sub_Campus或School.它取决于学校的系统.我可以设想将Term表设置为所有这些(所有这些都默认为NULL)的外键,但我不确定这是在这里做事的规范方式.
这是一种设计可能性:
此选项利用了您的特殊限制。基本上,您通过引入通用节点将所有层次结构概括为最长形式的层次结构。如果学校没有“子校区”,则只需为其分配一个名为“主校区”的通用子校区。例如,School -> Term -> Department可以认为与 相同School -> Sub_Campus = Main -> Program=Main -> Term -> Division=Main -> Department。在本例中,当学校没有名为“Main”的节点时,我们将默认分配该节点。现在,您可以为这些通用节点设置一个布尔标志属性,表明它们只是占位符,并且如果需要,该标志将允许您在中间层或 UX 中将其过滤掉。
这种设计将允许您照常利用所有关系约束,并简化代码中缺失节点类型的处理。