[Moscow.pm] Размышления на тему ORM и вообще работы с БД

Peter Rabbitson rabbit+moscowpm на rabbit.us
Пт Окт 28 06:41:11 PDT 2011


On Fri, Oct 28, 2011 at 05:37:00PM +0400, Михаил Шогин wrote:
> >
> > 28 октября 2011 г. 15:02 пользователь Михаил Шогин <mshogin at gmail.com>написал:
> >
> >> У меня есть небольшой пример
> >> ( пример связан с 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