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

Oleg Kostyuk cub.uanic на gmail.com
Пт Окт 28 08:11:13 PDT 2011


28 октября 2011 г. 18:00 пользователь Andrei
<andrei.protasovitski на gmail.com> написал:
> 28 октября 2011 г. 15:37 пользователь Михаил Шогин <mshogin на gmail.com>
> написал:
>>>
>>> Объясните, пожалуйста, разработчикам, что null означает "отсутсвие
>>> данных", только "отсутсвие данных" и ничего, кроме "отсутствия данных".
>>> Разработчики, работающие с базами данных, должны понимать, что "отсутсвие
>>> данных" не может быть использовано как "данные".
>>>
>>> В этом конкретном случае "запись недоступна" есть некоторые вполне
>>> определённые данные, и для этого статуса должно быть определено полне
>>> конкретное значение.
>>>
>> NULL - тоже значение.
>> Объяснение простое,
>> Поле выставляется в значение NULL для не попадания в индекс.
>
> Какой в этом смысл?
Вероятно, для уменьшения размера индекса. И таким образом - повышения
его селективности.

Лично мне, Андрей, ваша позиция понятна и я её всячески приветствую. Я
не против вас. Но реалии таковы, что в некоторых случаях бывает
выгодно и уместно идти на всякого рода трюки. Если ситуация оценена
всесторонне и решение принималось взвешенно, а не просто потому что "в
прошлом проекте делал так и там всё было классно" - то наверное, такие
трюки уместны. Конечно, при наличии не только обоснования, но и
внутрипроектной документации. Единственное "но" - в данном конкретнос
случае я бы предпочёл пару (NULL || 1) вместо (NULL || 0), чисто из
"перловских" соображений.

Андрей, я буду рад, если вы предложите лучшее решение, достигающее
_всех_ техже целей.


>> Согласен что было бы лучше сделать так
>> 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
>
> A почему нельзя просто WHERE en.status = 1 ?
>
> --
> Andrei Protasovitski
> < andrei[dot]protasovitski[at]gmail[dot]com >
> Diemen, Netherlands
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
Sincerely yours,
Oleg Kostyuk (CUB-UANIC)


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