我遇到了一个情况:
两张桌子
country
-countryID (PrimaryKey)
-countryName
-relativeToSubCountry (Foreign Key -> subCountry.subCountryID)
subCountry
-subCountryID (PrimaryKey)
-subCountryName
示例:
德国与一个以上的子国家(历史时期或独立国家)相关
Germany -> Bavaria -> Saxonia -> ... -> Bismark -> Hitler -> BRD -> DDR
问题是如何实现此表关系?因为country.relativeToSubCountry
的ID不能超过1个。
提前谢谢。
答案 0 :(得分:0)
如果每个subCountry
可能只属于一个country
,那么您需要做的就是移动外键:
country
-countryID (PrimaryKey)
-countryName
subCountry
-subCountryID (PrimaryKey)
-relativeToCountry (Foreign Key -> country.countryID)
-subCountryName
现在每个subCountry
存储其“父级”,并通过选择“relativeToCountry”找到subCountry
cxan的所有country
行。
如果关系更复杂(从历史上我认为可能是由于边界变化)那么你需要一个不同的结构,比如
country
-countryID (PrimaryKey)
-countryName
subCountry
-subCountryID (PrimaryKey)
-subCountryName
subCountryStructure
-relativeToCountry (Foreign Key -> country.countryID)
-relativeToSubCountry (Foreign Key -> subCountry.subCountryID)
现在每个country
可能有很多subCountry
个记录,反之亦然。此外,关于每个特定关系(例如,关系存在的时间段)的信息可以存储在新表中。