powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование бронирования
25 сообщений из 33, страница 1 из 2
Проектирование бронирования
    #37553274
SmallWorker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Создаю в качестве дипломного проекта портал кинотеатра.
Сам проект по себе не сложный, пока я не начинаю задумываться о бронировании билета на сеанс. Вот тут то у меня мысли разбегаются и я даже не знаю с чего начать ^^

Поэтому просьба-вопрос: Как по вашему сделать хранение информации о бронировании (структура БД) , если:

У кинотеатра есть N залов.
В каждом зале N мест.
Есть какой-то фильм.
Фильм идет в такое-то время в таком-то зале.
На данный фильм в такое-то время бронируется до 5 таких-то мест.

Портал пишется-проектируется на Django, БД Postgre, бронирование будет на ajax визуальное.
Буду благодарен за любую помощь или совет.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553349
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица залов (ИД зала)
Таблица мест в зале (ИД зала, ИД места, Номер ряда, Номер места)
Таблица расписание сеансов в зале (ИД зала, ИД сеанса, С даты, По дату, Время начала, Время конца)
Таблица бронирования и оплаты (Дата, ИД сеанса, ИД места, Статус места:Свободно, Забронировано. Оплачено)
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553358
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл,

Таблица Брони (ИД брони, ФИО, ID сеанса, Кол-во мест)

В таблицу бронирования добавить ИД брони.

Схема не полностью нормализована, таблица Брони и таблица Бронирования и оплаты частично пересекаются, но в таком виде удобнее для ввода данных.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553777
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель,

авторТаблица расписание сеансов в зале (ИД зала, ИД сеанса, С даты, По дату, Время начала, Время конца)

А что, вариант "с утра в этом зале идет "Гробокопатель" два раза, днем в час "Солнечные зайчики в волшебном городе", и только в шесть до двух(а куда, кстати, эти 2 ночи девать?) нашумевшая мелодрама "Он, она и его любовники""?

Так что надо бы таблицы

Фильм(ид, название, описание, жанр и т.п.)
Идетвзале(ид залы, ид фильмы, начало таймстамп, продолжительность интервал)
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553810
SmallWorker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо за полный! и оперативный ответ.
Теперь я наконец понимаю к какому виду все нужно привести.
Из вашего примера выкинул только количество мест, так как не совсем понимаю как их отслеживать в приложении, ведь пользователь может выбрать и из разных рядов места.
Хотя может я чего-то не понимаю.

Накидал схему в ервине.
Я правильно вас понял?
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553827
SmallWorker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Author the new oneПрограммист-Любитель,

авторТаблица расписание сеансов в зале (ИД зала, ИД сеанса, С даты, По дату, Время начала, Время конца)

А что, вариант "с утра в этом зале идет "Гробокопатель" два раза, днем в час "Солнечные зайчики в волшебном городе", и только в шесть до двух(а куда, кстати, эти 2 ночи девать?) нашумевшая мелодрама "Он, она и его любовники""?

Так что надо бы таблицы

Фильм(ид, название, описание, жанр и т.п.)
Идетвзале(ид залы, ид фильмы, начало таймстамп, продолжительность интервал)

Так Программист любитель вроде бы указал это :
Таблица расписание сеансов в зале (ИД зала, ИД сеанса, С даты, По дату, Время начала, Время конца)

Тут как бы и есть таймстарт и время начала, зачем интервал?
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553918
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
SmallWorkerAuthor the new oneПрограммист-Любитель,

пропущено...


А что, вариант "с утра в этом зале идет "Гробокопатель" два раза, днем в час "Солнечные зайчики в волшебном городе", и только в шесть до двух(а куда, кстати, эти 2 ночи девать?) нашумевшая мелодрама "Он, она и его любовники""?

Так что надо бы таблицы

Фильм(ид, название, описание, жанр и т.п.)
Идетвзале(ид залы, ид фильмы, начало таймстамп, продолжительность интервал)

Так Программист любитель вроде бы указал это :
Таблица расписание сеансов в зале (ИД зала, ИД сеанса, С даты, По дату, Время начала, Время конца)

Тут как бы и есть таймстарт и время начала, зачем интервал?
Затем, что бывают очень ночные сеансы, конец которых перелазит в следующие сутки.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37553986
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new oneИдетвзале(ид залы, ид фильмы, начало таймстамп, продолжительность интервал)
"Идет в зале" это, по идее, и есть "сеанс". В сеансе id фильма.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37554212
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЫЗатем, что бывают очень ночные сеансы, конец которых перелазит в следующие сутки.
Вот только геморроиться с ними ну решительно незачем. Нет ни одной причины. Если кинотеатр, как большинство, работает с кратким ночным перерывом - типа с 12 до 3 - то удобно считать, что это и есть один день, и к нему привязывать рабочие смены и всё остальное. И тогда пусть и начало, и конец сеанса перелезают в следующие сутки, никаких проблем. Если же даже кинотеатр круглосуточный, для идентификации сеанса более чем достаточно "дата-время начала", время завершения - параметр информационный, а дата завершения так и вовсе интересна только пьяным из анекдотов.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37554720
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmallWorkerAuthor the new oneПрограммист-Любитель,

пропущено...


А что, вариант "с утра в этом зале идет "Гробокопатель" два раза, днем в час "Солнечные зайчики в волшебном городе", и только в шесть до двух(а куда, кстати, эти 2 ночи девать?) нашумевшая мелодрама "Он, она и его любовники""?

Так что надо бы таблицы

Фильм(ид, название, описание, жанр и т.п.)
Идетвзале(ид залы, ид фильмы, начало таймстамп, продолжительность интервал)

Так Программист любитель вроде бы указал это :
Таблица расписание сеансов в зале (ИД зала, ИД сеанса, С даты, По дату, Время начала, Время конца)

Тут как бы и есть таймстарт и время начала, зачем интервал?

Я имел в виду, что расписание сенансов меняется обычно каждую неделю и С даты По дату - это период, в течение которого данный фильм идет в данном зале. При этом фиксируется только время начала фильма. Если время конца будет меньше времени начала, значит фильм началался поздно ночью и переполз через 24:00.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37555089
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
softwarerЫЗатем, что бывают очень ночные сеансы, конец которых перелазит в следующие сутки.
Вот только геморроиться с ними ну решительно незачем. Нет ни одной причины. Если кинотеатр, как большинство, работает с кратким ночным перерывом - типа с 12 до 3 - то удобно считать, что это и есть один день, и к нему привязывать рабочие смены и всё остальное. И тогда пусть и начало, и конец сеанса перелезают в следующие сутки, никаких проблем. Если же даже кинотеатр круглосуточный, для идентификации сеанса более чем достаточно "дата-время начала", время завершения - параметр информационный, а дата завершения так и вовсе интересна только пьяным из анекдотов.

Вот вы сами и объяснили, зачем интервал :)
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37555108
SmallWorker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer Если же даже кинотеатр круглосуточный, для идентификации сеанса более чем достаточно "дата-время начала", время завершения - параметр информационный, а дата завершения так и вовсе интересна только пьяным из анекдотов.

Не согласен

Программист-любительЯ имел в виду, что расписание сенансов меняется обычно каждую неделю и С даты По дату - это период, в течение которого данный фильм идет в данном зале. При этом фиксируется только время начала фильма. Если время конца будет меньше времени начала, значит фильм началался поздно ночью и переполз через 24:00.

Примерно я так и думал.

Есть фильм Котэ.
Он идет: С даты: 1.12.2011 По дату: 7.12.2011
Каждый день с 1 числа по 7 он идет: Время начала 12-00, Время конца: 12-00+его длина

Если в какой-то день нам нужно уникальное расписание, мы просто делаем дату начала и конца одинаковой.

Ага, так и есть "подумал я" =)
Хорошо что расписал, так как по моей схеме в бронирование надо будет добавить поле [Дата] чтоб мы знали на какой день из диапазона сеанса он идет.

Как-то так получается, немного муторно в реализации запросов, зато удобно в админке делать сеансы.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37555111
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Особо не вникал, начало и длительность не устраивает ?
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556025
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

автордля идентификации сеанса более чем достаточно "дата-время начала", время завершения - параметр информационный, а дата завершения так и вовсе интересна только пьяным из анекдотов.

Вообще-то было бы неплохо иметь ограничение "в одном зале не может идти одновременно более одного фильма" и "сеанс не может быть назначен ранее чем через полчаса после окончания предыдущего".

Ну и идея "дата начала показов-дата окончания показов" мне кажется довольно сомнительной - зачем дублировать данные, если она прекрасно вычисляется из таймстампа начала и интервала?
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556053
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new oneВообще-то было бы неплохо иметь ограничение "в одном зале не может идти одновременно более одного фильма"
Если время начала и длительность произвольные, это ограничение плохо реализуется декларативной логикой. Хотя, помнится, я как-то извращался с пользовательским типом уникального индекса для решения этой задачи.

Это то, что лучше делать на уровне ХП.

Author the new oneи "сеанс не может быть назначен ранее чем через полчаса после окончания предыдущего".
А это вообще не стоит специально обдумывать, проще прибавлять полчаса к проверяемому диапазону.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556114
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
авторЕсли время начала и длительность произвольные, это ограничение плохо реализуется декларативной логикой.

Ну почему же - прекрасно в check'е реализуется.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556116
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new onesoftwarer,
авторЕсли время начала и длительность произвольные, это ограничение плохо реализуется декларативной логикой.

Ну почему же - прекрасно в check'е реализуется.
Можно пример?
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556163
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Чего? check'а?
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556191
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new onesoftwarer,

Чего? check'а?
Да. Вернее, структуры данных вместе с чеком. Думаю, вполне хватит таблички (id, date_from, date_to), но не хочу ограничивать.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556231
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Вы что, действительно не в курсе?

Постгрес
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table tct(
 id serial primary key,
 start date,
 dur interval
 );

create or replace function check_tct_overlaps(id integer, s date, i interval)
returns boolean as
$BODY$
 select not exists(select * from tct t where (t.start, t.start+t.dur) overlaps ($2, $2+$3) and id<>$1)
$BODY$
language sql;

alter table tct add constraint tct_check_overlaps check( check_tct_overlaps(id, start, dur));



Для других серверов по мотивам.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556237
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table tct(
 id serial primary key,
 start date,
 dur interval
 );

create or replace function check_tct_overlaps(id integer, s date, i interval)
returns boolean as
$BODY$
 select not exists(select * from tct t where (t.start, t.start+t.dur) overlaps ($2, $2+$3) and id<>$1)
$BODY$
language sql;

alter table tct add constraint tct_check_overlaps check( check_tct_overlaps(id, start, dur));
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556248
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new oneВы что, действительно не в курсе?
Да, я действительно не в курсе. Более того, я искренне надеюсь, что большинство СУБД не дают столь простой возможности порушить целостность данных.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556253
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Хм, вот так нашлась какая-то бага в форуме.

Но, думаю, и так все ясно.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556272
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Ну, Вам кроме постгреса осталось уговорить как минимум Oracle, DB2 и Microsoft - и тогда мир предстанет перед Вами немножечко более гармоничным.
...
Рейтинг: 0 / 0
Проектирование бронирования
    #37556284
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new onesoftwarer,

Ну, Вам кроме постгреса осталось уговорить как минимум Oracle, DB2 и Microsoft - и тогда мир предстанет перед Вами немножечко более гармоничным.
Ну, про оракла Вы мне пожалуйста не пойте, в нём такое ограничение делается другими, нормальными механизмами. Про db2 и ms не скажу.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование бронирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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