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列,如果您想让自己变得非常困难,可以向这些列添加外键约束