miker059
@miker059
Коротко не получится

Как правильно нормализовать БД?

Доброго дня, люди добрые!

Дайте совет дельный, пожалуйста. Занялся, первый раз в жизни, нормализацией небольшой БД, и столкнулся с проблемкой, которую ни как не могу придумать, как решить.

Итак, по порядку. Нужно спроектировать небольшую БД некоего оборудования, причем база рассчитана на всю Россию с разделением по регионам. Т.е. смысл такой -

есть некая модель оборудования, например, назовем "Wifi роутер модель №1", причем эта модель может присутствовать в некоторых регионах, а может и не присутствовать.
Возьмем, к примеру 3 региона: Удмуртия, Башкирия и Адыгея (ни какого скрытого смысла, просто чтобы односложные названия были, для упрощения написания).

И вот в Удмуртии и Башкирии наш роутер есть, а в Адыгеи нету...
А роутер модели №2 присутствует в Башкирии и Адыгеи, а в Удмуртии его нет.
Соответственно есть у нас две таблицы - Таблица "Оборудование" и таблица "Регионы"
в таблице оборудования, есть следующие поля:

id Наименование Регион

в таблице Регионы поля такие:

id Регион

Соответственно таблица регионов будет выглядеть так:

Таблица - Регионы
id Регион
18 Удмуртия
2 Башкирия
1 Адыгея

Таблица оборудования
id Наименование Регион
1 Wifi Роутер м.1 18, 2
2 Wifi Роутер м.2 1, 2

Соответственно смущает то, что в поле Регион, таблицы Оборудования, указываются множественные значения, и ни как не могу найти способ нормализовать это поле, получается либо так как сейчас, либо дублировать для каждого региона модель оборудования, что еще хуже...

Как быть в данной ситуации? решения в Гугле и Яндексе не нашел, потому решил написать сюда.

PS. Прошу не обращать внимания на то, что например поле Наименование можно также нормализовать разобрав на Тип
оборудования и модель, это само собой будет сделано. Вопрос только в поле с Регионом, какие есть варианты по его нормализации?

Благодарю заранее)
  • Вопрос задан
  • 536 просмотров
Решения вопроса 2
Таблица 1 - оборудование
id ...
Таблица 2 - регионы
id ...
Таблица 3 - связь обрудование-регион
id об. - id рег.
Ответ написан
@VisualIdeas
Стандартная задача, коллега:
Есть 2 варианта решения (Русский и Американский - как нам их называл препод)
Структура таблиц
Таблица - Регионы
id Регион
18 Удмуртия
2 Башкирия
1 Адыгея

Таблица оборудования
id Наименование
1 Wifi Роутер м.1
2 Wifi Роутер м.2

Таблица Оборудование в регионах (id, region_id, oborydovanie_id - id автоинкремент ключ первичный)
1 18 1
2 2 1
3 1 2
4 2 2

И второй подход состоит в том чтобы в таблице Оборудование в регионах убрать поле id, а первичным ключем делать связку region_id, oborydovanie_id
тогда таблица будет:
18 1
2 1
1 2
2 2
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
А почему не таблицей "Оборудование в регионе"? id девайса, id региона.
Ответ написан
Комментировать
@zhainar
Гуглю за вас
Вводите третью таблицу:
id | id_региона | id_оборудования | наличие
Ответ написан
Комментировать
sim3x
@sim3x
перед тем как просить нормализовать структуру данных, укажи в какую форму тебе нужно все привести
https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D...

для 3НФ https://en.wikipedia.org/wiki/Many-to-many_(data_model)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы