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

Andrei andrei.protasovitski на gmail.com
Пт Окт 28 06:17:23 PDT 2011


28 октября 2011 г. 15:02 пользователь Михаил Шогин <mshogin на 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 означает "отсутсвие данных",
только "отсутсвие данных" и ничего, кроме "отсутствия данных". Разработчики,
работающие с базами данных, должны понимать, что "отсутсвие данных" не может
быть использовано как "данные".

В этом конкретном случае "запись недоступна" есть некоторые вполне
определённые данные, и для этого статуса должно быть определено полне
конкретное значение.


>  выбираем идентификаторы всех доступных сущностей
>
> SQL
> select en.n
>   from entities en
> where en.status = 0
>
> план выполнения
>
>  INDEX FAST FULL SCAN INDEX ENTITIES$N$STATUS
>
> ORM
> entities = Entity.objects.filter( status = 0 )
>

Про указание колонок уже упомянули.


> получится запрос
> select en.*
>   from entities en
> where en.status = 0
>
> план
> TABLE ACCESS FULL
>
> профит на лицо
> + ко всему прочему следует отметить что записи со status = null в индекс не
> попадут, так что профит еще больше чем просто "на лицо"
>
> Также можно построить индекс в который попадут только недоступные сущности
> и выбирать используя этот индекс
>
>

-- 
Andrei Protasovitski
< andrei[dot]protasovitski[at]gmail[dot]com >
Diemen, Netherlands
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20111028/e144db2b/attachment.html>


Подробная информация о списке рассылки Moscow-pm