聽起來像你只需要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次連接以獲得外部平衡區域鍵,但我沒有太多對象,因此應該可以管理。謝謝 ! –