我有一个层次结构区域 - >区域 - >区域是可选的扇区,即特定扇区可以属于区域,但用户可能不想在区域级别分解。此外,区域与区域不同,它们具有不同的属性,而区域实际上是区域的集合
部门还有其他与层次结构相关的实体。
我想知道的是在数据库中对此进行建模的最佳方法是什么?我之前在类似的场景中做过这个,并使用了一个虚拟区域实体,然后允许存储扇区。
有人有更好的想法吗?
谢谢, 标记
答案 0 :(得分:1)
如果区域和区域在您的应用程序中足够相似,您可能需要考虑为两者使用相同的表(并使用标志列来区分给定行所代表的类型)。在这种情况下,任何区域/区域都可以具有父区域/区域,并且每个区域必须具有父区域/区域。
例如:
Table Container:
Field container_id
Field container_type
Field parent_container_id (NULL)
Table Sector:
Field parent_container_id
答案 1 :(得分:0)
你不能把它建模为IS-A关系吗?区域始终是一个区域,扇区始终是一个区域。
区域和部门之间存在可选关系。
create table dbo.area(
area_id numeric(8,0) identity,
parent_id numeric(8,0) not null, --whatever the parent table of area table is
flag1 bit not null,
prop1 varchar(100) not null, -- many more props...
constraint pk_0 primary key clustered ( area_id )
)
create table dbo.zone(
area_id numeric(8,0) not null,
prop_z1 varchar(50) null,
constraint pk_1 primary key clustered ( area_id )
)
alter table dbo.zone
add constraint fk_1 foreign key ( area_id )
references dbo.area ( area_id )
-- same for sector
create table dbo.sector(
area_id numeric(8,0) not null,
prop_s2 varchar(50) null,
constraint pk_2 primary key clustered ( area_id )
)
alter table dbo.sector
add constraint fk_s1 foreign key ( area_id )
references dbo.area ( area_id )
这是一个奇怪的设计,但是嘿,你已经要求任何替代方案。
您可以在扇区表中添加一个或多个zone_id列,如果您想让自己真的很难,请为这些列添加外键约束。