Я разрабатываю приложение, которое будет отслеживать различную информацию о врачах, которые связаны с моим местом работы.Одна вещь, которую мы отслеживаем, это их доступность по времени суток (утро, полдень и вечер) для каждого дня недели (понедельник - воскресенье).Кроме того, мы будем хранить дополнительный комментарий о доступности практикующих, что-то вроде «Не работает в полнолуние».
Форма ввода / отображения для этой информации будет в виде таблицы с днями недели в качестве заголовков столбцов, ивремя дня в качестве заголовков строк.Флажки покажут, доступен ли практикующий врач в течение указанного времени.
Мне трудно понять, как сохранить эту информацию в базе данных.Наиболее очевидное решение - создать таблицу с 24 столбцами (21 для 7 дней * 3 раза, 1 в качестве первичного ключа и 1 для внешнего ключа, ссылающегося на специалиста, и 1 для комментария).Это дрянная таблица, но, по крайней мере, ее легко выбирать и обновлять.
Другое решение - создать таблицу с атрибутами:
- Practitioner_id :: int (внешний ключ и первичныйключ)
- day_of_week :: int (первичный ключ) (также может быть Enum, но я не думаю, что SQL Server имеет такой тип)
- morning :: bit
- днем :: бит
- вечером: бит
Это менее уродливая таблица, но обновлять ее будет непросто, поскольку мне нужно было бы иметь отдельный оператор обновления для каждого днянедели.Комментарий также должен храниться вне этой таблицы.
Еще одним решением может быть использование одного столбца для каждого дня недели с типом данных BLOB (или любой другой версией SQL Server).,А затем сохраните информацию о времени в виде массива размера три.Но я уверен, что это нарушает все правила хорошего дизайна базы данных.Это также ограничивает эффективность отдельных запросов.
Любые идеи относительно того, как хранить эти данные?
РЕДАКТИРОВАТЬ:
Чтобы уточнить, нас интересует только то, что ихСреднее недельное расписаниеТакие вещи, как праздники и каникулы, можно игнорировать.
На внешнем интерфейсе информация будет отображаться в виде сетки, со столбцами, представляющими дни недели, и строками, представляющими время дня.
Эта информация может потребоваться для поиска.Например, мы можем захотеть получить отчет обо всех практикующих, которые работают по вечерам в понедельник.