Решение индивидуальной проблемы при проектировании базы данных

#mysql #sql #database #database-design #erd

Вопрос:

Извините, если это очевидно, но я новичок в разработке баз данных.

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

Правильно ли я сделал, создав для этого две таблицы? Один для бронирования(который включает в себя предлагаемую информацию об аренде) и один для аренды (который включает в себя фактическую информацию об аренде). И если да, то разве у них не было бы отношений «один к одному»? Как я мог обойти эти отношения один на один? Должен ли я объединить две таблицы?

Комментарии:

1. При разработке схемы набросайте запросы ( SELECT, UPDATE и т.д.), Которые будут использоваться. Обычно это помогает вам находить недостатки в схеме и неудобные места.

2. Я хмуро отношусь к отношениям 1:1. Однако в данном случае для этого есть разумные аргументы (см. Ответ Имплалера). Подбросьте монетку.

Ответ №1:

Во-первых, поскольку бронирование может никогда не материализоваться в виде аренды, соотношение не совсем 1:1, а 1:(0-1).

Я бы подумал, что правильно, что вы моделируете их как отдельные сущности, так как:

  • У них могут быть разные «жизненные циклы».
  • Скорее всего, они обладают разными свойствами.
  • Аренда, вероятно, будет связана с кучей других объектов по сравнению с бронированием. Эти FK будут иметь смысл для аренды, но не для бронирования.

Комментарии:

1. Могу ли я потенциально иметь нечто подобное: у «Клиента» есть один ко многим с «резервированием товара». И «Бронирование товаров» имеет много общего с «Арендой»

2. @Liam Я не думаю, что должны быть оговорки N:1 против аренды. Это не похоже на то, что вы описывали раньше. В любом случае, в конце концов, это зависит от ваших конкретных потребностей.

Ответ №2:

Возможно, я ошибаюсь, но из того, что я понимаю, у вас может быть только 1 таблица для аренды и столбец с именем status enum (0,1) 0 доступен и 1 арендован. Я предполагаю, что вы не арендуете один и тот же предмет в одно и то же время.

Комментарии:

1. Хммм, но я также должен записать данные о бронировании? Например, идентификатор клиента, запрошенная дата аренды и запрошенная дата возврата, не будет ли слишком неудобно иметь все данные о будущем бронировании в таблице аренды?

2. Возможно, я упрощаю, но у вас может быть 3 таблицы, 1 для клиента, 1 для товара и 1 для аренды, в которых идентификатор клиента и идентификатор элемента указаны как FK, а в таблице аренды также указана дата и статус бронирования