unidad 6 lenguaje sql 3 (restricciones ddl avanzado)

24
Sergio Sánchez 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

Upload: sergio-sanchez

Post on 08-Jun-2015

5.309 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

Bases de DatosUnidad 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

Page 2: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

Lenguaje de Definición de Datos (DDL)Introducción

Las Restricciones automáticamente fuerzan las integridad de datos.

Es decir, las restricciones definen reglas que determinan los valores de datos que se permiten en una columna. Esto permite restringir los valores que se pueden insertar en una columna, de modo que no se acepten los valores no válidos.

Existen dos tipos de restricciones:

Restricciones de Columna ( o de una sola columna ): sólo restringe los valores de esa columna.

Restricción de tablas: restricciones que afectan a mas de una columna de la tabla; se asegura que la combinación de los valores para las columnas de las restricción cumplen los requerimientos de la restricción.

Page 3: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

Lenguaje de Definición de Datos (DDL)Introducción

Los cinco tipos de restricciones son:

Restricciones

NOT NULL

UNIQUE

PRIMARY KEY

FOREING KEY

CHECK

Page 4: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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).

Page 5: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Compruebe la restricción UNIQUE insertando dos filas utilizando el mismo código.

Page 6: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Page 7: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Compruebe la restricción UNIQUE agrupada, dos filas con los mismos valores en el campo rut y digito.

Page 8: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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)

Page 9: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Acá se crea la tabla luego de esto realice las restricciones con ALTER TABLE.

Page 10: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

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.

NOTA: EN LA BASE DE DATOS NO PUEDEN EXISTIR DOS RESTRICCIONES CON EL MISMO NOMBRE, AUNQUE SEAN DE TABLAS DISTINTAS.

Page 11: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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

Page 12: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Page 13: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Compruebe si se cumple la restricción de clave primaria ingresando dos filas con el mismo código.

Page 14: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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

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

Page 15: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Page 16: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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)

Page 17: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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)

)

Page 18: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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)

)

Page 19: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Page 20: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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

Page 21: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Page 22: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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.

Para probar la realidad de la restricción ingrese un registro a la tabla Ejemplo_CK con un codigo con valor mayor que 100.

Page 23: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

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

Page 24: Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)

Sergio Sánchez

Bibliografía

“Introducción a los Sistemas de Base de Datos”, C. J. Date, Prentice Hall – Séptima Edición, 2001.

“Running SQL SERVER 2000”, Marci Frohock García & Jamie Reding & Edward Whalen & Steve Adrien Deluca, McGraw – Hill – 2001.

“SQL SERVER 7.0 – Iniciación y Referencia”, José Antonio Ramalho, McGraw-Hill – 2000.

“Bases de Datos Relacionales”, Matilde Celma Giménez & Juan Casamayor & Laura Mota, Prentice Hall, 2003.

Cátedra “Introducción a las bases de datos”, Profesor L. Marti, Universidad de Valparaíso, 2004.