Дизайн базы данных - лучший способ показать доступные часы? - PullRequest
6 голосов
/ 28 марта 2009

Мне интересно посмотреть на предложения по проектированию базы данных относительно рабочего времени.

Это было бы очень похоже на то, что есть в Facebook - alt text http://uploader.ws/upload/200903/widget.png

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

Понедельник: открыто 9-5; Вторник: открыто 9-12; 1-5; и т.д. Я не хотел бы ограничиваться двумя наборами часов в день. В идеале N наборов часов в день. Если это не практично, не более 4 ... не менее 2.

Меня интересуют «лучшие» (теоретические) и наиболее практичные решения.

Я использую СУБД MySQL.

Ответы [ 4 ]

6 голосов
/ 28 марта 2009

Как насчет:

create table business (
  id int not null auto_increment primary key,
  name varchar(255)
);

create table open_hour_range (
  id int not null auto_increment primary key,
  business_id int,
  day_of_week tinyint, /* 0-6 */
  open_time time,
  close_time time,
  foreign key(business_id) references business(id)
);

Это позволяет вам использовать любую комбинацию часов, включая несколько в день. Тем не менее, это может быть немного медленно с точки зрения запросов, так как вам нужно приложить немало усилий, чтобы составить список часов, в которые работает компания.

Кроме того, если вы хотите отображать часы в таком формате, как:

М-Ф 9-5 Са-Су 9-12

Вам необходимо объединить похожие диапазоны в коде вне базы данных. Если вы хотите объединить сортировку, вы можете изменить day_of_week на start_day и end_day.

3 голосов
/ 28 марта 2009

Незначительные изменения в модели Скотти Аллена:

рабочий стол:
id - int
business_name - строка
Таблица open_hour_range:
id - int
business_id - int // внешний ключ для бизнеса
days_of_week- int // (битовая маска) 1-127
open_time - время
close_time - время

0 голосов
/ 28 марта 2009

Я бы предпочел использовать datetime в столбцах open_time и close_time. Это для встреч, которые начнутся ночью и закончатся утром следующего дня. :)

0 голосов
/ 28 марта 2009

С базой данных Microsoft SQL Server вы можете хранить эти данные как типизированный XML и при этом иметь возможность сортировать и сортировать данные на основе одного или нескольких значений это поле. Выполните любые расчеты, если это необходимо и т. Д.

Значение в этом столбце может выглядеть примерно так:

<businessDays>
    <monday>
        <hours from="12" to="15" />
        <hours from="16" to="21" />
    </monday>
    <friday>
        <hours from="13" to="15" />
        <hours from="16" to="18" />
        <hours from="19" to="21" />
    </friday>
</businessDays>

Ссылки на Типизированный XML :

Ссылки на индексирование и запрос данных XML в SQL Server:

В вашем приложении вы можете сериализовать / десериализовать эти данные в бизнес-объекты и из них.

Чрезвычайно просто и эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...