|
|
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
Есть задача сделать для сети отелей поиск свободного номера по дате. Соответственно как вообще хранить статус номера в БД? У номера может быть 3 состояния, 1 - занят, 2 - свободен, 3 - промежуточное. Дней в году 365. Делать 365 колонок в таблице o_O ? И при поиске например свободного номера на 3 месяца составлять запрос по 90 колонкам? Есть наверное более простое решение!? Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 12:17 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixДней в году 365. Делать 365 колонок в таблице o_O ? Хранить периоды, а не дни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 12:24 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
GloryХранить периоды, а не дни В смысле сделать 12 таблиц по 30 дней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 12:40 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
Какие еще 12 таблиц ? Одна единственная таблица "ИД номера", "Статус", "Начало периода", "Конец периода" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 13:19 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixСоответственно как вообще хранить статус номера в БД? У номера может быть 3 состояния, 1 - занят, 2 - свободен, 3 - промежуточное. Дней в году 365. Делать 365 колонок в таблице o_O ? И при поиске например свободного номера на 3 месяца составлять запрос по 90 колонкам? Блин, чё там 365 колонок ? Это ж каждый дурак сделает. Делай 365 таблиц (366, если быть точным). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 13:23 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
MasterZiv Блин, чё там 365 колонок ? Это ж каждый дурак сделает. Делай 365 таблиц (366, если быть точным). О, точно спасибо, так и сделаю. Как я сам-то не подумал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 13:28 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
GloryКакие еще 12 таблиц ? Одна единственная таблица "ИД номера", "Статус", "Начало периода", "Конец периода" Ну допустим у меня 100 различных номеров в сети отелей на 100 гостиниц. И к примеру: 01.05 - статус номера 1 (занят) 02.05 - статус 3 (выселяется) 03.05 - статус 2 (свободен) 04.05 - статус 1 (занят) и т.д. Т.е. статус номера может каждый день меняться, как тут статус к периоду привязать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 13:36 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixТ.е. статус номера может каждый день меняться, как тут статус к периоду привязать? "ИД номера", "Статус", "Начало периода", "Конец периода" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 13:48 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrix Тебе пока что 3-т таблиц хватит: Таблица - с описанием твоих номеров Таблица - со статусами Таблица - в которой будет указанно какой номер занят на какой период. Соответсвенно если ты смотрешь номер сегодня, а номер занят будет еще 3-ри дня то у него статус "занят". Если период уже прошел, то статус свободен... както так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 13:58 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
С периодами запросы будут монструозны. Я бы не парился и делал один день - одна запись. Запросы вырождаются в простой not exists (... between...). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:13 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
GlorysoftrixТ.е. статус номера может каждый день меняться, как тут статус к периоду привязать? "ИД номера", "Статус", "Начало периода", "Конец периода" Glory, Вы бы не могли чуть подробнее написать. Что Вы подразумеваете под периодами. К примеру: Начало периода: 01.05 Конец периода: 02.05 Если так, то получаем 365 строк в таблице на каждый номер? И как по ним поиск делать на конкретные даты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:15 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
> С периодами запросы будут монструозны. Что там монструозного ? Я бы не парился и делал один день - одна > запись. Тогда эти записи нужно будет каждый день генерировать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:23 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixЕсли так, то получаем 365 строк в таблице на каждый номер? А вы что на год вперед знаете, когда номер заселен/освобжден что ли ? softrixИ как по ним поиск делать на конкретные даты? Хм. Указывать в тексте запроса условие поиска нарверное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:24 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
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 миллиона записей. Или это норм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:29 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
GloryА вы что на год вперед знаете, когда номер заселен/освобжден что ли ? Ну номера бронируют за достаточно большой промежуток времени, на пиковые даты уже за год - пол года, может быть все забронировано, поэтому нужно учитывать возможность бронирования номеров на весь год. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:33 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
MasterZivТогда эти записи нужно будет каждый день генерировать. Может для каждого номера, сразу генерировать 365 строк, а затем только Update делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:37 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
MasterZivЧто там монструозного ? Ну, лично я вот так с ходу не могу придумать запрос, который покажет список номеров, свободных с 20.03.2012 по 25.04.2012 при хранении интервалов резервации. softrixзаписывать только свободные даты Скорее наоборот - только даты, когда номер не может быть зарезервирован (т.е. уже занят или ещё что). Но, в принципе, действительно: заранее создать записи на год может оказаться выгоднее в плане быстродействия. Что до миллиона записей... Вряд ли MS SQL настолько слаб, что не потянет такую мелочь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:53 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixМожет для каждого номера, сразу генерировать 365 строк, а затем только Update делать? А чего не на 50-100 лет вперед тогда ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:53 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
GloryА чего не на 50-100 лет вперед тогда ? Ну дык он же не может сказать с уверенностью, что данный номер будет существовать через 100 лет. А на год вперёд - есть такая вероятность. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 14:58 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНу дык он же не может сказать с уверенностью, что данный номер будет существовать через 100 лет. А на год вперёд - есть такая вероятность. Т.е. хранить 365 записей на номер - это нормально ? А 730 - уже ненормально ? А если номер не будет ни разу заселен в течении года ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 15:04 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
Ага, ну вроде со структурой таблицы понятно. 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) Похоже на правду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 15:27 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
GloryТ.е. хранить 365 записей на номер - это нормально ? А 730 - уже ненормально ? А если номер не будет ни разу заселен в течении года ? Ну чтобы номер не был заселен в течении года это мало вероятно, в принципе все 365 строк будут использованы. В такой схеме не удобно другое. Это то что к концу года будут уже бронироваться даты следующего года и как то нужно будет корректировать строки текущего года со следующим. Проще все-же делать просто новые записи под каждые забронированные даты, а старые стирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 15:35 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixНу чтобы номер не был заселен в течении года это мало вероятно, в принципе все 365 строк будут использованы. Эти 365 строк только будут место занимать. Все информация из них умещается в одну запись "2", "01.01.2012", "31.12.2012" или вообще "2", "01.01.2012", "31.12.9999" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 15:51 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
softrixстарые стирать Зачем? Они полезны для "разбора полётов". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:03 |
|
||
|
Как лучше хранить и сделать поиск по большому кол-ву данных
|
|||
|---|---|---|---|
|
#18+
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, Ну в принципе, да или можно их в архив скидывать в конце года, чтобы таблицу не растить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2012, 16:28 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37702809&tid=1541748]: |
0ms |
get settings: |
8ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
142ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 441ms |

| 0 / 0 |
