|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
Всем привет, нужна небольшая помощь в корректировке БД. Смысл БД, бронирование номеров в отеле. Есть гость который может оставить заявку на номер в отеле (дата заезда, дата выселения, тип комнаты, ко-во гостей). Есть админ который просматривает заявки от гостей выбирает наиболее подходящий номер и выставляет счёт клиенту, может блокировать клиента. Гость и админ у меня в одной таблице юзер, отличие по роли. Таблицу счет создавал т.к. юзеру нужно отображать и его заявки и выставленные счета, в итоговом счёте параметры комнаты могут отличаться, так как может не быть комнаты по интересующим его параметрам и админ выставляет счет по наиболее подходящей комнате. Структура таблиц прилагается картинка. Собственно проблема в БД присутствуют связи 1 к 1 (заявка-счёт, счёт-комната) Я просто читал, что тип связей 1к1 не очень хорошо. Возможно кто-то предложит улучшения по другим пунктам. Буду благодарен за любые предложения и советы. Я не прошу переделать за меня БД, а дать советы, возможно ссылки где почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 15:48 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
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. Так мы достигаем несколько целей: в примитивном виде храним историю (заказали одно, по факту другое), можем уведомлять клиента об изменениях в заявке, т.е. клиент видит, что в его заявке изменения на другую комнату, и у нас счёт и заявка всегда содержат взаимно корректную информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 17:00 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
Gluck99 alex228, Вам надо разобраться с сущностями,... Вот да. При правильном проектировании можно вообще отказаться от администратора, если изначально предоставить заявителю для выбора список только допустимых вариантов бронирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 18:00 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
paver Gluck99 alex228, Вам надо разобраться с сущностями,... Тем не менее, система с управлением заявкой в обе стороны (админом и клиентом) предпочтительнее, но она требует более высокой квалификации разработчика. Пока что БД автора выглядит как учебный проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 19:00 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
paver, к сожалению от администратора отказаться нельзя, условия задания ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 19:05 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
Gluck99, Спасибо большое за ответ и потраченное время буду думать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 19:05 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
Gluck99, это и есть учебный проект, с ограниченной функциональностью ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2020, 19:07 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
alex228, Типы ключей по бороде пошли (int/bigint) делай одним типом всё. Сущности задачи : клиенты (пользователи), комнаты, заказы. Таблица invoice не нужна, да и вообще связи 1к1 не нужны чаще всего. Если можно добавить полей - добавляй полей. 1к1 нужно, например, если у тебя таблица на 500М записей, надо для 10к записей добавить десяток полей, а таблицу раздувать не охота. По доброму не хватает таблицы с платежами, которая будет приходить из банка, и таблицу-лог действий, но в шараге вряд ли про это знают. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 04:49 |
|
Нужна помощь, скорректировать схему БД
|
|||
---|---|---|---|
#18+
две таблицы 1 Номера и 2 Заявки(бронь) один ко многим для функционала "Учета Номеров" достаточно далее просто при желании раздуваем - тбл Стоимость номера с привязкой к периоду (зима лето ... праздники) тбл Гость(проживающий) тбл Счета - имхо для учебного функционала не нужна, но как ТС угодно, можно в Заявках кроме дата заезда-выезда добавить поле Оплата, Состояние (значения Бронь, Оплачено полностью) и т.д Основные запросы будут по связке первой-второй таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 19:24 |
|
|
start [/forum/topic.php?fid=47&msg=40031217&tid=1828257]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
190ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 294ms |
0 / 0 |