Ing. Esneiker Enriquez Cabrera escribió:
> Hola a todos.
> 
> Estoy usando postgres 9.1 donde tengo algunas tablas en las cuales quiero
> crear restricciones de unicidad en algunas columnas, por ejemplo que el
> campo nombre no permita valores duplicados. El caso es que el gestor me deja
> guardar los valores tales como Nombre uno y nombre uno porque los maneja
> como valores diferentes, cuando desde el punto de vista del negocio
> representan el mismo valor. ¿Cuál sería la forma más eficiente de hacer
> esto?

Las restricciones UNIQUE sólo permiten nombres de columna, no
expresiones; pero puedes usar una restricción EXCLUSION:

alvherre=# create table esneiker (nombre text);
CREATE TABLE

alvherre=# alter table esneiker add constraint nombre_unico exclude 
(upper(nombre) with =);
ALTER TABLE

alvherre=# insert into esneiker values ('nombre uno');
INSERT 0 1

alvherre=# insert into esneiker values ('nombre Uno');
ERROR:  llave en conflicto viola restricción por exclusión «nombre_unico»
DETALLE:  La llave (upper(nombre))=(NOMBRE UNO) está en conflicto con la llave 
existente (upper(nombre))=(NOMBRE UNO).
alvherre=# 


Me imagino que también querrás agregar algo que elimine los espacios en
blanco (y tabs, saltos de línea, etc, o más generalmente cualquier cosa
que no sean letras, y quizás puntos) al principio y al final, y los
espacios duplicados al medio; que no deje pasar " nombre Uno" ni "nombre
uno".

Ahora, qué pasa si llegan dos personas que se llaman Esneiker Enríquez.
Espero que no las obligues a usar la misma cuenta.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a