表关系算法

时间:2011-10-22 07:49:50

标签: sqlite

我遇到了一个情况:

两张桌子

country
    -countryID (PrimaryKey)
    -countryName
    -relativeToSubCountry (Foreign Key -> subCountry.subCountryID)

subCountry
    -subCountryID (PrimaryKey)
    -subCountryName

示例:

德国与一个以上的子国家(历史时期或独立国家)相关

Germany -> Bavaria -> Saxonia -> ... -> Bismark -> Hitler -> BRD -> DDR 

问题是如何实现此表关系?因为country.relativeToSubCountry的ID不能超过1个。

提前谢谢。

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个记录,反之亦然。此外,关于每个特定关系(例如,关系存在的时间段)的信息可以存储在新表中。