Алгоритм связи таблиц - PullRequest
       3

Алгоритм связи таблиц

0 голосов
/ 22 октября 2011

У меня есть ситуация:

Два стола

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

subCountry
    -subCountryID (PrimaryKey)
    -subCountryName

Пример:

Германия относится к нескольким субстранам (период в истории или независимое государство)

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

Вопрос в том, как я могу реализовать эти табличные отношения? Потому что country.relativeToSubCountry не может иметь более 1 идентификатора.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 октября 2011

Если каждый subCountry может принадлежать только одному country, то все, что вам нужно сделать, это переместить внешний ключ:

country
    -countryID (PrimaryKey)
    -countryName

subCountry
    -subCountryID (PrimaryKey)
    -relativeToCountry (Foreign Key -> country.countryID)
    -subCountryName

Теперь каждый subCountry хранит своего "родителя"и все subCountry строк для country cxan можно найти, выбрав для'lativeToCountry`.

Если связь более сложная (и исторически я думаю, что это возможно из-за изменений границ), тогда вам нужноопять другая структура, что-то вроде

country
    -countryID (PrimaryKey)
    -countryName

subCountry
    -subCountryID (PrimaryKey)
    -subCountryName

subCountryStructure
    -relativeToCountry (Foreign Key -> country.countryID)
    -relativeToSubCountry (Foreign Key -> subCountry.subCountryID)

Теперь у каждого country может быть много subCountry записей и наоборот.Кроме того, информация о каждом конкретном отношении (например, период времени, в течение которого оно существовало) может быть сохранена в новой таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...