Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
=Сергей= Member Откуда: Сообщений: 334 |
Меняю структуру БД. Столкнулся с хранением Даты рождения в виде строки 'ЧЧММГГГГ', тут же решил преобразовать в date, но не тут то было: есть неполные даты рождения: без дня, без месяца... - отсутствующие фрагменты заменены на нули - 00001926 - xx.xx.1926 С одной стороны, нужно обеспечить максимальную гибкость поиска, то есть разделить дату на 3 целочисленных индексированных составляющих, но с другой - не хотелось бы раздувать количество полей. Порекомендуйте решение. |
13 июл 16, 14:20 [19404475] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
Если число или месяц отсутствует - считать что человек родился на новый год 01/01. И все хранить как DATE в одном столбце. Разумный компромисс... |
13 июл 16, 14:39 [19404560] Ответить | Цитировать Сообщить модератору |
ппп-п
Guest |
=Сергей=, Мы у себя храним ДАТУ + МАСКУ. Т.е. если у Вас есть ГОД(1999) и МЕСЯЦ(02) 1. Дата = 1999-02-01 2. Маска = YYYYMM Маска может быть YYYY, YYYYMM, YYYYMMDD Может и Вам такая схема подойдет. |
13 июл 16, 14:40 [19404566] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
а как же тогда отличить, по-правде 01/01 родился или нет? зададут потом точную дату для поиска, с 01/01, а получат еще и левых |
||
13 июл 16, 14:43 [19404579] Ответить | Цитировать Сообщить модератору |
L.Otujktd Member Откуда: Сообщений: 112 |
=Сергей=, Если попробовать вынести строку в отдельную таблицу и связывать по ключу? Правда Для работы скорее придется писать хранимки. |
13 июл 16, 14:45 [19404595] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
для случая если человек родился несколько раз? |
||
13 июл 16, 14:55 [19404660] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||
13 июл 16, 15:07 [19404744] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
если "нужно обеспечить максимальную гибкость поиска", то как уже посоветовали дуйте поля. |
||
13 июл 16, 15:17 [19404792] Ответить | Цитировать Сообщить модератору |
L.Otujktd Member Откуда: Сообщений: 112 |
TaPaK, Тогда выносим связи в отдельную таблицу :). Тут уж надо понимать сколько дат может быть у одной сущности-одна или набор. |
13 июл 16, 15:31 [19404844] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Ставьте 1янв. нужного года. Или 01-01-1900. И тогда можно будет найти и заполнить неполные ДР. А еще есть комментарий. Не ? От неполной даты пользы нет, ИМХО. |
||
13 июл 16, 15:40 [19404896] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2395 |
LSV, >>Неполная ДР это отсутствие ДР не совсем. если девочка не стала указывать год, то все равно можно используя дд и мм, поздравить ее так что некий признак "не указано" и "не полностью указано" можно прикручивать (в простейшем случае null и какой нить 1900 год ) |
13 июл 16, 15:48 [19404936] Ответить | Цитировать Сообщить модератору |
schi Member Откуда: Москва Сообщений: 2601 |
А что вы делаете с неполными днями рождения и зачем они хранятся ? |
||
13 июл 16, 18:05 [19405756] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
schi, постом выше -- конспирируют возраст женщин. тогда вроде и завернуть анкету за незаполненностью нельзя, и подарок на ДР мадам получит. и вечная молодость, да |
13 июл 16, 18:11 [19405810] Ответить | Цитировать Сообщить модератору |
ппп-пп
Guest |
В принципе использование неполных дат считается нормальной практикой при работе с людьми. В штатах такое много где есть. Вы обращаетесь к человеку и просите предоставить его данные. Полнота данных, называть ли только год, месяц или число - это решение человека. Особенно это распространено во всякой спонсорской деятельности. |
||||
13 июл 16, 18:40 [19406003] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
В порядке расширения кругозора: а 3 буквы от фамилии предоставить там тоже нормально? |
||
13 июл 16, 19:02 [19406108] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1814 |
Если структура неполная, то храните как INT 19980823 199710 1994 |
13 июл 16, 23:46 [19406845] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
А 2003 это год 2003 или 20/03? |
||
13 июл 16, 23:50 [19406858] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
Вернее, 1204. Это yyyy или mmdd? а то вроде 20/03 превращается в 302. Вообще даже 302 уже замечательно, когда ищут на месяц = 03. Вроде ж сам ТС признался, что поиск по каждой компоненте даты может быть, так чего еще страдать? 3 поля и вперёд |
13 июл 16, 23:59 [19406876] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Если INT, то тогда лучше 19980823 19971000 19940000 Соответственно 20/03 (????/20/03) будет 2003 |
||
14 июл 16, 02:31 [19407063] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
То, о чем Вы пишете - это не дата рождения, а месяц и день рождения. Если у автора " есть неполные даты рождения: без дня, без месяца", то нельзя хранить такие значения строкой, необходимо три столбца - год, месяц и день. Дата - атомарное значение, в данном же случае в поле хранятся не атомарные, что приводит к конфликту с требованиями первой нормальной формы. |
||
14 июл 16, 02:45 [19407074] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2395 |
почему нельзя то? если принимаем, что какой нить 1901 (или 3030) год - не год, а признак "не указания года", то можно. и не надо лишние структуры городить. не говорю что это лучшее решение, но как вариант - почему бы и нет? |
||
14 июл 16, 10:49 [19407784] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
First normal form
типа если хотим следовать теории и иметь таблицу в первой нормальной форме, то атрибуты дожны быть *неделимыми*. и если у большинства из нас дата это и есть неделимый атрибут, то у ТС это не так, потому что у него поиск идет и по дню, и по месяцу, и по году. причем каждый из атрибутов может отсутствовать. так что "по всем правилам" ему положено сделать 3 столбца. --------------------------- теперь надо у него спросить, а что в таблице-то 260 млн строк, как в соседней теме, или там и миллиона нет? на чем экономите уже второй день? |
||||||
14 июл 16, 11:02 [19407860] Ответить | Цитировать Сообщить модератору |
0-0
Guest |
Очень просто - добавить еще и битовое поле, в котором помечать "левых" |
||||
14 июл 16, 11:21 [19408007] Ответить | Цитировать Сообщить модератору |
schi Member Откуда: Москва Сообщений: 2601 |
"Я нашел, как применить здесь нестирающиеся шины из полиструктурного волокна с вырожденными аминными связями и неполными кислородными группами. Но я не знаю пока, как использовать регенерирующий реактор на субтепловых нейтронах. Миша, Мишок! Как быть с реактором?" Навеяло :) |
||
14 июл 16, 11:33 [19408107] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1814 |
Не суть.. неполные даты хранят как INT, а с какой стороны нули это уже от задачи... Для выпуска авто например, важнее год, чем день... |
||||
14 июл 16, 23:40 [19411637] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |