Sql数据库设计层次结构
我的任务是创建一个应用程序来跟踪我们的合同。我计划使用Django和PostgreSQL 我们现有的数据是Excel,共52行 我在文件中发现了一个层次结构模式,它包含如下内容Sql数据库设计层次结构,sql,postgresql,database-design,hierarchical-data,Sql,Postgresql,Database Design,Hierarchical Data,我的任务是创建一个应用程序来跟踪我们的合同。我计划使用Django和PostgreSQL 我们现有的数据是Excel,共52行 我在文件中发现了一个层次结构模式,它包含如下内容 任职 注册办事处 运营办公室 例如,控股办公室(公司)可以包含一个以上的注册办公室(公司),反过来,注册办公室(公司)可以包含一个以上的运营办公室(公司) 首先,我想我可以创建3个表,并使用PK和FK映射它们。但是,如果将来他们想将层次结构从3更改为4或5,该怎么办?我如何设计一个数据库来实现同样的目标。这通常是使用一种
首先,我想我可以创建3个表,并使用PK和FK映射它们。但是,如果将来他们想将层次结构从3更改为4或5,该怎么办?我如何设计一个数据库来实现同样的目标。这通常是使用一种称为 请注意,
parent\u office\u id
可为空,表示“无父项”
然后,您可以构建如下结构:
insert into office (office_id, office_name, parent_office_id)
values
(1, 'Holding Office', null),
(2, 'Registered Office One', 1),
(3, 'Registered Office Two', 1),
(4, 'Operating Office One', 2),
(5, 'Operating Office Two', 2),
(6, 'Operating Office Three', 3);
你可以使用一个简单的工具获得所有的“儿童”办公室。这里有一个关于Stackoverflow的例子。这里有一些权衡——甚至有一个(非常好的)概述了这些选项 @一匹没有名字的马给人最多的感觉 此模型的好处是,您不需要将关系的性质硬连接到数据模型中。当你找到一个没有控股公司的注册办事处时,你不需要取消选择你的“3表”模型来适应它。您可以包含一个“office类型”列,这样您的UI就可以显示office类型,而无需从关系中进行推断 其他好处是,改变层级结构很容易——注册办事处可以很容易地转移到另一家控股公司及其所有子公司
缺点是您无法轻松地在数据模型中强制执行业务规则。如果有一条业务规则规定“所有注册办事处必须只属于一个注册办事处”,则不能创建引用完整性约束来强制执行该规则。非常感谢您的解释非常感谢您的解释
insert into office (office_id, office_name, parent_office_id)
values
(1, 'Holding Office', null),
(2, 'Registered Office One', 1),
(3, 'Registered Office Two', 1),
(4, 'Operating Office One', 2),
(5, 'Operating Office Two', 2),
(6, 'Operating Office Three', 3);