2012-06-07 20 views
8

Teniendo en cuenta:PostgreSQL: Condicional restricción única

---------------------------------- 
     vin  | driver | is_owner 
--------------+--------+---------- 
231431cxzv87 | bob | true 
231431cxzv87 | jeff | false 
231431cxzv87 | greg | false 
32342klj234s | jeff | true 

¿Hay una manera de añadir una restricción de modo que sólo hay un propietario por vin?


Editar: He encontrado this question.
¿Está agregando un partial unique index diseñado para este propósito?

+0

Sí, un índice único parcial es lo que necesita. –

Respuesta

13

Sí índice parcial es su elección.

create unique index unique__vin on table (vin) where is_owner; 

Aquí el índice cubre solo las filas donde is_owner es verdadero y dentro de este filas el vin debe ser único.

+0

¿Alguna idea de por qué no hay una convención de restricción/verificación, en comparación con el uso de un índice? – vol7ron

+0

@ vol7ron: probablemente porque una restricción se aplica (por definición) siempre a todas las filas de una tabla. –

+0

AFAIK agregar cualquier restricción requeriría una tabla de consulta al verificar la exclusividad de vin. La consulta de la tabla daría lugar a la exploración de índice. Aún usará un índice, sin embargo, creo que cada cheque le costaría más puntos. – kworr

Cuestiones relacionadas