Mysql Подскажите структуру таблицы для хранения расписаний работы орг-ий

Приветствую, умов. Нужна ваша помощь либо мудрое наставление.

Подскажите, как организовать структуру в БД по хранению расписаний работы организаций?
Проблема, что расписание может быть разным в разные дни недели. И что должен быть легкий поиск по временным диапазонам. Типо так попадаем мы в раб. время или в обед или вообще уже не работает.

Мои идеи это либо...

1. Просто голимый перечень колонок. Каждая колонка это день недели + время в диапазоне



Т.е по 4 колонки на день недели (начало раб. дня, конец раб. дня, ачало обеда, конец обеда). Это в сумме выходит от 29 колонок с учетом колонки ID идентификатора (4*7 + 1).

2. Голимый перечень строк (записей).



Т.е на каждую организацию может выходить более одной записи.
Создается колонка отвечающая за группу диапазонов (День), и колонки под конкретное время (начало Рабочего дня (обеда), конец рабочего дня, обеда).

И далее например...

ID = 1. Смотрим колонку день: -1. Данный параметр значит, что в записи указано расписание на все дни, кроме... указанных в др. записях на данный ID. Смотрим... видем 5. Т,е на 5ый день недели у нас др. расписание.

Также для экономии можно создать колонку Выходные - где просто список номеров дней, в которые орг-ия не работает.

В целом созаем для себя подобные перечни... 0 - т.е расписание единое на все дни, 8 - будни 9 - выходные.. ну или типо того.

P.S.
Это все как-то не очень удобно. Первый - много колонок, второй - куча записей + сложность обработки при вставке, и выдачи.
 

С.

Продвинутый новичок
Это все как-то не очень удобно. Первый - много колонок, второй - куча записей + сложность обработки при вставке, и выдачи.
А кто говорил, что будет легко?

Практика показывает, что вариант с "кучей записей" в общем случае более гибкий.
 
А кто говорил, что будет легко?
Практика показывает, что вариант с "кучей записей" в общем случае более гибкий.
Я на него и опирался.
Но смущает, что например решил ты посмотреть информацию по 100 организациям и вместо 100 записей он будет выводить информацию по 200... 300.

А вообще не встречали статьи на подобную тему, может кто приводил варианты структур БД, подобного направления. Я не поленюсь - прочту.
 

С.

Продвинутый новичок
Но смущает, что например решил ты посмотреть информацию по 100 организациям и вместо 100 записей он будет выводить информацию по 200... 300.
Выдача данных из БД не равно выдаче информации пользователю. Отформатируйте как надо, хоть в 100, хоть в одну строку.

Нет никакой "серебрянной пули" для данного случая. Придется принимать "неудобства" либо в одну, либо в другую сторону.
 

chira

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

главный смысл - учитывать рабочие интервалы времени (с утра до обеда и после обеда до конца рабочего дня), не нужно сохранять когда перерыв на обед.
тогда если существует у оргии перерыв на обед, то для одного дня недели будет два рабочих интервала времени
при такой структуре вы легко по заданному времени и дню недели можете узнать работает ли оргия или нет
 
день недели
начало рабочего времени
конец рабочего времеи
ссылка на организацию
учитывать рабочие интервалы времени (с утра до обеда и после обеда до конца рабочего дня)
Понял так:
- запись один: будни, 8, 11
- запись два: будни, 12, 23
- запись три: выходные, 10,23.

Можно на примере сей тестовой организации?
ОАО "Интим".
Будни. 8-00, 23-00, (обед с 11 до 12).
Выходные. 10-23-00 (без обеда).

Т.е выходит если на каждую орг-ию будет от 5-7 записей - это нормально?
 

chira

Новичок
учитывая, что день недели 0- воскресенье ... 6-суббота, 959- id OAO "Интим"
записи будут выглядеть так :
959 0 10:00:00 22:59:59
959 1 08:00:00 10:59:59
959 1 12:00:00 22:59:59
.........
959 6 10:00:00 22:59:59

сделаешь уникальный составной индекс по 4 полям и будет работать
кончно можно добавить и свой идентификатор дня будний/выходной/предпраздничные/праздничные тогда меньше записей будет
 
Сверху