SQL DB Дизайн таблицы для игрового сайта ASP.Net

Я создаю сайт с информацией об игре, используя ASP.NET и SQL, и мне нужна небольшая помощь, чтобы решить, как лучше всего разработать таблицу, в которой будут указаны даты выпуска. Я думал о дизайне с двумя столбцами (ExactDate, RoughDate), в котором каждый столбец может быть обнулен, но это просто не казалось правильным. Таблица должна иметь возможность хранить следующие форматы дат, и я хотел бы упорядочить по дате, ближайшей к текущей дате (поэтому игры, выходящие раньше, перечислены первыми):

DD-MM-YYYY
(Q1/Q2/Q3/Q4)-YYYY
(Early/Mid/Late)-YYYY
(Spring/Summer/Fall/Winter)-YYYY
TBA

Любые идеи о том, как лучше всего иметь дело с разными датами?


person Community    schedule 21.02.2013    source источник
comment
Почему 2 столбца не кажутся правильными? Отображение даты/текста и даты сортировки кажется вполне допустимым и позволяет обойти такие проблемы, как появление первого квартала 2013 года до или после начала 2013 года, позволяя продолжить доставку.   -  person chrisb    schedule 22.02.2013
comment
@chrisb Первоначальная идея двух столбцов заключалась в том, что один имел обычные даты, а другой - текстовые даты. Я не думал о дате отображения и настройке двух столбцов даты сортировки. Я думаю, что это сработало бы на самом деле.   -  person    schedule 22.02.2013


Ответы (2)


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

Что касается менее простой модели, то; если даты выпуска (и их относительный порядок) были достаточно важны, чтобы вы хотели убедиться, что начало 2013 г. появилось до 21 февраля 2013 г. (или наоборот), вы можете создать таблицу «даты выпуска».

DisplayText | Type | Start      | End
01/01/2013  | 1    | 2013-01-01 | 2013-01-01
Q1-2013     | 2    | 2013-01-01 | 2013-03-31
Early-2013  | 3    | 2013-01-01 | 2013-06-30

Это будет предварительно загружено с каждой комбинацией на следующие 20 лет или что-то еще (что по-прежнему составляет всего несколько тысяч строк ...), и вы просто будете рассматривать его как FK и использовать обычный синтаксис соединения, чтобы использовать его. Заказ можно сделать через столбцы «Начало/Конец», и вы также можете ограничить поиск этими диапазонами (возможно, только для игр, которые, вероятно, будут выпущены в ближайшие 6 недель или что-то еще).

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

person chrisb    schedule 21.02.2013

Я бы выбрал дизайн с двумя столбцами (DisplayText nvarchar, дата RelaseDate)

ReleaseDate будет вычисляемым столбцом, который будет вычислять дату на основе данных, хранящихся в столбце DisplayText. Просто создайте UDF, который будет вычислять дату на основе того, что хранится в столбце DisplayText, и все будет хорошо. Эта UDF будет немного сложной, но не слишком.

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

person Ken Williams    schedule 22.02.2013