Структура таблиц mySQL

190
09 сентября 2018, 17:50

Прошу совета по структуре таблиц.

Допустим, есть таблица countries (Страны. Напр. Россия):

country_id (PK)
country_name

Далее таблица districts (Округа. Напр.: Центральный федеральный округ):

district_id (PK)
district_name
country_id (FK countries(country_id))

Так же есть таблица subjects (Субъекты. Напр.: Московская область):

subject_id (PK)
subject_name
district_id (FK districts(district_id))
country_id (FK countries(country_id))

И еще таблица cities (Города):

city_id (PK)
city_name
subject_id (FK subjects(subject_id ))
district_id (FK countries(district_id))
country_id (FK countries(country_id))

Вопрос:

Правильно ли организована структура?

Либо нужно удалить дополнительные внешние ключи из нижних таблиц и делать выборку по иерархии? Если да - то почему?

Большое спасибо!

Answer 1

Привязки лишние. Возможны противоречивые данные. Например город может находится в одной стране, а регион в другой. Не храните в таблице города страны (например), получайте к ним доступ по иерархии.

UPD:либо можно привязываться непосредственно к "родителю"

country_id (PK)
country_name
district_id (PK)
district_name
country_id (FK countries(country_id))
subject_id (PK)
subject_name
district_id (FK districts(district_id))
country_id (FK districts(country_id))
READ ALSO
Как правильно сверстать модальное окно?

Как правильно сверстать модальное окно?

Написал тестовое модальное окно, но возникла проблема

353
Что такое top-level position в HTML?

Что такое top-level position в HTML?

В документации Bootstrap 41 в разделе Modal непонятное обозначение HTML top-level positions ссылка

175
Программы для верстки! [закрыт]

Программы для верстки! [закрыт]

Я увлекся веб версткой сайтов из psd шаблоновХочу спросить какие приложения помогут мне в этом

209
Содержит ли normal elements - custom elements?

Содержит ли normal elements - custom elements?

Входит ли custom elements в группу normal elements?

199