Дневник разработки #3. Проектирование БД

Содержание

Дневник разработки #5. Неожиданный финал

Введение

Когда речь заходит о проектировании баз данных, у меня — полнейшего профана в этом деле — спазмом сводит скулы. На свою первую серьезную БД я потратил чуть ли не месяц рабочего времени. Только на проектирование! Ведь чем больше погружаешься в процесс, тем больше появляется работы. Каждую отдельную сущность нужно вынести в отдельную таблицу, чтобы избежать дублирования информации и связанных с ним ошибок, задать связи, первичные ключи, вторичные ключи… Ужас!

Минимизация

Даже в нашем маленьком проекте веб-приложения, которое будет содержать заказы зрителей стрима (по сути TODO-список), всё не так просто, как казалось на этапе постановки задачи.

Мне всегда хочется ограничиться необходимым минимумом полей в БД. Казалось бы, что может быть проще: ID, username, ordername, status. Но как только позволяешься себе чуть углубиться в процесс формирования записей, понимаешь, что не обойтись еще без двух полей:

  • create_time (дата и время добавления заказа);
  • done_time (дата и время исполнения заказа).

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

В принципе, база с одной единственной таблицей имеет место на существование. И тут лучше сразу остановиться и попридержать коней, а то фантазия подскажет создать отдельную таблицу для пользователей, для статуса, для типов заказов… Скажите фантазии идти нафиг! Потому что на данный момент БД выглядит вполне себе рабочей.

finaldb

По уму следовало бы, конечно, создать отдельную таблицу timestamps, и хранить в ней время добавления и исполнения, а в order добавить связь по ключу timestamps_id, но давайте не будем уж настолько педантичными.

Теперь самое время экспортировать её в *.sql и развернуть на сервере.

+
Поделиться
Отправить
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (нет оценок)
Загрузка...