En entradas anteriores se ha hablado del lenguaje de consulta estructurada, que es un tipo de lenguaje específico del dominio utilizado en programación, diseñado para administrar, y recuperar información de sistemas de gestión de bases de datos relacionales.
Este lenguaje permite al usuario almacenar, recuperar, actualizar y eliminar datos, además de definir y administrar la estructura de una base de datos. Está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se
combinan en las instrucciones para crear, actualizar y manipular las bases de datos.
Dos de los elementos básicos de las bases de datos son la clave primaria ["Primary Key" ("PK"), en inglés] y clave secundaria ["Foreign Key" ("FK"), en inglés], que se suelen definir durante el modelado y creación de una base de datos, o bien de alguna nueva tabla de la misma.
Se entiende por clave primaria a un campo o a una combinación de campos que identifica de forma única a cada fila de una tabla. Una clave primaria comprende de esta manera una columna o conjunto de columnas. No puede haber dos filas en una tabla que tengan la misma clave primaria.
El modelo relacional, según se lo expresa mediante cálculo relacional y álgebra relacional, no distingue entre clave primaria y otros tipos de claves. Las claves primarias fueron agregadas al estándar SQL principalmente para conveniencia del programador. En una arquitectura entidad-relación, la clave primaria permite las relaciones de la tabla que tiene la clave primaria con otras tablas que van a utilizar la información de esta tabla.
Una clave primaria posee las siguientes características principales:
- Unicidad: Cada fila de una tabla tiene un valor único en la clave primaria.
- No nula: Los valores en una clave primaria no pueden ser nulos o estar vacíos.
- Identificador único: Permite referenciar registros completos de forma inequívoca.
- Unicidad por tabla: Solo puede haber una única clave primaria por tabla, aunque esta puede ser simple (una columna) o compuesta (varias columnas).
- Referencia a otras tablas: Se utiliza como clave foránea en otras tablas para establecer relaciones entre ellas.
Las claves primarias están definidas el estándar ANSI SQL, mediante la directiva PRIMARY KEY. La sintaxis para aplicar tal directiva a una tabla existente está definida:
ALTER TABLE <identificador_de_la_tabla>
ADD [ CONSTRAINT <identificador_de_la_directiva> ]
PRIMARY KEY ( <nombre_de_columna> {, <nombre_de_columna>}... )
La clave primaria puede especificarse directamente o de forma inmediata en el momento de la creación de la tabla también. En el estándar SQL, las claves primarias pueden estar compuestas por una o más columnas. Cada columna que forme parte de la clave primaria queda implícitamente definida como "NOT NULL". Nótese que algunos sistemas de bases de datos requieren que se marque explícitamente a las columnas de clave primaria como "NOT NULL".
En el caso en que la clave primaria sea una sola columna, ésta puede marcarse como tal por medio de la siguiente sintaxis:
CREATE TABLE nombre_de_la_tabla (
id_col INT PRIMARY KEY,
col2 CHARACTER VARYING(20),
...
)
Aunque normalmente la clave primaria incluye un solo campo, existe también la clave primaria compuesta, que es un conjunto de dos o más columnas que juntas identifican de manera única a cada registro en una tabla. Es especialmente útil cuando no hay una sola columna que pueda servir como identificador único.
Clave única
La clave única es similar a una clave primaria, pero permite valores nulos y permite múltiples filas con el mismo valor. Se utiliza para garantizar que ciertos datos sean únicos dentro de una tabla, pero no necesariamente para identificar de forma única cada registro.
Su definición es sintácticamente muy similar a la de clave primaria:
ALTER TABLE <identificador_de_la_tabla>
ADD [ CONSTRAINT <identificador_de_la_directiva> ]
UNIQUE ( <nombre_de_columna> {, <nombre_de_columna>}... )
Por otra parte, las claves únicas pueden definirse como parte de la sentencia CREATE TABLE, siendo su sintaxis:
CREATE TABLE nombre_de_la_tabla (
id_col INT,
col2 CHARACTER VARYING(20),
cla_col SMALLINT,
...
CONSTRAINT clave_única UNIQUE(cla_col),
...
)
O bien:
CREATE TABLE nombre_de_la_tabla (
id_col INT PRIMARY KEY,
col2 CHARACTER VARYING(20),
...
cla_col SMALLINT UNIQUE,
...
)
Una clave única se diferencia, principalmente, de una clave primaria en:
- Nulabilidad: Las claves únicas pueden aceptar valores nulos, mientras que las claves primarias no.
- Uso: Las claves primarias se utilizan principalmente para identificación única, mientras que las claves únicas se utilizan para asegurar la unicidad de ciertos datos sin necesidad de identificar de forma única cada registro.
Del mismo modo que sucede con la la clave primaria, una clave única compuesta utiliza un conjunto de columnas para garantizar la unicidad de los datos, permitiendo valores nulos en cualquiera de las columnas.
Por lo tanto, se emplea una clave primaria cuando sea necesario identificar de forma única cada registro en una tabla, ya que es esencial para establecer relaciones entre tablas; mientras que una clave única se usa cuando el usuario necesite asegurarse de que ciertos datos sean únicos dentro de una tabla, pero no necesariamente para identificar de forma única cada registro.
CLAVE SECUNDARIA
También denominada clave foránea y clave ajena, se trata de una limitación referencial entre dos tablas. La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la tabla referendo deben ser la clave primaria u otra clave candidata en la tabla referenciada.
Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla referenciada. Así, una fila en la tabla referendo no puede contener valores que no existen en la tabla referenciada. De esta forma, las referencias pueden ser creadas para vincular o relacionar información. Esto es una parte esencial de la normalización de base de datos. Múltiples filas en la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la tabla referenciada. Mayormente esto se ve reflejado en una relación uno (tabla maestra o referenciada) a muchos (tabla hija o referendo).
La tabla referendo y la tabla referenciada pueden ser la misma, esto es, la clave foránea remite o hace referencia a la misma tabla (autorreferencia o clave foránea recursiva). Una tabla puede tener múltiples claves foráneas y cada una puede tener diferentes tablas referenciadas. Cada clave foránea es forzada independientemente por el sistema de base de datos. Por tanto, las relaciones en cascada entre tablas pueden realizarse usando claves foráneas. Configuraciones impropias de las claves foráneas o primarias o no forzar esas relaciones son frecuentemente la fuente de muchos problemas para la base de datos o para el modelado de las mismas.
La sintaxis para definir una clave secundaria es:
ALTER TABLE <nombre tabla>
ADD [ CONSTRAINT <nombre restricción> ]
FOREIGN KEY ( <expresión columna> [, <expresión columna>]... )
REFERENCES <nombre tabla> [ ( <expresión columna> [, <expresión columna>]... ) ]
[ ON UPDATE <acción> ]
[ ON DELETE <acción> ];
Debido a que el sistema de gestión de base de datos hace cumplir las restricciones de referencia, se debe garantizar la integridad de los datos si las filas de la tabla maestra se van a eliminar (o van a ser actualizadas). Si todavía existen filas dependientes en tablas referendo, esas referencias tienen que ser consideradas. Desde el 2003, en SQL existen 5 acciones referenciales para estos casos:
- CASCADE: Cada vez que se eliminan o se actualizan las filas de la tabla maestra, se eliminarán o actualizarán las respectivas filas de la tabla hija, lo que se conoce eliminación o actualización en cascada.
- RESTRICT: El valor de una columna de la tabla maestra no puede ser actualizado o borrado cuando existe una fila en una tabla hija que hace referencia al valor de la columna de la tabla maestra. Del mismo modo, una fila no se puede eliminar, siempre que haya una referencia a la misma a partir de una tabla hija.
- NO ACTION: Realiza la comprobación de integridad referencial después de tratar de modificar la tabla. Si la comprobación de integridad referencial falla, la sentencia UPDATE o DELETE dará lugar a un error.
- SET DEFAULT, SET NULL: Generalmente, la acción usada por el Sistema de gestión de bases de datos {"SGBD"; ["Data Base Management System" ("DBMS"), en inglés]} para SET NULL o SET DEFAULT es el mismo para ambos ON DELETE u ON UPDATE: El valor de la referencia afectada se cambia a "NULL" para SET NULL, y con el valor predeterminado especificado por SET DEFAULT. Con SET NULL, cada vez que se elimina o actualiza el registro en la tabla padre, establece a "NULL" las columnas de la clave secundaria en la tabla hija, para ello las columnas de la tabla hija NO han de haber sido definidas como "NOT NULL".
Espero que la presente entrada haya sido interesante para el lector. Si es así, aguardo que éste la comente y/o la comparta, por favor.

No hay comentarios:
Publicar un comentario
Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.