Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Хочу сделать таблицу с двумя полями
id date

Хотелось бы иметь constraint, чтобы у меньшего id всегда была меньшая дата.

Это возможно?
1 мар 16, 16:00    [18883100]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Зачем здесь вообще поле id?
1 мар 16, 16:02    [18883113]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Это возможно?

Зачем ? Разве дата сама по себе не является ПК ? Или у вас в календаре будут будут одинаковые даты ?
1 мар 16, 16:03    [18883117]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Glory,

Возможно ID должен давать порядковый номер дня от начала вселенной.

А вообще напомню про эту ссыль https://www.sql.ru/forum/1097504/vuha-dlya-kalendarya?hl=????? ??? ?????????
1 мар 16, 16:05    [18883131]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Возможно ID должен давать порядковый номер дня от начала вселенной.

А дата 1900-01-01, например, не может быть таким порядковым номером ?
Или вы будете оперировать ID, а не датой ?

a_voronin
А вообще напомню про эту ссыль https://www.sql.ru/forum/1097504/vuha-dlya-kalendarya?hl=????? ??? ?????????

Для чего и кому вы хотите напомнить :?
1 мар 16, 16:09    [18883158]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Гавриленко Сергей Алексеевич
Зачем здесь вообще поле id?


В принципе наверное и не нужно. Просто как-то принято, чтоб id был)
1 мар 16, 16:20    [18883255]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Просто как-то принято, чтоб id был)

Да что вы говорите. А кем принято ?
1 мар 16, 16:22    [18883272]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
Просто как-то принято, чтоб id был)

Да что вы говорите. А кем принято ?

нормальными формами
1 мар 16, 16:52    [18883498]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Glory
пропущено...

Да что вы говорите. А кем принято ?

нормальными формами

И что там прямо так и сказано - обязательно должно быть поле по имени ID и с порядковым номером ?
1 мар 16, 16:54    [18883517]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
пропущено...

нормальными формами

И что там прямо так и сказано - обязательно должно быть поле по имени ID и с порядковым номером ?


Да нет.

Просто не встречал, чтоб такого не было)
и вот решил спросить. Вроде толстые поля не рекомендуется делать PK. Хотя я не очень знаю почему.
1 мар 16, 17:03    [18883580]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
Это возможно?

Зачем ? Разве дата сама по себе не является ПК ? Или у вас в календаре будут будут одинаковые даты ?


Я подхожу с той точки зрения, чтобы не дать возможность вставлять в таблицу повторяющиеся даты. Вдруг кто случайно попробует
1 мар 16, 17:04    [18883590]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Я подхожу с той точки зрения, чтобы не дать возможность вставлять в таблицу повторяющиеся даты. Вдруг кто случайно попробует

И это можно сделать только, если в таблице будет поле с именем ID с номерами по порядку ?
1 мар 16, 17:05    [18883599]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Да нет.

Просто не встречал, чтоб такого не было)
и вот решил спросить. Вроде толстые поля не рекомендуется делать PK. Хотя я не очень знаю почему.

Что такое "толстые" поля ? Еще какой-то термин из нормальных форм ?
1 мар 16, 17:07    [18883614]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
Да нет.

Просто не встречал, чтоб такого не было)
и вот решил спросить. Вроде толстые поля не рекомендуется делать PK. Хотя я не очень знаю почему.

Что такое "толстые" поля ? Еще какой-то термин из нормальных форм ?


Ну хорош уже утрировать. Понятно ведь, что я хочу спросить. Почему их нельзя использовать не понимаю -спрашиваю.
Толстые - занимающие много памяти.

Glory
И это можно сделать только, если в таблице будет поле с именем ID с номерами по порядку ?

ну хватит в принципе и таблицы с одним столбцом дата
1 мар 16, 17:12    [18883650]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Ну хорош уже утрировать

Т.е. это я придумал термин "толстые поля" ?

questioner
Толстые - занимающие много памяти.

В чьих-то ограниченных мозгах ?

questioner
Glory
И это можно сделать только, если в таблице будет поле с именем ID с номерами по порядку ?

ну хватит в принципе и таблицы с одним столбцом дата

В нормальных формах говорится об идентфикаторе записи, т.е. о поле(ях), с помощью которых однозначно можно отличить каждую запись от других записей.
1 мар 16, 17:17    [18883681]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
http://stackoverflow.com/a/19299988/2674303
Of course you can, in the sense that your RDBMS will let you do it. The answer to a question of whether or not you should do it is different, though: in most situations, values that have a meaning outside your database system should not be chosen to be a primary key.

If you know that the value is unique in the system that you are modeling, it is appropriate to add a unique index or a unique constraint to your table. However, your primary key should generally be some "meaningless" value, such as an auto-incremented number or a GUID.

The rationale for this is simple: data entry errors and infrequent changes to things that appear non-changeable do happen. They become much harder to fix on values which are used as primary keys.

Тут про это написано, но я не совсем осознал последний абзац
1 мар 16, 17:18    [18883685]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
Ну хорош уже утрировать

Т.е. это я придумал термин "толстые поля" ?


Вот зануда!
questioner
Толстые - занимающие много памяти.

В чьих-то ограниченных мозгах ?

Я готов оказаться неправым, если что.

questioner
пропущено...

ну хватит в принципе и таблицы с одним столбцом дата

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


[/quot]

ага
1 мар 16, 17:21    [18883700]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Вот зануда!

А вы неуч, с умным видом генерирующий свои термины. Да еще с претензиями, что никто не понимает вашего гениального полета мысли.
1 мар 16, 17:30    [18883756]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
questioner
В принципе наверное и не нужно. Просто как-то принято, чтоб id был)
Дата - нормальный тип для ПК. И никакой он не толстый, те же 4 байта.

Целочисленный ПК в некоторых случаях будет удобен, предпочтителен, но это особые случаи, типа измерения в большом хранилище. Разумеется, он не должен быть IDENTITY

Уникальность дат в этом случае нужно обеспечить уникальным констрейном.

Возрастание дат одновременно с возрастанием ID обеспечить констрейном будет несколько затруднительно. Ну и действие это бессмысленное. ИМХО достаточно того, что календарь можно будет заполнить так, как вам нравится. Это же не оперативная таблица, заполняется один раз?
1 мар 16, 21:32    [18884679]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35384
Блог
alexeyvg
questioner
В принципе наверное и не нужно. Просто как-то принято, чтоб id был)
Дата - нормальный тип для ПК. И никакой он не толстый, те же 4 байта.


уже 3
2 мар 16, 07:46    [18885497]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Критик
alexeyvg
пропущено...
Дата - нормальный тип для ПК. И никакой он не толстый, те же 4 байта.

уже 3
Да, лоханулся, 3 байта. Ещё круче.
2 мар 16, 08:10    [18885520]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
o-o
Guest
Расскажу тут историю про любителей id_data.
Заведена тут таблица-календарь с 1950-01-01,
давно заполнена, все с ней хорошо.
Первая дата имеет id_data = 1.
Ночью для отчетных целей самописное ETL копирует по разным базам данные из восстановленной с OLTP-сервера копии рабочей базы.
И тут начинается самое интересное.
В каждой таблице есть дата, но она содержит временнУю составляющую.
При копировании таблиц производится денормализация и добавление в таблицу того самого id_data, чтобы отчетники потом могли по дате определить "рабочесть" дня и т. д., соединять короче чтоб могли с календарем.
Но то ж слабо на ходу из вычислить дату в виде даты без времени или сам этот несчастный id_data, что есть не что иное, как datediff в днях от 1949-12-31,
поэтому тут вместе с календарем некий великий архитектор выпустил в прод скалярку, вычисляющую по дате id_data, не через datediff даже, там супер-пупер код.
Прикиньте, сейчас переписываю тонны говнокода с этой скалярщиной.
Наверное, представитель ООП и по соаместительству большой любитель id нам все "изящно закапсулировал" (руки бы ему оторвать)
2 мар 16, 10:08    [18886007]     Ответить | Цитировать Сообщить модератору
 Re: Спроектировать календарь рабочих дней.  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
questioner
Хочу сделать таблицу с двумя полями
id date

Хотелось бы иметь constraint, чтобы у меньшего id всегда была меньшая дата.

Это возможно?


Если уж так хочется целочисленного ID, то сделайте вычисляемое поле.
Что-то типа
ID = CAST(CONVERT(nvarchar(8),<ДАТА>,112) AS BIGINT))


Только констрейн то тут зачем? Это только для проверки значения поля по соответствующим критериям?
Какой тут критерий?
2 мар 16, 10:57    [18886301]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить