Llaves únicas en bases de datos usando Kata Kuntur

Introducción

En éste artículo se asume que se tiene conocimiento del uso básico de Kata Kuntur, en caso de no ser así es recomendable revisar primero este otro artículo. Adicionalmente, el gestor utilizado es PostgreSQL, sin embargo puedes usar cualquier otro que esté soportado por Kata Kuntur.

Uno de los cambios más resaltantes en la versión 2.5 de Kata Kuntur es el manejo de las llaves únicas (UNIQUE KEY). A partir de ésta versión se pueden agrupar llaves únicas con uno o varios atributos a la vez.

En éste pequeño artículo daré alguna introducción sobre las llaves únicas, adicionalmente del manejo de las mismas en Kata Kuntur.

Temas

  • Introducción a llaves unicas
  • Llaves únicas en Kata Kuntur
    • Llaves únicas simples
    • Llaves únicas compuestas

 

Introducción a las llaves únicas

En la mayoría de gestores de base de datos, las llaves únicas evitan que se registre más de un mismo valor en la columna, es decir, sólo podrán haber distintos datos dentro de los registros de la columna, un dato que ya éste en un registro, no se podrá insertar en otro.

Imaginemos la entidad CLIENTE, con los atributos ID_CLIENTE, NOMBRES, APELLIDOS, DIRECCIÓN, TELÉFONO CELULAR:

El atributo id_cliente es del tipo llave primaria (nótese por el símbolo # al lado izquierdo del nombre del atributo), por lo cual, si yo registro un cliente con ID CL001, no podré registrar otro con la misma ID.

Ahora pasamos nuestro diagrama a PostgreSQL, y lo ejecutamos con el PgAdmin para realizar las pruebas del caso.

En caso de que desees probar en otro gestor de base de datos como MySQL, Oracle, SQLServer, utiliza tu administrador favorito.
-- Created with Kata Kuntur - Data Modeller
-- Version: 2.5.2
-- Web Site: http://katakuntur.jeanmazuelos.com/
-- If you find a bug, please report it at:
-- http://pm.jeanmazuelos.com/katakuntur/issues/new

-- Database Management System: PostgreSQL
-- Diagram: Llaves Unicas
-- Author: Jean Mazuelos 
-- Date and time: 24/05/2014 11:49:53

--GENERATING TABLES
CREATE TABLE "CLIENTE" (
	"id_cliente" VARCHAR(5) NOT NULL ,
	"nombres" VARCHAR(200) NOT NULL ,
	"apellidos" VARCHAR(200) NOT NULL ,
	"direccion" VARCHAR(200) NOT NULL ,
	"telefono_celular" VARCHAR(12) NOT NULL ,
	PRIMARY KEY("id_cliente")
);

Ahora intentemos insertar a dos clientes con la mismo valor(dato) para id_cliente:

INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI01', 'Jean', 'Mazuelos Saavedra', 'Av. Desierta S/N', '999480896');
INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI01', 'Luis', 'Rosales Morales', 'Av. Software 145', '999480896');

Al ejecutar el SCRIPT, veremos el siguiente error:

Sólo se ha registrado el primer cliente, el segundo no debido a que la id_cliente CLI01 ya ha sido registrada en la primera sentencia INSERT INTO.

Básicamente, éste es el funcionamiento de las llaves únicas, es más , las llaves primarias son por defecto llaves únicas.

Llaves únicas

Las llaves únicas funcionan exactamente igual que las llaves primarias, evitan que se registren un dato en mas de una fila de una tabla dentro de la columna especificada. En ésta sección veremos cómo usar Kata Kuntur para especificar las llaves únicas en nuestro diagrama.

Llaves únicas simples

Definitivamente uno de los atributos que debería ser ÚNICO , tomando en cuenta la entidad CLIENTE anterior, debería ser telefono_celular. No sería lógico tener dos clientes con el mismo número de teléfono celular. Para hacer que el atributo telefono_celular(columna en la base de datos) impida que se registren números de teléfonos celular duplicados debemos asignar el atributo Llave Única a 1 desde el editor de entidades:

Si deseamos asignarle a otro atributo una llave única, simplemente debemos seleccionar otro número que no haya sido escogido anteriormente.

Colocar el valor a 1 - se puede usar cualquier número - para el atributo Llave Única hará que Kata Kuntur genere una restricción del tipo única para el atributo.  Una vez que cerremos la ventana de edición de atributos veremos a la entidad CLIENTE de la siguiente manera:

Para exportar nuevamente la entidad CLIENTE con el nuevo cambio debemos borrarla primero de la base de datos:

DROP TABLE "CLIENTE";

Ahora exportemos el diagrama:

 

-- Created with Kata Kuntur - Data Modeller
-- Version: 2.5.2
-- Web Site: http://katakuntur.jeanmazuelos.com/
-- If you find a bug, please report it at:
-- http://pm.jeanmazuelos.com/katakuntur/issues/new

-- Database Management System: PostgreSQL
-- Diagram: Llaves Unicas
-- Author: Jean Mazuelos
-- Date and time: 24/05/2014 22:39:41

--GENERATING TABLES
CREATE TABLE "CLIENTE" (
	"id_cliente" VARCHAR(5) NOT NULL ,
	"nombres" VARCHAR(200) NOT NULL ,
	"apellidos" VARCHAR(200) NOT NULL ,
	"direccion" VARCHAR(200) NOT NULL ,
	"telefono_celular" VARCHAR(12) NOT NULL ,
	PRIMARY KEY("id_cliente"),
	UNIQUE ("telefono_celular")
);


Ahora probemos insertando 2 clientes pero con el mismo número de celular:

INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI01', 'Jean', 'Mazuelos Saavedra', 'Av. Desierta S/N', '994580456');
INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI02', 'Luis', 'Rosales Morales', 'Av. Software 145', '994580456');

Vemos que ahora el gestor de base de datos no nos permite insertar al segundo cliente(CLI02) debido a que su número de teléfono celular ya ha sido usado por el anterior cliente:

¡Listo!, con esto ya evitamos que se dupliquen los números celulares de los clientes.

Llaves únicas compuestas

Un llave única compuesta es aquella que esta conformada por más de un atributo. Los datos por cada uno de los atributos se pueden duplicar, pero la combinación entre los datos de los atributos no es permitido. Usaremos llaves compuestas cuando deseamos generar una restricción en varios atributos de manera conjunta.

En nuestra entidad cliente podemos restringir el nombre y apellidos, no tendría sentido que existieran dos clientes llamados Jean Mazuelos, ¿verdad?. Si creáramos una restricción por cada atributo tendríamos un resultado como el de la siguiente tabla:

Llaves únicas de manera independiente
Atributo: NombresAtributo: ApellidosResultado al insertar en la base de datos
JeanMazuelosCorrecto.
JulioCisnerosCorrecto.
JeanMazuelosIncorrecto, el nombre Jean ya ha sido usado.
LuisMazuelosIncorrecto, el apellido Mazuelos ya ha sido usado.

No no molestaremos en hacer un ejemplo para demostrar los resultados de la tabla anterior. Sin embargo para el manejo de los nombres y apellidos debemos hacerlo de manera conjunta, por lo tanto debemos crear una llave compuesta entre los dos atributos.

Para crear una llave compuesta en Kata Kuntur, le asignaremos el número de llave única 2 a ambos atributos:

¡Así de fácil!, si deseas crear una llave compuesta debes seleccionar el mismo número para los atributos que desees que formen la llave compuesta.

Ahora exportemos el diagrama para generar nuevamente la tabla CLIENTE:

No olvides eliminar la tabla CLIENTE antes de usar el siguiente código para generar la tabla CLIENTE que acabamos de modificar.
-- Created with Kata Kuntur - Data Modeller
-- Version: 2.5.2
-- Web Site: http://katakuntur.jeanmazuelos.com/
-- If you find a bug, please report it at:
-- http://pm.jeanmazuelos.com/katakuntur/issues/new

-- Database Management System: PostgreSQL
-- Diagram: Llaves Unicas
-- Author: Jean Mazuelos
-- Date and time: 25/05/2014 0:24:20

--GENERATING TABLES
CREATE TABLE "CLIENTE" (
	"id_cliente" VARCHAR(5) NOT NULL ,
	"nombres" VARCHAR(200) NOT NULL ,
	"apellidos" VARCHAR(200) NOT NULL ,
	"direccion" VARCHAR(200) NOT NULL ,
	"telefono_celular" VARCHAR(12) NOT NULL ,
	PRIMARY KEY("id_cliente"),
	UNIQUE ("telefono_celular"),
	UNIQUE ("nombres","apellidos")
);


Ahora probemos insertando algunos registros

INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI01', 'Jean', 'Mazuelos Saavedra', 'Av. Desierta S/N', '994580456');
INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI02', 'Luis', 'Mazuelos Saavedra', 'Av. Software 145', '99458564');
INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI03', 'Jean', 'Rosales Quiroz', 'Av. Software 147', '90428564');

Los 3 anteriores clientes se deben haber registrado sin problemas, debido a que la combinación NOMBRES-APELLIDOS no se ha llegado a repetir. Ahora intentemos registrar el siguiente cliente:

 INSERT INTO "CLIENTE"(id_cliente, nombres, apellidos, direccion, telefono_celular)
     VALUES ('CLI04', 'Jean', 'Rosales Quiroz', 'Av. Software 178', '904289004');

Al intentar registrar el cliente con id CLI04 el gestor de base de datos nos mostrará un error debido a que la combinación de NOMBRE-APELLIDOS Jean Rosales Quiroz ya ha sido registrada para el cliente 3(CLI03) :

Conclusiones

El uso de las llaves únicas en Kata Kuntur es muy fácil de usar. Su uso en los diagramas dependerá del modelos y los casos que desarrolles.

Glosario de términos

Entidad:  En Kata Kuntur se llama entidad a aquella que agrupa atributos que la describen. Las entidades serán convertidas a TABLAS cuando se exporte el diagrama a una base de datos.

Atributo: Es una característica de una entidad. Los atributos se convierten en columnas al momento de que el diagrama es exportado a una base de datos.

PgAdmin: Herramienta administradora de base de datos para el motor PostgreSQL

Actividad: