Database design 层次结构中的可选关系
我有一个分层区域->区域->扇区,其中区域是可选的,即特定扇区可能属于某个区域,但用户可能不希望在区域级别上分解。此外,扇区与分区不同,它们具有不同的属性,分区实际上是扇区的集合 部门也有与层级结构更深层次相关的其他实体 我想知道的是,在数据库中对此进行建模的最佳方法是什么?我以前在类似的场景中做过这件事,并使用虚拟区域实体来允许存储扇区 有人有更好的主意吗 谢谢,Database design 层次结构中的可选关系,database-design,Database Design,我有一个分层区域->区域->扇区,其中区域是可选的,即特定扇区可能属于某个区域,但用户可能不希望在区域级别上分解。此外,扇区与分区不同,它们具有不同的属性,分区实际上是扇区的集合 部门也有与层级结构更深层次相关的其他实体 我想知道的是,在数据库中对此进行建模的最佳方法是什么?我以前在类似的场景中做过这件事,并使用虚拟区域实体来允许存储扇区 有人有更好的主意吗 谢谢, 马克 < P>如果应用程序中的区域和区域有效地相似,则可能需要考虑使用相同的表(并且使用标志列来区分给定行表示的类型)。在这种情况
马克 < P>如果应用程序中的区域和区域有效地相似,则可能需要考虑使用相同的表(并且使用标志列来区分给定行表示的类型)。在这种情况下,任何区域/分区都可以有一个父区域/分区,每个扇区都必须有一个父区域/分区 例如:
Table Container:
Field container_id
Field container_type
Field parent_container_id (NULL)
Table Sector:
Field parent_container_id
你不能把它当作是一种关系吗?分区始终是一个区域,扇区始终是一个区域 面积和扇区之间存在可选关系
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列,如果您想让自己变得非常困难,可以向这些列添加外键约束