weranda
@weranda

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

Приветствую.
Приведу коротенькую таблицу заказов.
61f170e41b091825589246.png
В этой таблице есть дата, описание, и статус. Я не очень понимаю что делать со статусами:
а) оставлять их в этой таблице;
б) переносить в отдельную таблицу (order_statuses);
в) запихнуть в таблицу настроек (settings) в одно поле в массив какой-нибудь.

Будет несколько статусов, могут быть добавлены новые или удалены старые. Данные в таблицу будут заноситься с сайта. Рядом с полем статуса на сайте будет выбор статуса из выпадающего списка, к примеру. Получается, что именования статусов для их выбора где-то должны храниться: их можно добавиться прямо в HTML, в JS и поттягивать их оттуда или же разместить их в БД и тянуть из нее. Столько вариантов, аж голова кругом:)

С размещением данных в HTML & JS сложностей не вижу. Вижу сложность для себя с тем, в каком виде поместить эти статусы в таблицу БД. Приведите, пожалуйста, корректный пример с аргументами, чтобы мне стало понятно.
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 2
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Вот рекомендуемая структура базы данных в таком случае:
CREATE TABLE statuses (
	id int primary key auto_increment,
  	title varchar(64)
);

CREATE TABLE orders (
	id int primary key auto_increment,
  	created_at datetime default now(),
  	status_id int references statuses(id)
);

MySQL fiddle online
Ответ написан
Комментировать
AlexNest
@AlexNest
Работаю с Python/Django
a) Неверно с точки зрения нормализации - избыточность данных.
б) В целом - допустимый вариант и, в случае если нужно будет изменять варианты - оптимальный.
в) Также нарушает принципы нормализации - в одном поле нельзя хранить массивы.
г) Как вариант - использовать enum. Самый простой вариант, но при этом будет проблемно их изменять.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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