我有一個層次結構Area - > Zone - > Sector,其中Zone是可選的,即特定扇區可能屬於某個區域,但用戶可能不想在區域級別分解。此外,行業與區域不一樣,它們具有不同的屬性,區域實際上是行業的集合。層次結構中的可選關係
行業還有其他實體與層次結構相關聯。
我想知道的是什麼是在數據庫中對此進行建模的最佳方法?我之前在類似的情況下完成了此操作,並使用虛擬區域實體來允許存儲扇區。
有人有什麼更好的想法?
謝謝, 馬克
我有一個層次結構Area - > Zone - > Sector,其中Zone是可選的,即特定扇區可能屬於某個區域,但用戶可能不想在區域級別分解。此外,行業與區域不一樣,它們具有不同的屬性,區域實際上是行業的集合。層次結構中的可選關係
行業還有其他實體與層次結構相關聯。
我想知道的是什麼是在數據庫中對此進行建模的最佳方法?我之前在類似的情況下完成了此操作,並使用虛擬區域實體來允許存儲扇區。
有人有什麼更好的想法?
謝謝, 馬克
如果區域和區域是有效地在你的應用很相似,你可能要考慮使用兩個相同的表(和使用標誌列來區分一個給定的行代表型) 。在這種情況下,任何區域/區域可以具有父區域/區域,並且每個區域必須具有父區域/區域。
例如:
Table Container:
Field container_id
Field container_type
Field parent_container_id (NULL)
Table Sector:
Field parent_container_id
不能將它建模爲一個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列,如果您想讓自己真的很難,請爲這些列添加外鍵約束。