听起来像你只需要1个国家和地区的表,称之为“LandMass”,“Area”或其他。
LandMass
========
LandMassId
LandMassParentId
LandMassName
LandMassType
在这种情况下,你可以去一路下跌到一个单一的土地所有者:
Type="LandOwner"
Parent="MyCity"
Type="City"
Parent="MyState"
Type="State"
Parent="Region"
Type="Region"
Parent="Country"
Type="Country"
Parent="Continent"
类型将是一个外键到LandMassType表
家长会是一个外国键返回到LandMass表
您还可以创建计算列,可以将城市级别的土地所有者类型,城市类型总结到州级别,以及s上。
视图也没有超出视野......可以在每个级别创建可更新的视图,实质上按类型对数据进行分区。
在另一方面,也许你需要这种类型的设计:
Parcel table
============
Id
ParentId
Name
Type
etc..
Region table
============
Id
Name
etc..
Parcel_Region table
===================
ParcelId
RegionId
这将使你的定义,可以由任意数量的包裹的“区域”更大的灵活性,尽管有界限。但是,您必须将这些结果与包裹未参与区域的包裹表结合起来。换句话说,所有包裹都将被视为地区,特定地区可能包含任何数量的地块。
这里的所有神奇的是(这也可以应用到你的模型,我认为)
类型栏也可以当作一个位掩码:所以,如果
Type 0 = none;
Type 1 = land owner
Type 2 = city
Type 4 = state
Type 8 = country
Type 16 = continent
你想要,区域X可以是一个城市和一个州,通过给它一个类型值(城市州)= 6基本的数学将是简单的:
if((Type & 4) > 0) then it's a state.
if((Type & 2) > 0) then it's a city
所有的答案都相当丰富,但这一个需要蛋糕。第一个变体是好的,因为我可以在国家或地区设置两个独特的索引。缺点是我必须在表格之间进行3次连接以获得外部平衡区域键,但我没有太多对象,因此应该可以管理。谢谢 ! –