Professional Documents
Culture Documents
15-marzo-2017
Restriccin "check
La restriccin "check" especifica los valores que acepta un campo, evitando que se ingresen
valores inapropiados.
Trabajamos con la tabla "libros" de una librera que tiene los siguientes campos: codigo, titulo,
autor, editorial, preciomin (que indica el precio para los minoristas) y preciomay (que indica el
precio para los mayoristas).
Los campos correspondientes a los precios (minorista y mayorista) se definen de tipo decimal(5,2),
es decir, aceptan valores entre -999.99 y 999.99. Podemos controlar que no se ingresen valores
negativos para dichos campos agregando una restriccin "check":
Este tipo de restriccin verifica los datos cada vez que se ejecuta una sentencia "insert" o "update",
es decir, acta en inserciones y actualizaciones.
Si la tabla contiene registros que no cumplen con la restriccin que se va a establecer, la restriccin
no se puede establecer, hasta que todos los registros cumplan con dicha restriccin.
La condicin puede hacer referencia a otros campos de la misma tabla. Por ejemplo, podemos
controlar que el precio mayorista no sea mayor al precio minorista:
Por convencin, cuando demos el nombre a las restricciones "check" seguiremos la misma
estructura: comenzamos con "CK", seguido del nombre de la tabla, del campo y alguna palabra con
la cual podamos identificar fcilmente de qu se trata la restriccin, por si tenemos varias
restricciones "check" para el mismo campo.
Un campo puede tener varias restricciones "check" y una restriccin "check" puede incluir varios
campos.
Si un campo permite valores nulos, "null" es un valor aceptado aunque no est incluido en la
condicin de restriccin.
PROBLEMA
Una playa de estacionamiento almacena los datos de los vehculos que ingresan en la
tabla llamada "vehiculos":( numero serial, patente char(6), tipo char(4),
fechahoraentrada timestamp, fechahorasalida timestamp, primary key(numero) )
1- Agregue una restriccin "check" para asegurarse que la fecha de entrada a la playa
no sea posterior a la fecha y hora actual
Restriccin unique
Las restricciones aplicadas a tablas aseguran valores nicos para cada registro.
Anteriormente se reviso la restriccin "primary key", otra restriccin para las tablas es "unique".
La restriccin "unique" impide la duplicacin de claves alternas (no primarias), es decir, especifica
que dos registros no puedan tener el mismo valor en un campo. Se permiten valores nulos. Se
pueden aplicar varias restricciones de este tipo a una misma tabla, y pueden aplicarse a uno o
varios campos que no sean clave primaria.
Se emplea cuando ya se estableci una clave primaria (como un nmero de legajo) pero se
necesita asegurar que otros datos tambin sean nicos y no se repitan (como nmero de
documento).
Por convencin, cuando demos el nombre a las restricciones "unique" seguiremos la misma
estructura: "UQ_NOMBRETABLA_NOMBRECAMPO". Quiz parezca innecesario colocar el
nombre de la tabla, pero cuando empleemos varias tablas ver que es til identificar las
restricciones por tipo, tabla y campo.
Recuerde que cuando agregamos una restriccin a una tabla que contiene informacin,
PostgreSQL controla los datos existentes para confirmar que cumplen la condicin de la restriccin,
si no los cumple, la restriccin no se aplica y aparece un mensaje de error. En el caso del ejemplo
anterior, si la tabla contiene nmeros de documento duplicados, la restriccin no podr
establecerse; si podr establecerse si tiene valores nulos.
PROBLEMA
Trabajamos con la tabla "alumnos": (legajo char(4) not null, apellido varchar(20),
nombre varchar(20), documento char(8) )
1- Agregamos una restriccin "primary" para el campo "legajo":
EJEMPLO:
Tabla "libros" de una librera clave primaria:( codigo int not null, titulo varchar(40), autor varchar(30),
editorial varchar(15), precio decimal(6,2) )
Definimos una restriccin "primary key" para nuestra tabla "libros" para asegurarnos que cada libro
tendr un cdigo diferente y nico:
select *
from information_schema.table_constraints
where table_name = 'libros';
Aparecen 2 restricciones, 1 "check" y 1 "primary key".
select *
from information_schema.table_constraints
where table_name = 'libros';