2016-05-06 3 views
1


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

Например:

-6th January of each years 
-first day of each month of each year 

Как бы вы мне сохранить эту информацию на БД? Я не могу использовать Datetime, потому что с datetime я не могу представить конкретные случаи, как в приведенном выше примере.

Любое предложение?

Если это может касаться, я использую TSQL

Извините за мой бедный английский.

+0

Если я правильно понял, вы хотите сохранить список праздников в таблице. Для этого сохраните один столбец как только дату (а не дату-время) .so имя праздника varchar (255), Дата HoliDate. – KumarHarsh

+0

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

+0

Используйте iCalendar RRules и ExDates и создайте фактические даты (в окне времени) с материализованным представлением, а некоторые C# –

ответ

0

Я хотел бы предложить дизайн в 3 колонки для хранения этих условиях

  1. , чтобы указать, является ли это Day или WeekDay

  2. Колонка для указания Day/WeekDay Number (т.е. от 1 до 30/31 на день , 1-7 для WeekDay)

  3. Колонка для указания Monthly/Yearly возникновение. (Означает каждый месяц/год)

Например: - В первый день каждого месяца, что-то вроде этого: DAY,1,MONTHLY

Для второй субботу каждого месяца: WEEKDAY,14*,MONTHLY (* Мой старт Неделя воскресенье)

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

+0

@ davidinho, можете ли вы поделиться проектом, который вы используете для обработки сценария. –

2

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

Если у вас есть более сложные схемы повторения, вам понадобится атрибут правила повторения, например «каждые три месяца».

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

+0

интересный способ мышления +1 – Mark

+0

Привет, как мы можем указать будние дни, то есть каждое воскресенье или каждую вторую субботу и т. Д.? –

+0

Нет необходимости в этом в описании проблемы OP. Конечно, вы можете определить весь язык, специфичный для домена, для описания функциональности даты. – TAM

Смежные вопросы