powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше использовать Дату
18 сообщений из 18, страница 1 из 1
Как лучше использовать Дату
    #34771440
cxz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxz
Гость
Хочу с вами посоветоваться...
Планируется разработать БД, в которой преимущественно будет использоваться Дата.
Как лучше использовать эту Дату, в разных полях или все в одном :
День-Месяц-Год-Часы-минуты-секунды???
И какие у всего этого плюсы и минусы, с точки зрения последующих применнений этих данных-перекачка в другие БД, расчетов по ним и т.д.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34771457
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Все функции для работы с датами функционируют только с datetime и smalldatetime.
2) Datetime и SmallDatetime занимают соотвественно (8 и 4 байта), отдельные поля с частями даты и времени будут занимать на порядок больше пространства
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34771462
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Храни яйца в одной корзине.
Остальное для лукавого, заранее раскладывание граблей.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34771639
cxz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxz
Гость
есть ли какая-нибудь ссылочка на интересную статейку по этому поводу???
да и еще, где посмотреть описание типов данные...
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34772021
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34775323
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34775590
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34775720
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cxzХочу с вами посоветоваться...
Планируется разработать БД, в которой преимущественно будет использоваться Дата.
Как лучше использовать эту Дату, в разных полях или все в одном :
День-Месяц-Год-Часы-минуты-секунды???
И какие у всего этого плюсы и минусы, с точки зрения последующих применнений этих данных-перекачка в другие БД, расчетов по ним и т.д.Сильно зависит от того, какие типы данных есть в СУБД, с которой вы работаете.
Например, в Oracle есть тип данных DATE, который как раз и предназначен для приведенной вами информации - День-Месяц-Год-Часы-минуты-секунды.
Если этой точности недостаточно, то в Oracle ecть тип данных TIMESTAMP
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34775727
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально этот пост был в ветке SQL Server.

зы. Отдельные Date и Time будут представлены только в SQL Server 2008 :(
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34775788
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyХрани яйца в одной корзине.
Остальное для лукавого, заранее раскладывание граблей.
Ну почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав?

ЗЫ
Под денормализацией в данном случае я имел ввиду хранение и даты, и других нужных полей (День-Месяц-Год-Часы-минуты-секунды), фигурирующих в запросах как отдельные атомы.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34775800
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставлю свои 5 копеек.
sqllex Anatoly PodgoretskyХрани яйца в одной корзине.
Остальное для лукавого, заранее раскладывание граблей.
Ну почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав?


Это справедливо для OLAP витрин, хранилищ.
Для OLTP приложений, имхо, по крайней мере, что касается SQL Server, более оптимально хранить даты в родном DateTime, SmallDateTime.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34776173
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqllexНу почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав?

Под денормализацией в данном случае я имел ввиду хранение и даты, и других нужных полей (День-Месяц-Год-Часы-минуты-секунды), фигурирующих в запросах как отдельные атомы.Это оправдано в очень редких случаях. Как говаривал старина Кнут, преждевременная оптимизация -- источник всех бед. Если у вас есть чрезвычайно критичный по времени запрос, часто выполняемый, типа "отобрать записи за всю историю, но такие, у которых час=13", то о такой оптимизации можно подумать. Но не раньше.

Кроме того, и в этом случае есть альтернативы. Например, можно создать вычислимое поле "час" и проиндексировать его.

В большинстве случаев, для эффективного выполнения запросов с условием на элемент даты/времени (типа "час" = 13) достаточно добавить в WHERE эффективно сужающее интервал времени условие типа "MyTime" BETWEEN "left" AND "right", где поле "MyTime" проиндексировано. Обычно в интервал попадает не такое уж большое количество записей, чтобы последующиё перебор по ним с условием "час" = 13 был недостаточно быстрым.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34777099
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mir sqllexНу почему же. Денормализация для повышения скорости вполне оправданна. Или я не прав?

Под денормализацией в данном случае я имел ввиду хранение и даты, и других нужных полей (День-Месяц-Год-Часы-минуты-секунды), фигурирующих в запросах как отдельные атомы.
Если у вас есть чрезвычайно критичный по времени запрос, часто выполняемый, типа "отобрать записи за всю историю, но такие, у которых час=13", то о такой оптимизации можно подумать. Но не раньше.

Кроме того, и в этом случае есть альтернативы. Например, можно создать вычислимое поле "час" и проиндексировать его.

В большинстве случаев, для эффективного выполнения запросов с условием на элемент даты/времени (типа "час" = 13) достаточно добавить в WHERE эффективно сужающее интервал времени условие типа "MyTime" BETWEEN "left" AND "right", где поле "MyTime" проиндексировано. Обычно в интервал попадает не такое уж большое количество записей, чтобы последующиё перебор по ним с условием "час" = 13 был недостаточно быстрым.
Именно это я имел ввиду. Само собой, обычно решение о денормализации принимают после получения статистики использования БД. Особое спасибо за дополнительные коментарии.
Но кроме использования части даты в предикате where может быть понадобиться получение в запросе отдельно дня/года/часа/минуты...
Поэтому, не будет ли разумным заранее добавить (кстати, вычислимое поле - та же денормализация) нужные поля при интенсивной работе с частью даты-времени?
Может быть кто-то уже сталкивался с подобной задачей и делал тесты на реальной базе. Поделитесь, плз, результатами.

Александр Волок (def1983).
Я тоже обычно придерживаюсь этой точки зрения, но что думаете по вышенаписанному?
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34777158
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqllex
Но кроме использования части даты в предикате where может быть понадобиться получение в запросе отдельно дня/года/часа/минуты...

Александр Волок (def1983).
Я тоже обычно придерживаюсь этой точки зрения, но что думаете по вышенаписанному?

Что касается SQL Server, то функция Datepart довольно производительна, и, имхо, издержки на добавление и хранение нового столбца вряд ли будут сильно отличаться от простого использования DatePart + DateTime типа.

(зы. Разговор идет о приземленных олтп системах)
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34778959
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Волок (def1983)
Что касается SQL Server, то функция Datepart довольно производительна, и, имхо, издержки на добавление и хранение нового столбца вряд ли будут сильно отличаться от простого использования DatePart + DateTime типа.

(зы. Разговор идет о приземленных олтп системах)

Даже не смотря на то, что результат DatePart не будет проиндексирован (вычисляемые колонки - то же излишество, индексируемые представления в олтп системах скажутся на производительности)?

Я, правда, сразу не могу себе представить реальную систему (не секюрити-систему), в которой бы нельзя было бы дополнительно ограничить диапазон дат, как писал mir .
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34779047
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это зависит уже от характера запросов.

Если у Вас, например, стоит задача спроектировать максимально быструю среду для выполнения запросов такого порядка как:
1) Выбрать все продажи всех пятниц, 13-го сего года; 2) или выбрать самые дорогие покупки сделанные в последние субботы месяца и т.п.,

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

Но если будут преобладать точечные или ранжированные запросы по полям типа DateTime, зачастую обычный, кластерный индекс является здравым решением.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34779667
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Волок (def1983)Это зависит уже от характера запросов.

Если у Вас, например, стоит задача спроектировать максимально быструю среду для выполнения запросов такого порядка как:
1) Выбрать все продажи всех пятниц, 13-го сего года; 2) или выбрать самые дорогие покупки сделанные в последние субботы месяца и т.п.,
Я еще добавлю, что подобный ad-hoc запрос явно похож на изыски аналитика. Такие редкие, единичные запросы вряд ли назовешь критичными по времени. Необходимость менять структуру базы для их оптимизации практически равна нулю. Если уж на то пошло, изыски аналитика в OLTP -- нонсенс.
...
Рейтинг: 0 / 0
Как лучше использовать Дату
    #34779733
Фотография Александр Волок (def1983)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirЯ еще добавлю, что подобный ad-hoc запрос явно похож на изыски аналитика. Такие редкие, единичные запросы вряд ли назовешь критичными по времени. Необходимость менять структуру базы для их оптимизации практически равна нулю. Если уж на то пошло, изыски аналитика в OLTP -- нонсенс.
Ну я о том же :)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше использовать Дату
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]