Varchar2 против даты при построении хранилища данных - PullRequest
1 голос
/ 19 июля 2011

Имеет ли какое-либо значение предпочесть тип данных varchar2 над датой при создании хранилища данных в Oracle. Мое хранилище данных не является полностью хранилищем, потому что измерение даты не требуется (нет необходимости в иерархии дат), и достаточно сохранить дату в виде простой строки формата MM-DD-YYYY. Какой тип данных все же использовать?

Ответы [ 3 ]

10 голосов
/ 19 июля 2011

Давайте проведем небольшой анализ затрат / выгод, не так ли?

Оставьте поле "дата" как VARCHAR2

Плюсы:

  • Ноль вычисленийстоимость при форматировании даты в отчете (поскольку она всегда отображается в формате MM-DD-YYYY).

Минусы:

  • Невозможно проиндексировать (ну, в хронологический смысл)
  • Увеличение числа поисковых запросов увеличивается из-за TO_DATE вызовов
  • Требуется дополнительное вычисление, если дата должна отображаться в другом формате принекоторый отчет (например: TO_CHAR(TO_DATE(date_column, 'MM-DD-YYYY'), 'DD-MON-YYYY'))
  • Столбец не требует, чтобы все значения соответствовали определенному формату даты, увеличивая риск сбоя, если необходимо TO_DATE.

Измените поле "дата" на DATE

Плюсы:

  • Можно выполнять поиск без издержек TO_DATE
  • Можно индексировать
  • «Плохие» значения не могут быть вставлены (хотя даты могут все еще не иметь смысла с точки зрения бизнеса)
  • Может быть легко отформатирован

Минусы:

  • Я не могу думать ни о чем из головы

Надеюсь, это поможет в вашем конкретном решении с технической точки зрения.Всегда есть перспектива бизнес (или офисная политика ):

измерение даты необязательно

Я будуисправим это для вас:

измерение даты необязательно пока

Предположим, вы покидаете столбец как VARCHAR2и клиент приходит и просит отфильтровать некоторый отчет по этому полю даты.Предположим, это убивает сервер базы данных, и вам, наконец, нужно преобразовать его в DATE.Относительно легко сделать это изменение в производственной среде в вашей компании?Есть ли много бюрократизма, форм и панелей управления, с которыми вы должны бороться, чтобы внести свои простые изменения?Если вам do удается преодолеть эти препятствия, уверены ли вы, что все даты хранятся в одном и том же формате?

2 голосов
/ 19 июля 2011

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

Возможно, дисковое пространство не является большой проблемой в наши дни, ноэто может сэкономить некоторое пространство ОЗУ, предотвращая дисковый ввод-вывод, особенно если к записям, содержащим эти даты, часто обращаются.

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

2 голосов
/ 19 июля 2011

Что значит «достаточно» здесь? Я могу видеть, что вы теряете, не используя DATE, но что вы получаете, что стоит задуматься? Конечно, если у вас есть значение даты, в какой-то момент вы захотите использовать его, например, «Продажи в марте 2011 года» или как?

...