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

Соответственно как вообще хранить статус номера в БД? У номера может быть 3 состояния, 1 - занят, 2 - свободен, 3 - промежуточное.

Дней в году 365.
Делать 365 колонок в таблице o_O ? И при поиске например свободного номера на 3 месяца составлять запрос по 90 колонкам?

Есть наверное более простое решение!?

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702387
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixДней в году 365.
Делать 365 колонок в таблице o_O ?
Хранить периоды, а не дни
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702442
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryХранить периоды, а не дни

В смысле сделать 12 таблиц по 30 дней?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702544
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие еще 12 таблиц ?
Одна единственная таблица
"ИД номера", "Статус", "Начало периода", "Конец периода"
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702552
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixСоответственно как вообще хранить статус номера в БД? У номера может быть 3 состояния, 1 - занят, 2 - свободен, 3 - промежуточное.

Дней в году 365.
Делать 365 колонок в таблице o_O ? И при поиске например свободного номера на 3 месяца составлять запрос по 90 колонкам?


Блин, чё там 365 колонок ? Это ж каждый дурак сделает.

Делай 365 таблиц (366, если быть точным).
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702562
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Блин, чё там 365 колонок ? Это ж каждый дурак сделает.

Делай 365 таблиц (366, если быть точным).

О, точно спасибо, так и сделаю. Как я сам-то не подумал.
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702579
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryКакие еще 12 таблиц ?
Одна единственная таблица
"ИД номера", "Статус", "Начало периода", "Конец периода"

Ну допустим у меня 100 различных номеров в сети отелей на 100 гостиниц.
И к примеру:
01.05 - статус номера 1 (занят)
02.05 - статус 3 (выселяется)
03.05 - статус 2 (свободен)
04.05 - статус 1 (занят)
и т.д.

Т.е. статус номера может каждый день меняться, как тут статус к периоду привязать?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702612
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixТ.е. статус номера может каждый день меняться, как тут статус к периоду привязать?
"ИД номера", "Статус", "Начало периода", "Конец периода"
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702640
Фотография -O_o-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrix
Тебе пока что 3-т таблиц хватит:
Таблица - с описанием твоих номеров
Таблица - со статусами
Таблица - в которой будет указанно какой номер занят на какой период. Соответсвенно если ты смотрешь номер сегодня, а номер занят будет еще 3-ри дня то у него статус "занят". Если период уже прошел, то статус свободен... както так.
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702686
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С периодами запросы будут монструозны. Я бы не парился и делал один день - одна запись.
Запросы вырождаются в простой not exists (... between...).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702691
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GlorysoftrixТ.е. статус номера может каждый день меняться, как тут статус к периоду привязать?
"ИД номера", "Статус", "Начало периода", "Конец периода"

Glory, Вы бы не могли чуть подробнее написать. Что Вы подразумеваете под периодами.
К примеру:
Начало периода: 01.05
Конец периода: 02.05
Если так, то получаем 365 строк в таблице на каждый номер? И как по ним поиск делать на конкретные даты?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702711
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> С периодами запросы будут монструозны.

Что там монструозного ?


Я бы не парился и делал один день - одна
> запись.

Тогда эти записи нужно будет каждый день генерировать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702715
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixЕсли так, то получаем 365 строк в таблице на каждый номер?
А вы что на год вперед знаете, когда номер заселен/освобжден что ли ?

softrixИ как по ним поиск делать на конкретные даты?
Хм. Указывать в тексте запроса условие поиска нарверное
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702728
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovС периодами запросы будут монструозны. Я бы не парился и делал один день - одна запись.
Запросы вырождаются в простой not exists (... between...).


Т.е. Если я правильно понял Вы предлагаете таблицу вида

id status_id date

И соответственно записывать только свободные даты. А поиск делать вида
Select * from table where status_id=1 and date beetwen 01.05.2012 and 25.05.2012

Только если у нас 3000 номеров, то объем таблицы может вырасти до 1 миллиона записей. Или это норм?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702734
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryА вы что на год вперед знаете, когда номер заселен/освобжден что ли ?


Ну номера бронируют за достаточно большой промежуток времени, на пиковые даты уже за год - пол года, может быть все забронировано, поэтому нужно учитывать возможность бронирования номеров на весь год.
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702752
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivТогда эти записи нужно будет каждый день генерировать.


Может для каждого номера, сразу генерировать 365 строк, а затем только Update делать?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЧто там монструозного ?

Ну, лично я вот так с ходу не могу придумать запрос, который покажет список номеров,
свободных с 20.03.2012 по 25.04.2012 при хранении интервалов резервации.

softrixзаписывать только свободные даты
Скорее наоборот - только даты, когда номер не может быть зарезервирован (т.е. уже занят
или ещё что). Но, в принципе, действительно: заранее создать записи на год может оказаться
выгоднее в плане быстродействия.

Что до миллиона записей... Вряд ли MS SQL настолько слаб, что не потянет такую мелочь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702809
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixМожет для каждого номера, сразу генерировать 365 строк, а затем только Update делать?
А чего не на 50-100 лет вперед тогда ?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702823
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryА чего не на 50-100 лет вперед тогда ?

Ну дык он же не может сказать с уверенностью, что данный номер будет существовать через
100 лет. А на год вперёд - есть такая вероятность.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702842
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу дык он же не может сказать с уверенностью, что данный номер будет существовать через
100 лет. А на год вперёд - есть такая вероятность.
Т.е. хранить 365 записей на номер - это нормально ? А 730 - уже ненормально ?
А если номер не будет ни разу заселен в течении года ?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702922
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, ну вроде со структурой таблицы понятно.

id room_id status date

А, как по ней поиск cделать?

Если добавлять в таблицу только забронированные даты то поиск может выглядеть как-то так:

SELECT * FROM `rooms` as r WHERE r.id not in (select s.room_id from shedule as s where s.status=2 or s.status=3 beetwen 01.05.2012 and 25.05.2012 group by room_id)

Похоже на правду?
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702950
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryТ.е. хранить 365 записей на номер - это нормально ? А 730 - уже ненормально ?
А если номер не будет ни разу заселен в течении года ?

Ну чтобы номер не был заселен в течении года это мало вероятно, в принципе все 365 строк будут использованы. В такой схеме не удобно другое. Это то что к концу года будут уже бронироваться даты следующего года и как то нужно будет корректировать строки текущего года со следующим. Проще все-же делать просто новые записи под каждые забронированные даты, а старые стирать.
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37702998
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixНу чтобы номер не был заселен в течении года это мало вероятно, в принципе все 365 строк будут использованы.
Эти 365 строк только будут место занимать.
Все информация из них умещается в одну запись
"2", "01.01.2012", "31.12.2012"
или вообще
"2", "01.01.2012", "31.12.9999"
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37703028
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softrixстарые стирать
Зачем? Они полезны для "разбора полётов".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить и сделать поиск по большому кол-ву данных
    #37703101
softrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryЭти 365 строк только будут место занимать.
Все информация из них умещается в одну запись
"2", "01.01.2012", "31.12.2012"
или вообще
"2", "01.01.2012", "31.12.9999"

Это так, но при условии, что в любой момент времени забронирован весь год. Тогда и данные хранить смысла нет. :)
А, по факту будет примерно так:
На сегодняшний день забронировано:
"2", "01.01.2012", "02.01.2012"
"2", "03.01.2012", "05.01.2012"
"2", "06.01.2012", "08.01.2012"
"2", "21.01.2012", "22.01.2012"
На завтра, часть дат с брони снято.
На после завтра, часть дат перебронированны на новые.
и т.п.

Dimitry Sibiryakov,
Ну в принципе, да или можно их в архив скидывать в конце года, чтобы таблицу не растить.
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить и сделать поиск по большому кол-ву данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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