Правильно ли я составил структуру бд по заданию?
Всем привет у меня есть задание:
Создайте простую систему бронирования жилья (сам бэкэнд, не нужен фронт) . Основа:
- квартиру можно снять на сутки (минимальное количество - 1 сутки)
- одна квартира имеет в один момент Х свободных слотов т. е. может быть сдана в аренду для X людей одновременно (не обязательно с одним бронированием что-то вроде общежития / размещения с возможностью бронирования кроватей)
- при бронировании более 7 дней мы предоставляем скидку X%
- пользователь при бронировании определяет начальную, конечную дату и количество человек / кроватей.
Реализация будет на симфони, но думаю для моего вопроса это не важно. По этому заданию у меня получилась такая структура бд:
user
id|email
appartament
id|name|slots
slots - количество кроватей доступных для съема
user_appartament
id|user_id|appartament_id|start_date|end_date|discount|guests
guests - количество жильцов
Как сделать для кроватей/квартиры? К таблице user_appartament добавить поле beds и при выборе целой квартиры вставлять сюда количество слотов с сущности appartament? Или лучше добавить ещё одно булево поле full в которой буду обозначать, что будет снята вся квартира?
Если есть лучшее предложение по структуре бд или название таблиц, то прошу предлагать)
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Есть несколько мелких замечаний, а в целом - годится.
user_appartmentя бы переименовал вreservation- ведь это то, что по сути представляет собой запись в этой таблице- смысла добавлять поля
fullилиbedsнет, если полеguestsуже хранит количество зарезервированных данной резервацией мест. Это производные поля, которые денормализуют данные без особой на то необходимости. Количество свободных мест в квартире всегда известно: это разница междуapparment.slotsиsum(reservation.guests)для всех резерваций данной квартиры. - Точно так же нет смысла хранить производное поле
discount. Оно однозначно определяется на основе полейstart_date,end_date.