La unicidad de registros se obtiene -como se requiere en la primera forma normal– por medio de la llave primaria, pero las llaves secundarias (aquellas otras llaves candidatas) también pueden ser definidas dentro de la estructura de las tablas, de tal manera que el motor de bases de datos verifique que todos los registros mantengan congruencia con la llave primaria y las secundarias. Esto se logra por medio de la propiedad UNIQUE de los campos.
UNIQUE
Así como un campo puede aceptar valores nulos o puede tener un valor por default, también puede tener la propiedad UNIQUE para especificar que dicho campo no podrá tener valores repetidos en toda la tabla. Le da unicidad -como lo haría siendo una llave primaria- pero sin ser llave.
¿Cómo hacer campos UNIQUE en SQL Server?
En el CREATE TABLE
Al igual que con otras propiedades (NULL/NOT NULL, Default, etc.) se puede definir en cada campo que tendrá la propiedad de UNIQUE. He aquí un ejemplo de CREATE TABLE
CREATE TABLE revista ( clave smallint PRIMARY KEY, --LLave primaria ISBN varchar(18) NOT NULL UNIQUE, --ISBN que será único titulo varchar(100) NOT NULL, --No permite valores nulos editorial varchar (100) NULL, --Si permite valores nulos genero varchar(100) NULL, --Si permite valores nulos publicacion smalldatetime DEFAULT 2017 NULL CHECK (publicacion > 1950, --Si permite valores nulos, por default es 2017 y solo permite valores mayores a 1960 clasificacion varchar(20) NULL DEFAULT 'A', --Si permite valores nulos y el default es 'A' articulistas varchar (300) NULL DEFAULT '', --Si permite valores nulos y el default es una cadena vacía CONSTRAINT unique_tituloUnico UNIQUE (titulo,publicacion) );
En este ejemplo se definen dos llaves secundarias
- Uno con el campo ISBN (en la definición del campo de ISBN en la línea 4)
- Una llave secundaria formada por dos campos (titulo y publicacion) en un CONSTRAINT al final de la definición de todos los campos.
Además de la llave principal (formada por el campo clave) que no se podrá repetir en toda la tabla, tampoco se podrá repetir el valor de ISBN y la combinación de titulo+publicacion también será única e irrepetible.
En el ALTER TABLE
Si en la tabla original no se hubieran definido las propiedades de UNIQUE para ISBN y luego para titulo+publicacion, se hubiera podido establecer después por medio del comando ALTER TABLE de la siguiente manera
ALTER TABLE revista
ADD CONSTRAINT nombreDelConstraint UNIQUE (ISBN); --Para el campo ISBN
ALTER TABLE revista
ADD CONSTRAINT nombreDelConstraint UNIQUE (titulo,publicacion); --Para el UNIQUE compuesto