Какова оптимальная структура таблицы в этом случае?
Т.к. прошлый вопрос был не корректен,создаю новый.
Есть модель Событие(праздник,ярмарка и т.д).
Событие может происходить как в точную дату(единожды) , так и всё время по определённым дням НЕДЕЛИ (день недели может быть не один, к примеру событие происходит субботам и четвергам.).
Т.е. у тех, что происходят в конкретную дату,просто есть поле `date` типа DATE, а у тех что по определённым дням есть 7 полей(monday,tuesday,wednesday и т.д.) типа BOOLEAN. Правильным ли будет объединить все эти поля в одной таблице? Как по мне, не правильно что у события,которое происходит в конкретную дату, будут пустовать 7 полей.
Также события нужно будет выбирать по дате. Например,нужно выбрать сегодняшние события (28.08.2014,четверг). В выборке должны оказаться события которые происходят точно 28.08.2014 и события которые происходят по четвергам.
@Melodic и соответственно сделать и дату и день недели nullable, в зависимости от того, что из них не null будете знать, когда конкретно происходит событие.
- name (varchar)
- description (text)
- month (int) - 1-12 так как любое праздник как правило привязан к месяцу
- type (tinyint(1)) 0-9 types of event date calculations
- rule (varchar) - rule for calculations.
Теперь у нас есть типы. Например в коде определяем тип
1 - regular
Это значит что просто ежемесечно в одну и туже дату каждый год. Значит рул будет 8 а месяц 3 получаем 8 марта ежегодно.
2 - days count
Считаем дни от начала месяца. Например нам нужно второй понедельник в октябре. Значит месяц будет 10 а правило 2:1 где 2 это номер недели а 1 номер дня в неделе.
3 - days
например несколько дней на одной неделе. Понедельник и четверг второй недели сентябра. Значит месяц будет 9 а правило 2:1,4 или с понедельника по четверг 2:1-4 или с понедельнки по четверг и суббота 2:1-4,6
И так далее.
Такой схемой можно будет описать любое повторяющеяся событие в сделать выборку на текущий месяц.
Событие,у которого есть график, это по сути какое то заведение(кафе,ресторан) и оно работает весь год, по определённым дням недели. Месяц, тут как бы не нужен. Есть либо конкретная дата, либо график по дням недели.
Был вариант разделить на две таблицы, но мне нужно выбирать это всё одной выборкой,что бы узнать какие заведения работают и какие есть события в конкретную дату.
Ну тогда нужен столбец для каждого дня недели как 1-0 работает или нет и еще 2 столбеца для каждого дня недели это время работы. Первый часы начало, второй часы конец.
Если это кажется избыточным можно сделать отдельную таблицу расписания и если 2 заведения используют одно и тоже расписание то использовать его. Но запрос будет работать немного медленее когда появится много записей, если условия будут в присоедененой таблице.
а в чем проблема создать только по два поля на каждое событие event и dates. В event событие а в dates дни недели по которым оно происходит или даты, как ведь удобнее. зачем же под каждый день отдельно выделять место?