powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь, скорректировать схему БД
9 сообщений из 9, страница 1 из 1
Нужна помощь, скорректировать схему БД
    #40031146
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, нужна небольшая помощь в корректировке БД.
Смысл БД, бронирование номеров в отеле. Есть гость который может оставить заявку на номер в отеле (дата заезда, дата выселения, тип комнаты, ко-во гостей). Есть админ который просматривает заявки от гостей выбирает наиболее подходящий номер и выставляет счёт клиенту, может блокировать клиента. Гость и админ у меня в одной таблице юзер, отличие по роли. Таблицу счет создавал т.к. юзеру нужно отображать и его заявки и выставленные счета, в итоговом счёте параметры комнаты могут отличаться, так как может не быть комнаты по интересующим его параметрам и админ выставляет счет по наиболее подходящей комнате. Структура таблиц прилагается картинка.
Собственно проблема в БД присутствуют связи 1 к 1 (заявка-счёт, счёт-комната) Я просто читал, что тип связей 1к1 не очень хорошо. Возможно кто-то предложит улучшения по другим пунктам.
Буду благодарен за любые предложения и советы. Я не прошу переделать за меня БД, а дать советы, возможно ссылки где почитать.
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031177
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex228,
Вам надо разобраться с сущностями, которые вы желаете отобразить в БД, и их взаимной приоритетностью (это первое, с чего надо начинать). С моей точки зрения, главная сущность в вашей задаче - это комната. Потому что она единственная, которая является постоянной (почти константой). Все остальные сущности вертятся вокруг неё. А у вас в центре почему-то заявка (application).

Я бы делал так:

rooms: id.
apllications: id, Room_id, ActualRoom_id (?), User_id
invoices: id, Room_id, User_id, Application_id
users: id, UserRole

Открытый вопрос - связывать ли заявку со счётом и как это делать: а) не каждая заявка превращается в счёт (например, клиент отвалился); б) не всякая заявка превращается в счёт с тем же id комнаты. Т.е. де-факто у нас заявки и счета могут быть по бизнес-процессу только частично связаны друг с другом.
Решение зависит от того, надо вам фиксировать этот нюанс или нет. Если нет, тогда можно оставить как есть. Если надо (что, мне кажется, грамотнее), тогда в таблицу applications можно добавить еще одно поле ActualRoom_id. В заполненной пользователем заявке устанавливаете Room_id = ActualRoom_id, если комната де-факто будет другая, не та, которую выбрал клиент, админ оставляет Room_id как есть, а в ActualRoom_id записывает то, что есть в наличии, и на основании скорректированной заявки выставляет счёт, куда уже идёт ActualRoom_id. Так мы достигаем несколько целей: в примитивном виде храним историю (заказали одно, по факту другое), можем уведомлять клиента об изменениях в заявке, т.е. клиент видит, что в его заявке изменения на другую комнату, и у нас счёт и заявка всегда содержат взаимно корректную информацию.
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031201
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99
alex228,
Вам надо разобраться с сущностями,...

Вот да. При правильном проектировании можно вообще отказаться от администратора, если изначально предоставить заявителю для выбора список только допустимых вариантов бронирования.
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031217
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver
Gluck99
alex228,
Вам надо разобраться с сущностями,...
Вот да. При правильном проектировании можно вообще отказаться от администратора, если изначально предоставить заявителю для выбора список только допустимых вариантов бронирования.
В идеале да, но если представить себе, что ситуация может меняться уже после бронирования, например, клиент был один, а потом их стало двое или трое. Это потребует разработку механизма отмены, перезаказа и т.п. К тому же, ситуация может измениться и на стороне гостиницы, например, комната внезапно стала нежилой из-за протечки, отсутствия электричества, ремонта и т.п., что бывает не так уж и редко. И необходимо принудительно менять размещение с уведомлением клиента.
Тем не менее, система с управлением заявкой в обе стороны (админом и клиентом) предпочтительнее, но она требует более высокой квалификации разработчика. Пока что БД автора выглядит как учебный проект.
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031218
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver,
к сожалению от администратора отказаться нельзя, условия задания
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031220
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,
Спасибо большое за ответ и потраченное время буду думать
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031221
alex228
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,
это и есть учебный проект, с ограниченной функциональностью
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031683
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex228,

Типы ключей по бороде пошли (int/bigint) делай одним типом всё. Сущности задачи : клиенты (пользователи), комнаты, заказы. Таблица invoice не нужна, да и вообще связи 1к1 не нужны чаще всего. Если можно добавить полей - добавляй полей. 1к1 нужно, например, если у тебя таблица на 500М записей, надо для 10к записей добавить десяток полей, а таблицу раздувать не охота. По доброму не хватает таблицы с платежами, которая будет приходить из банка, и таблицу-лог действий, но в шараге вряд ли про это знают.
...
Рейтинг: 0 / 0
Нужна помощь, скорректировать схему БД
    #40031937
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
две таблицы
1 Номера и 2 Заявки(бронь) один ко многим
для функционала "Учета Номеров" достаточно
далее просто при желании раздуваем -
тбл Стоимость номера с привязкой к периоду (зима лето ... праздники)
тбл Гость(проживающий)
тбл Счета - имхо для учебного функционала не нужна, но как ТС угодно, можно в Заявках кроме дата заезда-выезда добавить поле Оплата, Состояние (значения Бронь, Оплачено полностью) и т.д
Основные запросы будут по связке первой-второй таблиц
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь, скорректировать схему БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]