From: | Dmitriy Igrishin <dmitigr(at)gmail(dot)com> |
---|---|
To: | Nikolay Samokhvalov <samokhvalov(at)gmail(dot)com> |
Cc: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>, pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле |
Date: | 2011-03-12 23:04:08 |
Message-ID: | AANLkTi=EOrtPdLHJP8V8MPRtup5PX=QRDHvjmC-EnYCH@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
13 марта 2011 г. 2:00 пользователь Nikolay Samokhvalov <
samokhvalov(at)gmail(dot)com> написал:
> 2011/3/13 Dmitry E. Oboukhov <unera(at)debian(dot)org>
>
> Пользователь вводит некие данные.
>>
>> Если он их не вводил, там NULL. Если он вводит эти данные, то они
>> должны быть уникальными между всеми введенными данными.
>>
>> что-то я не пойму как построить ограничение, которое будет отслеживать
>> уникальность только между теми значениями что не NULL.
>>
>> индекс построил
>>
>> CREATE UNIQUE INDEX "tbli" ON "tbl" ("col") WHERE "col" IS NOT NULL;
>>
>> а как построить CONSTRAINT? не хочется RULE приделывать
>>
>>
> UNIQUE INDEX это уже и есть ограничение целостности (constraint).
>
> IS NOT NULL можно смело опустить, т.к. проверки на уникальность в
> юник-индексе и так всегда проводятся по NOT NULL значениям.
>
Верно, только благодаря частичному индексу удается сократить его размер
как раз за счет того, что в него не войдут NULL-значения.
Поэтому, если не требуется делать из столбца ключ, то по соображениям
эффетивности следует использовать частичны индекс.
--
// Dmitriy.
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitriy Igrishin | 2011-03-12 23:11:04 | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле |
Previous Message | Nikolay Samokhvalov | 2011-03-12 23:00:19 | Re: [pgsql-ru-general] Частично уникальное поле |