听起来您只需要一张国家和地区的表格,称之为“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 表的外键
Parent 将是返回 LandMass 表的外键
您还可以创建计算列,以汇总城市级别的土地所有者类型,将城市类型汇总到州级别,等等。
视图也不例外......可以在每个级别创建可更新视图,这基本上按类型对数据进行分区。
另一方面,也许你需要这种类型的设计:
Parcel table
============
Id
ParentId
Name
Type
etc..
Region table
============
Id
Name
etc..
Parcel_Region table
===================
ParcelId
RegionId
这将使您在定义可以由任意数量的地块组成的“区域”时更加灵活,尽管有边界。但是,您必须将这些结果与宗地不参与区域的宗地表合并。换句话说,所有地块都将被视为区域,特定区域可以由任意数量的地块组成。
这就是所有魔法的所在(我认为这也可以应用于您的模型)
Type 列也可以被视为位掩码:
Type 0 = none;
Type 1 = land owner
Type 2 = city
Type 4 = state
Type 8 = country
Type 16 = continent
因此,如果您愿意,X 区可以是一个城市和一个州,方法是给它一个类型值 (City | State) = 6 基本数学很简单:
if((Type & 4) > 0) then it's a state.
if((Type & 2) > 0) then it's a city