2013-05-19 5 views
1

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

Я переписываю сайт, поэтому в любом случае я обновляю код, который с ним связан, но мне любопытно, есть ли у него преимущество в том, чтобы иметь такой способ?

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

ответ

4

Консолидируйте их в одну колонку - индекс на одну дату будет более компактным (и, следовательно, более эффективным), чем составной индекс на 3 типа. Вы также получите преимущества в отношении безопасности и связанных с датой функций, предоставляемых СУБД.

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

+0

* «просто создайте соответствующие вычисленные столбцы и введите их». * Что? – Kermit

+0

@FreshPrinceOfSO Например, столбец, который получает его значение, извлекая месяц из столбца даты. –

3

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

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

Недостатки в том, что с тремя отдельными столбцами int, проверка дат в значительной степени является интерфейсом, не прибегая к дополнительному кодированию на стороне SQL Server.

2

Да, я бы предложил вам заменить 3 столбца на один столбец, который содержит дату в Джулиане, которая является числом с плавающей запятой. Часть перед точкой дает день, часть после точки дает время в течение дня. Расчеты будут легкими, и вы также можете легко конвертировать Джулиана обратно в месяц/день/год и т. Д. Я считаю, что MS Excel хранит даты внутри, как номер с плавающей запятой, чтобы вы были в хорошей компании.

+0

[Как даты сохраняются] (http://blogs.lessthandot.com/index.php/DataMgmt/ DataDesign/how-are-dates-stored-in-sql-server) – Kermit

+0

В нем говорится о плавающей запятой. – Marichyasana

3

Как правило, одно поле даты идеально подходит, поскольку оно позволяет более эффективно сравнивать, проверять достоверность на низком уровне и функции даты-математики на стороне базы данных.

Единственное существенное преимущество разделения компонентов заключается в том, что часто требуется поиск (сравнение) за день или месяц. Может быть, «другие события, которые произошли в этот день». Или ежемесячное приложение для составления бюджета или что-то в этом роде.

(Даже тогда, собственное поле даты, вероятно, может быть сделано, чтобы эффективно работать с правильной индексацией.)

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