On Fri, Oct 28, 2011 at 05:37:00PM +0400, Михаил Шогин wrote: > > > > 28 октября 2011 г. 15:02 пользователь Михаил Шогин > > <[email protected]>написал: > > > >> У меня есть небольшой пример > >> ( пример связан с ORM Django, думаю что на ORM Perl также распространяется > >> ) > >> > >> Имеем след таблицу > >> create table entities ( > >> n number, > >> title varchar2(100), > >> dsc clob, > >> status number, > >> fd date > >> ) > >> > >> создаем индексы > >> create unique index ENTITIES$N on books ( n ) > >> create index ENTITIES$N$STATUS on books ( n, status ) > >> > >> status - доступность сущности ( 0 - доступна , null - не доступна ) > >> > > > > Объясните, пожалуйста, разработчикам, что null означает "отсутсвие данных", > > только "отсутсвие данных" и ничего, кроме "отсутствия данных". Разработчики, > > работающие с базами данных, должны понимать, что "отсутсвие данных" не может > > быть использовано как "данные". > > > > В этом конкретном случае "запись недоступна" есть некоторые вполне > > определённые данные, и для этого статуса должно быть определено полне > > конкретное значение. > > > NULL - тоже значение. > > Объяснение простое, > Поле выставляется в значение NULL для не попадания в индекс. > > Согласен что было бы лучше сделать так > status - доступность сущности ( 1 - доступна , 0 - не доступна ) > > однако в таком случае пришлось бы строить индекс > > create index ENTITIES$N$STATUSACTIVE on books (n, case when status = 1 then > 1 else null end ) > > но в таком случае, для того что бы пойти по индексу, придется использовать > запрос вида > > select en.n > from entities en > where case > when en.status = 1 > then 1 > else null > end = 1 > > как такое сделать используя ORM, я честно не знаю
Сделать можно... но ЗАЧЕМ?! Чем недостаточен SELECT en.n FROM entities en WHERE en.status = 1 -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
