Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
-
Upload
sergio-sanchez -
Category
Technology
-
view
5.307 -
download
0
Transcript of 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
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.
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
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).
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.
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.
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.
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)
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.
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.
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
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.
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.
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
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.
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)
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)
)
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)
)
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.
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
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.
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.
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
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.