Что лучший способ состоит в том, чтобы сохранить дни недели, на которой происходит событие в реляционной базе данных?

36
задан Nelson Teixeira 6 June 2019 в 20:31
поделиться

5 ответов

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

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

я избежал бы поиска, потому что это будет сверхнормализацией. Если Ваш набор объектов поиска не очевиден или мог возможно измениться, это - излишество. В случае days-of-the-week (в отличие от штатов США, например), я спал бы обоснованно с фиксированным набором.

Рассмотрение области данных, я не думаю, что битовое поле достигло бы любых значительных сбережений пространства для Вас и просто сделает Ваш код более сложным.

Наконец, слово предупреждения о домене: много школ делает странные вещи с их расписаниями, где они "подкачивают дни" для балансирования, равное количество рабочих дней каждого заменяют семестр вводом с клавиатуры несмотря на праздники. Я не соглашаюсь с Вашей системой, но возможно лучший подход должен был бы сохранить таблицу фактических дат, на которых курс, как ожидают, произойдет. Таким образом, если существует два вторника за неделю, учитель, может быть оплачен разоблачение дважды, и учитель в течение четверга, который был отменен, не заплатит.

17
ответ дан 27 November 2019 в 05:59
поделиться

Решение номер 3, кажется, является самым близким к тому, что я рекомендовал бы. Расширение на идее взгляда таблица. Каждый курс имеет одну или несколько сессий. Составьте таблицу сессии с атрибутами: course_id, день, время, lecturer_id, room_id и т.д.

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

проблемы пользовательского интерфейса не релевантны, если Вы рассматриваете лучшее проектирование баз данных. Можно всегда создавать представления для отображения данных, и для того, чтобы собрать данные приложение может заботиться о логике получения многих сессий для каждого курса и добавления их к базе данных.

значение таблиц было бы более четким, который делает долгосрочное обслуживание легче.

4
ответ дан 27 November 2019 в 05:59
поделиться

Возможный № 4: Почему это должен быть отдельный столбец? Вы могли добавить столбцы на 7 битов в течение каждого дня недели к таблице. Запись SQL против него проста, просто протестируйте на 1 в столбце по Вашему выбору. И чтение кода приложения от базы данных просто скрывает это в переключателе. Я понимаю, что это не нормальная форма, и я обычно провожу довольно мало времени, пытаясь отменить такие проекты от предыдущих программистов, но я несколько сомневаюсь, что мы собираемся добавить восьмой день к неделе в ближайшее время.

Для комментария других решений я, вероятно, стонал бы, если бы я встретился с таблицей поиска. Мой первый наклон также был битовым полем с несколькими пользовательскими функциями базы данных, чтобы помочь Вам записать естественные запросы против того поля легко.

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

Редактирование: Я должен добавить, что № 3 и предложение выше легче добавить индексы к. Я не уверен, как можно было записать, что SQL-запрос как "получает меня все классы в четверг" для запросов № 2 или № 1, которые не привели бы к сканированию таблицы. Но сегодня вечером я могу просто быть тусклым.

7
ответ дан 27 November 2019 в 05:59
поделиться

Если Вы выберете один или два, то Ваша таблица не будет в 1 нФ (первая нормальная форма), поскольку она содержит многозначный столбец.

у Nicholas есть превосходная идея, хотя я не согласился бы, что его идея повреждает первую нормальную форму: данные на самом деле не повторяются, поскольку каждый день хранится независимо. Единственная проблема с ним состоит в том, что необходимо получить больше столбцов.

4
ответ дан 27 November 2019 в 05:59
поделиться

Если бы производительность является проблемой, я рекомендовал бы более чистый varation Ссылки № 3.

Ваш курс к таблице "расписания".

, Который в свою очередь связан с days_in_schedule таблицей.

days_in_schedule таблица имеет столбцы schedule_name и дата in_schedule_day. Со строкой в течение каждого допустимого дня в том расписании.

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

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

Другими возможными запросами является "Whats дата окончания 20-дневного курса, запускающегося 1-го апреля", который "планирует столкновение больше всего". Если Вы действительно хороши в SQL, можно спросить, "какие возможные дни открыты в курсе xxx студенту, который уже заказан для курса yyy" - который у меня есть чувство, реальная цель предложенной системы.

1
ответ дан 27 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: