国と地域に必要なテーブルは 1 つだけのようです。「LandMass」、「Area」などと呼んでください。
LandMass
========
LandMassId
LandMassParentId
LandMassName
LandMassType
この状況では、1 人の土地所有者にまでたどり着くことができます。
Type="LandOwner"
Parent="MyCity"
Type="City"
Parent="MyState"
Type="State"
Parent="Region"
Type="Region"
Parent="Country"
Type="Country"
Parent="Continent"
タイプは、LandMassType テーブルへの外部キーになります
親は、LandMass テーブルに戻る外部キーになります。
都市レベルで土地所有者タイプを合計したり、都市タイプを州レベルで合計したりできる計算列を作成することもできます。
ビューも等式から外れていません...基本的にデータをタイプごとに分割する各レベルで更新可能なビューを作成できます。
一方、このタイプの設計が必要になる場合があります。
Parcel table
============
Id
ParentId
Name
Type
etc..
Region table
============
Id
Name
etc..
Parcel_Region table
===================
ParcelId
RegionId
これにより、境界に関係なく、任意の数の区画で構成される「地域」をより柔軟に定義できます。ただし、区画がリージョンに参加していない場合は、これらの結果を区画テーブルと UNION する必要があります。つまり、すべての区画がリージョンと見なされ、特定のリージョンは任意の数の区画で構成される可能性があります。
ここにすべての魔法があります(これはあなたのモデルにも適用できると思います)
Type 列は、ビットマスクのように扱うこともできます。
Type 0 = none;
Type 1 = land owner
Type 2 = city
Type 4 = state
Type 8 = country
Type 16 = continent
したがって、必要に応じて、タイプ値 (City | State) = 6 を指定することで、Area X を市と州にすることができます。基本的な計算は次のように単純です。
if((Type & 4) > 0) then it's a state.
if((Type & 2) > 0) then it's a city