Este documento explica los diferentes tipos de restricciones en SQL, incluyendo UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK y NOT NULL. Describe cómo se usan estas restricciones para definir reglas sobre los valores permitidos en las columnas y garantizar la integridad referencial entre tablas. Incluye ejemplos de cómo aplicar estas restricciones usando las instrucciones CREATE TABLE y ALTER TABLE.
1. Bases de Datos Unidad VII Lenguaje SQL “ Lenguaje de Definición de Datos (DDL) – Restricciones” Sergio Sánchez Rios. Ingeniero en Informática – Licenciado en Informática Docente Jornada Parcial Universidad Viña del Mar
2.
3. Lenguaje de Definición de Datos (DDL) Introducción Los cinco tipos de restricciones son: CHECK FOREING KEY PRIMARY KEY UNIQUE NOT NULL Restricciones
4. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE La restricción UNIQUE asegura que una columna o un grupo de columnas no permitirán valores repetidos – en otras palabras, se impone la unicidad de los valores en la columna o el conjunto. Una restricción UNIQUE se puede utilizar en cualquier columna que no sea parte de una restricción PRIMARY KEY, que también impone valores únicos. Además, las restricciones UNIQUE se pueden usar en columnas que permitan valores nulos, mientras que las restricciones PRIMARY KEY no pueden. Los valores nulos son ignorados por la restricción UNIQUE. Una columna con una restricción UNIQUE puede referenciarse con una restricción FOREIGN KEY. Se permiten varias restricciones UNIQUE con tal que el numero total de restricciones es 249 no agrupadas (UNIQUE a una columna) y 1 agrupada (UNIQUE aun conjunto de columnas).
5. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Para crear una restricción UNIQUE en una tabla, se usa el comando CREATE TABLE o ALTER TABLE. Nomenclatura para creación UNIQUE en CREATE TABLE: UNIQUE no agrupado nombre_columna tipo_dato [Opcional: NOT NULL] UNIQUE CLUSTERED Ejemplo 1: Cree una tabla llamada Ejemplo_UNICO definida por la siguiente tupla: Ejemplo_UNICO (codigo: numeric, nombre: nvarchar (20)). Colocando el Campo codigo con una Restricción UNIQUE y NOT NULL. CREATE TABLE Ejemplo_UNICO ( codigo numeric NOT NULL UNIQUE CLUSTERED, nombre nvarchar(20) ) Compruebe la restricción UNIQUE insertando dos filas utilizando el mismo código.
6. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Nomenclatura para creación UNIQUE en CREATE TABLE: UNIQUE agrupado En este caso la restricción no es por una columna en particular, sino que por un conjunto de columnas. Por lo tanto la restricción se coloca después de haber definido todos los campos de la tabla y antes de cerrar la instrucción CREATE TABLE. Se utiliza para crear esta restricción la instrucción CONSTRAINT. Nomenclatura: CONSTRAINT nombre_restriccion UNIQUE NONCLUSTERED (campo1, …, campoN) NOTA: el nombre de la restricción UNIQUE se recomienda por norma que comience con UQ_nombre_restriccion.
7. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Nomenclatura para creación UNIQUE en CREATE TABLE: UNIQUE agrupado Ejemplo 2: Crear la tabla Ejemplo_UNICO_GR basada en la siguiente tupla: Eemplo_UNICO_GR (rut : numeric, digito: char(2),nombre: nvarchar(20)). El rut y digito deben ser no nulos y además en conjunto deben ser unicos. CREATE TABLE Ejemplo_UNICO_GR( rut numeric NOT NULL, digito char(2) NOT NULL, nombre nvarchar(20), CONSTRAINT UQ_rut_digito UNIQUE NONCLUSTERED (rut,digito) ) Compruebe la restricción UNIQUE agrupada, dos filas con los mismos valores en el campo rut y digito.
8. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Nomenclatura para creación UNIQUE en ALTER TABLE: UNIQUE no agrupado y agrupado Para ambos casos de UNIQUE se utiliza la misma nomenclatura. Nomenclatura NO AGRUPADO ALTER TABLE nombre_tabla ADD CONSTRAINT UQ_nombre_restriccion UNIQUE CLUSTERED (nombre_campo) Nomenclatura AGRUPADO ALTER TABLE nombre_tabla ADD CONSTRAINT UQ_nombre_restriccion UNIQUE NONCLUSTERED (campo1, …., campoN)
9. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Nomenclatura para creación UNIQUE en ALTER TABLE: Ejemplo 3: Crear una tabla Ejemplo_UNICO_ALT basada en la siguiente tupla: Ejemplo_UNICO_ALT (rut: numeric, digito: char(2), nombre: nvarchar(20)). Donde rut y digito serán no nulos. Luego de crear la tabla agregue las siguientes restricciones rut y digito deben ser en conjunto únicos, además el nombre debe también ser único. CREATE TABLE Ejemplo_UNICO_ALT ( rut numeric NOT NULL, digito char(2) NOT NULL, nombre nvarchar(20) ) Acá se crea la tabla luego de esto realice las restricciones con ALTER TABLE.
10. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Nomenclatura para creación UNIQUE en ALTER TABLE: Ejemplo 3: /* ACA SE REALIZAN ALTERACIONES A LA TABLA Ejemplo_UNICO_GR*/ ALTER TABLE Ejemplo_UNICO_ALT ADD CONSTRAINT UQ_rut_digito_ALT UNIQUE NONCLUSTERED (rut, digito) ALTER TABLE Ejemplo_UNICO_ALT ADD CONSTRAINT UQ_nombre_ALT UNIQUE CLUSTERED (nombre) Compruebe las siguientes restricciones ingresando dos registros con distinto rut y digito y el mismo nombre. Y otros dos registros con nombre distinto y el rut y digito iguales. NOTA: EN LA BASE DE DATOS NO PUEDEN EXISTIR DOS RESTRICCIONES CON EL MISMO NOMBRE, AUNQUE SEAN DE TABLAS DISTINTAS.
11. Lenguaje de Definición de Datos (DDL) Restricción - UNIQUE Borrar una restricción UNIQUE creada . Para borrar una restricción UNIQUE se debe utilizar la instrucción ALTER TABLE con su opción DROP. Nomenclatura ALTER TABLE nombre_tabla DROP CONSTRAINT UQ_nombre_restriccion Ejemplo 4: Borre de la restricción UQ_nombre_ALT de la tabla Ejemplo_UNICO_ALT. ALTER TABLE Ejemplo_UNICO_ALT DROP COSNTRAINT UQ_nombre_ALT
12. Lenguaje de Definición de Datos (DDL) Restricción – PRIMARY KEY La restricción PRIMARY KEY se usa para especificar la clave primaria de una tabla, la columna o conjunto de columnas que identifican unívocamente a una fila. Debido a que identifica a una fila la clave primaria nunca puede ser NULL, esto es la que lo diferencia de la restricción UNIQUE. Para la definición de la restricción PRIMARY KEY se pueden utilizar las instrucciones CREATE TABLE y ALTER TABLE. Nomenclatura para CREATE TABLE: nombre_campo tipo_dato PRIMARY KEY Ejemplo 1: Crea una Tabla denominada Ejemplo_Clave_PR, basada en la siguiente tupla: Ejemplo_Clave_PR (codigo: numeric, nombre: nvarchar(20)). Colocando el campo codigo como clave primaria.
13. Lenguaje de Definición de Datos (DDL) Restricción – PRIMARY KEY Ejemplo 1: CREATE TABLE Ejemplo_Clave_PR ( codigo numeric PRIMARY KEY, nombre nvarchar(20) ) Además usando CREATE TABLE se le puede asignar un nombre a la restricción PRIMARY KEY (IDEAL) , usando la siguiente nomenclatura: Para cuando se coloca al lado del campo: nombre_campo tipo_dato CONSTRAINT PK_nombre_clave PRIMARY KEY Para cuando se coloca antes de cerrar el CREATE TABLE CONSTRAINT PK_nombre_clave PRIMARY KEY (columna o columnas) Compruebe si se cumple la restricción de clave primaria ingresando dos filas con el mismo código.
14. Lenguaje de Definición de Datos (DDL) Restricción – PRIMARY KEY Nomenclatura para ALTER TABLE: ALTER TABLE nombre_tabla ADD CONSTRAINT PK_nombre_clave PRIMARY KEY (columna o columnas) Nomenclatura para BORRAR una clave primaria: ALTER TABLE nombre_tabla DROP CONSTRAINT PK_nombre_clave NOTA: EN LA BASE DE DATOS NO PUEDEN EXISTIR DOS RESTRICCIONES CON EL MISMO NOMBRE, AUNQUE SEAN DE TABLAS DISTINTAS. NOTA: Por nomenclatura al dar un nombre a una clave primaria es ideal comenzar con la letras PK
15. Lenguaje de Definición de Datos (DDL) Restricción – FOREIGN KEY Una restricción FOREIGN KEY define una clave externa, que identifica una relación entre dos tablas. La columna o columnas clave externa de una tabla referencia a una clave candidata – una o varias columnas – de otra tabla. Cuando se inserta una fila en la tabla con la restricción FOREIGN KEY, los valores que se van a introducir en la columna o columnas que se han definido como clave externa se comprueban frente a los valores de la clave candidata de la tabla referenciada. Si ninguna fila de la tabla referenciada se ajusta a los valores de la clave externa, la nueva fila no se puede insertar. La restricción FOREIGN KEY también se comprueba cuando se realizan actualizaciones y borrados en la tabla referenciada o la tabla que posee la clave externa. Una clave externa sólo puede referenciar columnas que tengan las restricciones PRIMARY KEY o UNIQUE en la tabla referenciada.
16. Lenguaje de Definición de Datos (DDL) Restricción – FOREIGN KEY Una clave externa sólo puede referenciar columnas que tengan las restricciones PRIMARY KEY o UNIQUE en la tabla referenciada. Además, el tipo de dato y el tamaño de la columna o columnas de la clave externa, también debe coincidir con el de la columna o columnas referenciadas. Esta restricción FOREIGN KEY se puede asignar utilizando la sentencia CREATE TABLE y ALTER TABLE. Nomenclatura en CREATE TABLE (Siempre se agrega antes de finalizar la creación de la tabla): CONSTRAINT FK_nombre_clave_ajena FOREIGN KEY (columna o columnas que guardaran los valores de la clave ajena) REFERENCES nombre_tabla_referencia (columna o columna que poseen datos a validar)
17. Lenguaje de Definición de Datos (DDL) Restricción – FOREIGN KEY Ejemplo 5: Crear las siguientes tablas basadas en las tuplas: Colegio (codigo_col: numero,nombre:nvarchar(20)) Alumno (rut: numero, digito: char(2), nombre: nvarchar(20), colegio: numero) Restricciones: Colegio clave primaria codigo_col y Alumno clave primaria rut y digito. Además en alumno colegio es una clave externa que se debe verificar en Colegio. Paso 1: Crear las Tablas CREATE TABLE COLEGIO( codigo_col numeric, nombre nvarchar(20) NOT NULL, CONSTRAINT PK_colegio PRIMARY KEY (codigo_col) )
18. Lenguaje de Definición de Datos (DDL) Restricción – FOREIGN KEY Ejemplo 5: Paso 1: Crear las Tablas CREATE TABLE ALUMNO( rut numeric, digito char(2), nombre nvarchar(20) NOT NULL, colegio numeric NOT NULL, CONSTRAINT PK_alumno PRIMARY KEY (rut,digito), CONSTRAINT FK_alumno_colegio FOREIGN KEY (colegio) REFERENCES COLEGIO (codigo_col) )
19. Lenguaje de Definición de Datos (DDL) Restricción – FOREIGN KEY Ejemplo 5: Paso 2: Comprobación de la RESTRICCION DE CLAVE FORANEA Ingrese dos colegios: (1,’ESCUELA DEL SABER’) (2,’ESCUELA 2’) Ingrese dos alumnos colocando en el campos colegio uno de los dos colegios antes ingresado. Luego ingrese un tercer alumno haciendo referencia al código de colegio 3.
20. Lenguaje de Definición de Datos (DDL) Restricción – FOREIGN KEY Nomenclatura en ALTER TABLE (para cuando se desea crear una clave externa después de haber creado la tabla): ALTER TABLE nombre_tabla ADD CONSTRAINT FK_nombre_clave_ajena FOREIGN KEY (columna o columnas para recepción de clave ajena) REFERENCES nombre_tabla_referencia (columna o columnas de referencia) Nomenclatura para borrar una clave ajena: ALTER TABLE nombre_tabla DROP CONSTRAINT FK_nombre_restriccion
21. Lenguaje de Definición de Datos (DDL) Restricción – CHECK La restricción CHECK se usa para restringir los valores permitidos de una columna o unos valores específicos. Los valores de una columna que se van a introducir o actualizar se confirman. Se puede agregar esta restricción utilizando las instrucciones CREATE TABLE o ALTER TABLE. Nomenclatura CREATE TABLE: CONSTRAINT CK_nombre_restriccion CHECK (condiciones) Ejemplo 6: Crear una Tabla Ejemplo_CH basandose en la siguiente tupla: Ejemplo_CK (codigo: numeric, nombre: nvarchar(20)). Donde codigo es la clave primaria y solo puede aceptar valores entre 1 y 100.
22. Lenguaje de Definición de Datos (DDL) Restricción – CHECK Ejemplo 6: CREATE TABLE Ejemplo_CK ( codigo numeric, nombre nvarchar(20), CONSTRAINT PK_codigo PRIMARY KEY (codigo), CONSTRAINT CK_codigo_condicion CHECK (codigo > 0 and codigo < 101) ) Para probar la realidad de la restricción ingrese un registro a la tabla Ejemplo_CK con un codigo con valor mayor que 100.
23. Lenguaje de Definición de Datos (DDL) Restricción – CHECK Nomenclatura para ALTER TABLE (en el caso de que se cree una restricción después de haber creado la tabla): ALTER TABLE nombre_tabla ADD CONSTRAINT CK_nombre_restriccion CHECK (condiciones) Nomenclatura para Borrar una restricción CHECK: ALTER TABLE nombre_tabla DROP CONSTRAINT CK_nombre_restriccion