[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Perl or Python?



> > Думаю, это не принципиально, можно придумать ситуацию, когда запись таки
> > > должна появиться. Например, если подобное поле в таблице не одно, а их
> > > больше, и в другом поле за сегодня существует некое число.
> >
> > Можно придумать ситуацию, когда такая _оптимизация_ оправдана.  А ситуацию,
> > когда запись таки _должна_ появиться, придумать нельзя.
> >
> 
> Хорошо - есть таблица людей, где есть поле "серия паспорта", но некоторые из
> людей еще не имеют его по возрасту. Надо для каждого атрибута заводить
> отдельную таблицу пересечений - из-за того, что атрибут у кого-то может
> просто _отсутствовать_?

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

> > Потому что ... представь себе ситуацию, когда тебе нужно посчитать среднюю
> > минимальную температуру за месяц.  Если у тебя в месяце было три дня, когда
> > никто в отделении не лежал.  Задача поставлена корректно, имеет вполне
> > понятное решение.
> 
> Нет, для таблицы температура вычисляется не средняя "за месяц", а средняя на
> дискретном множестве записей.

Задача ставится так, как я сказал.  Заказчиком.  Дословно.

>  Как будем лечить, если у тебя есть поле типа float с
> > возможным null?  Будем писать "and minTerm is not null"?  А если нужно в
> > том
> > же запросе выдать еще и агрегат по другому полю, которое в эти дни было не
> > null?  Писать самопальный average?  Хотя штатный average наверняка null'ы
> > игнорирует, как и нужно для этой задачи...
> 
> Полагаю, что не только average игнорирует, а вообще любая функция в SQL,
> равно как и все условия после WHERE.

Это - точно неправда.  Условие ее не игнорирует.  Условие имеет "булевское
значение NULL", если на такое натыкается.  А average, если реализована
правильно, будет именно что игнорировать.  Разница будет заметна, если
в одном запросе посчитать average по двум полям, у которых NULL в разных
записях.

С другой стороны, NULL и, как следствие, average не различает ситуации
"значение неизвестно" и "значения нет и быть не должно".  А по-хорошему в
первом случае average должна выдавать ошибку "не все необходимые данные
известны".  В то время как во втором должна честно считать среднее по тем
записям, у которых это значение есть.

-- 
Что-то я не тем полушарием думаю...
 -- (С)энта


Reply to: