TIPO DE RESTRICCIONES:
Restricciones DEFAULT
Restricciones CHECK
Restricciones UNIQUE
Restricciones PRIMARY KEY
DESARROLLO DE LA PRÁCTICA:
Creamos una tabla llamada Socio:
CREATE TABLE Socio(
codigo NUMERIC(5) NOT NULL,
nombre CHAR(25) NOT NULL,
direccion CHAR(36) NOT NULL,
pais char(35) DEFAULT ('ECUADOR')
);
Mostramos la tabla creada con la siguiente sentencia:
SELECT * FROM Socio;
Insertamos datos a esta tabla:
INSERT INTO Socio(codigo, nombre, direccion) VALUES(1111,'SAMUEL SANTANA','BABAHOYO');
INSERT INTO Socio(codigo, nombre, direccion) VALUES(2222,'JAMES BURGOS','GUAYAS');
Mostramos los datos insertados:
SELECT * FROM Socio;
Por defecto observamos que se añade la frase ECUADOR al campo país, ya que no lo hemos declarado en la sentencia INSERT INTO el valor para el campo pais:
Para violar la restricción default lo hacemos declarando el valor para el campo pais en la sentencia INSERT:
INSERT INTO Socio(codigo, nombre, direccion,pais) VALUES(3333,'Beverly Arias', 'san Juan', 'México');
Creamos una tabla llamada Libro:
CREATE TABLE Libro(
nombre CHAR(25) NOT NULL,
cantidad NUMBER(3) NOT NULL,
precio NUMBER(3,2) NOT NULL,
CONSTRAINT CK_condicion CHECK((precio > 0) AND (cantidad>0))
);
Mostramos la tabla creada con la siguiente sentencia:
SELECT * FROM Libro;
Insertamos datos a esta tabla:
INSERT INTO Libro (nombre, cantidad, precio) VALUES ('LA LEY', 9, 3.55);
INSERT INTO Libro (nombre, cantidad, precio) VALUES ('ORACLE 10G XE', 3, 60.72);
Mostramos los datos insertados:
SELECT * FROM Libro;
Si insertamos los siguientes valores negativos a los campos cantidad, precio, veamos que sucede:
INSERT INTO Libro (nombre, cantidad, precio) VALUES ('Odisea', -1, -5.75);
El error que se produce se debe a que hemos violado la restricción CHECK, los valores ingresados no cumplen con la condición establecida en dicha restricción.
o Restricción UNIQUE (Valores no Duplicados)
A nivel de columna:
Creamos una tabla llamada Cliente:
CREATE TABLE Cliente (
cedula char(10) NOT NULL constraint UQ_cedula unique,
nombres char(50) NOT NULL,
correo char(50) NOT NULL constraint UQ_correo unique ,
);
Mostramos la tabla creada:
SELECT * FROM Cliente;
Insertamos datos a esta tabla:
INSERT INTO cliente(cedula, nombres, correo) VALUES ('0201922119','Ronald Ch','rodvz_87@yahoo.es');
INSERT INTO cliente(cedula, nombres, correo) VALUES ('1245787877','Beberly Arias','de_beba@hotmail.es');
Mostramos los datos insertados:
SELECT * FROM Cliente;
Ahora bien vamos a demostrar cómo se llegaría a violar la restricción UNIQUE. Insertando un nuevo registro con una dirección de correo existente en la tabla.
INSERT INTO cliente (cedula, nombres, correo) VALUES ('1024785996','Jose Paez','rodvz_87@yahoo.es');
El error se produce porque el valor que se está ingresando al campo correo ya existe en la tabla.
o Restricción PRIMARY KEY (Llave Primaria)
Sólo se puede definir una para cada tabla. Esta restricción equivale a una restricción de unicidad (UNIQUE) y otra de obligatoriedad (NOT NULL) combinadas. SINTAXIS:
A nivel de columna:
[CONSTRAINT <>] PRIMARY KEY
A nivel de tabla:
Creamos una tabla llamada Departamentos:
CREATE TABLE Departamentos(
numDep NUMBER(4),
nombre VARCHAR2(30) NOT NULL,
ubicacion VARCHAR2(30) NOT NULL,
CONSTRAINT PK_numDep PRIMARY KEY (numDep) );
Mostramos la tabla creada:
SELECT * FROM Departamentos;
Insertamos datos a esta tabla:
INSERT INTO Departamentos(numDep, nombre, ubicacion) VALUES(512,'Administracion','Planta baja');
INSERT INTO Departamentos(numDep, nombre, ubicacion) VALUES(513,'Finanzas ','Planta alta 2piso');
INSERT INTO Departamentos(numDep, nombre, ubicacion) VALUES(514,'Cobranzas','Planta alta 3piso');
Mostramos los datos insertados:
SELECT * FROM Departamentos;
Si insertamos un nuevo registro con el campo numDep, que ya se encuentre registrado en la tabla, se violara la restricción:
INSERT INTO Departamentos(numDep, nombre, ubicacion) VALUES(514,'Limpieza','Primer piso');
o Restricción FOREIGN KEY (Llave Foranea)
SINTAXIS:
A nivel de columna:
EJEMPLO:
Creamos una tabla llamada Empleados:
CREATE TABLE Empleados (
Cod_empleado NUMBER (5) NOT NULL PRIMARY KEY,
Nom_empleado CHAR (50) NOT NULL,
numdepart NUMBER(4) NOT NULL,
CONSTRAINT FK_num FOREIGN KEY(numdepart) REFERENCES Departamentos(numDep) ON DELETE CASCADE
);
Insertamos datos a esta tabla:
INSERT INTO Empleados(cod_empleado, nom_empleado, numdepart) VALUES(2222,'Ronald Chavez',513);
INSERT INTO Empleados(cod_empleado, nom_empleado, numdepart) VALUES(3333,'Beberly Arias',514);
INSERT INTO Empleados(cod_empleado, nom_empleado, numdepart) VALUES(4444,'Fernando Suarez',513);
INSERT INTO Empleados(cod_empleado, nom_empleado, numdepart) VALUES(5555,'Regina Montiel',512);
Mostramos los datos insertados:
SELECT * FROM Empleados;
Se violara esta restricción solo cuando al especificar en la sentencia INSERT el campo numDepart de la tabla Empleados no coincida con uno de los valores del campo numDep de la tabla Departamentos, por ejemplo si ingreso 515 en el campo numdepart de la tabla Empleados, vemos que ese valor no está almacenado en la tabla Departamentos por lo que se produce un error:
INSERT INTO Empleados(cod_empleado, nom_empleado, numdepart) VALUES(5658, 'Sandy Suarez', 515);