Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Integridad referencial
(entre tablas)
Integridad de datos declarativa
◦ Los criterios se definen en la definición del objeto
◦ Asegurada automáticamente por MySQL Worbench.
◦ Implementada mediante restricciones, valores
predeterminados y reglas.
Integridad de datos procedimental
◦ Los criterios se definen en una secuencia de
comandos
◦ Asegurada mediante secuencia de comandos
◦ Implementada mediante desencadenadores y
prodedimientos almacenados
Determinación del tipo de restricción que se va a
utilizar
Creación de restricciones
Consideraciones para el uso de restricciones
Tipo de integridad Tipo de restricción
DEFAULT
Dominio CHECK
REFERENTIAL
PRIMARY KEY
Entidad
UNIQUE
FOREIGN KEY
Referencial
CHECK
Utilizar CREATE TABLE o ALTER TABLE
Puede agregar restricciones a una tabla con datos
existentes
Puede aplicar restricciones a una sola columna o a
varias columnas
◦ Una sola columna, se llama restricción de columna
◦ Varias columnas, se llama restricción de tabla
Pueden cambiarse sin volver a crear una tabla
Requieren comprobación de errores en aplicaciones y
transacciones
Comprueban los datos existentes
Restricciones DEFAULT
Restricciones CHECK
Restricciones PRIMARY KEY
Restricciones UNIQUE
Restricciones FOREIGN KEY
Integridad referencial en cascada
Sólo se aplica a las instrucciones INSERT
Sólo una restricción DEFAULT por columna
No se puede utilizar con la propiedad
IDENTITY o el tipo de datos rowversion
Permite que se especifiquen algunos valores
proporcionados por el sistema
USE dbventas
ALTER TABLE cliente
ADD
CONSTRAINT DF_nombrecontacto DEFAULT 'UNKNOWN'
FOR NombreContacto
Se utilizan con las instrucciones INSERT y
UPDATE
Pueden hacer referencia a otras columnas en la
misma tabla
No pueden:
◦ Utilizarse con el tipo de datos rowversion
◦ Contener subconsultas
USE dbventas
ALTER TABLE Empleados
ADD
CONSTRAINT CK_fechanacimiento
CHECK (FechaNacimiento > '01-01-1900' AND
FechaNacimiento < getdate())
Sólo una restricción PRIMARY KEY por tabla
Los valores deben ser exclusivos
No se permiten valores nulos
Crea un índice exclusivo en las columnas especificadas
USE dbventas
ALTER TABLE Clientes
ADD
CONSTRAINT PK_Clientes
PRIMARY KEY (IDCliente)
Permite un valor nulo
Permite varias restricciones UNIQUE en una tabla
Definidas con una o más columnas
Exigida con un índice único
USE dbventas
ALTER TABLE Proveedores
ADD
CONSTRAINT U_NombreCompanhia
UNIQUE (NombreCompanhia)
Deben hacer referencia a una restricción
PRIMARY KEY o UNIQUE
Proporcionan integridad referencial de una o de
varias columnas
No crean índices automáticamente
Los usuarios deben tener permisos SELECT o
REFERENCES en las tablas a las que se hace
referencia
Usa
USE sólo la cláusula REFERENCES en la tabla de
bventas
ALTER TABLE Pedido
ejemplo
ADD CONSTRAINT FK_Pedido_Clientes
FOREIGN KEY (IDCliente)
REFERENCES Clientes(IDCliente)
NINGUNA CASCADA
Customers Customers
ACCIÓN CustomerID (PK)
CustomerID (PK)
1 1
INSERT new UPDATE CustomerID
CustomerID
CASCADA
Orders
CustomerID (FK) Orders
2 CustomerID (FK)
UPDATE old
CustomerID to new
CustomerID
Customers
CustomerID (PK)
3
DELETE old
CustomerID
Deshabilitación de la comprobación de las
restricciones en los datos existentes
Deshabilitación de la comprobación de las
restricciones al cargar datos nuevos
Se aplica a las restricciones CHECK y FOREIGN KEY
Utilice la opción WITH NOCHECK cuando agregue
una restricción nueva
Utilizar si los datos existentes no cambian
Se pueden cambiar los datos existentes antes de
agregar restricciones
USE dbventas
ALTER TABLE Empleados
WITH NOCHECK
ADD CONSTRAINT FK_Empleados_Empleados
FOREIGN KEY (AReportes)
REFERENCES Empleados(IDEmpleado)
Se aplica a las restricciones CHECK y FOREIGN KEY
Utilizar si:
◦ Los datos cumplen las restricciones
◦ Carga datos nuevos que no cumplen las restricciones
USE dbventas
ALTER TABLE Empleados
NOCHECK
CONSTRAINT FK_Empleados_Empleados
Como objetos independientes:
◦ Se definen una vez
◦ Pueden vincularse a una o más columnas
o a tipos de datos definidos por el usuario
Valores predetermi-
Baja Baja Antes
nados y reglas
Tipos de datos,
Baja Baja Antes
Null/Not Null
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 21
Completar las siguientes tablas de la base de datos
DBIESTPD:
◦ alumno
◦ aula
◦ carreraprofesional
◦ docente
◦ semestre
◦ unidaddidactica
◦ usuario
Volver
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 24
idcarrera int(2) zerofill not null auto_increment,
NomCarrera varchar(30),
NumResolucion varchar (15),
FecCreacion date default '1980-01-01',
primary key (CodCarrera)
);
Volver
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 25
Create Table Docente( Direccion varchar (45),
iddocente int(3) zerofill not null Telefono varchar (9),
auto_increment, Email varchar (30),
NomDocente varchar(30), Observaciones text,
ApePaterno varchar (25), primary key (CodDocente)
ApeMaterno varchar (25), );
Cargo varchar (30),
NumDocumento int (8) zerofill,
ConDocente enum
('NOMBRADO','CONTRATADO'),
FecNacimiento date default '1980-
01-01',
Sexo enum ('M','F'), Volver
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 26
idsemestre int(2) zerofill not null auto_increment,
Semestre varchar (3),
Detalle varchar (25),
Primary Key (CodSemestre)
);
Volver
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 27
idunidaddidactica int(3) zerofill not null auto_increment,
NomUnidad varchar (150),
HorSemana int (2),
CreUnidad float (2,1),
HorSemestre int (3),
Primary Key (CodUnidad),
CodCarrera int(2) zerofill unsigned references
carreraprofesional (CodCarrera),
CodSemestre int(2) zerofill unsigned references
semestreacademico (CodSemestre)
); Volver
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 28
CodUsuario int(3) zerofill not null auto_increment,
NomUsuario varchar(30),
ApePaterno varchar (25),
ApeMaterno varchar (25),
TipUsuario enum ('ALUMNO','DOCENTE','ADMINISTRADOR') default 'ALUMNO',
Usuario varchar (8),
Password varchar (8),
FecIngreso date,
FecCaducidad date,
Observaciones text,
primary key (CodUsuario),
check (fecIngreso < FecCaducidad),
unique (usuario)
); Volver
Ing. Lenin Huayta Flores - Taller de Base
de Datos 10/04/2018 29