domingo, 4 de octubre de 2009

INTEGRIDAD DE LOS DATOS

Diapositiva 2

INTEGRIDAD DE DATOS
La integridad de los datos hace referencia a la coherencia y la precisión de los datos que están almacenados en una base de datos. Las restricciones nos ayudan a mantener la integridad de los datos. ¿Qué es esto? Pues evitar tener datos corruptos o inservibles o inválidos.
Diapositiva 4
RESTRICCIONES
Las restricciones son el método más adecuado para conseguir la integridad de los datos.
Diapositiva 4

TIPO DE RESTRICCIONES:

Restricciones DEFAULT

Restricciones CHECK

Restricciones UNIQUE

Restricciones PRIMARY KEY

Restricciones FOREIGN KEY

DESARROLLO DE LA PRÁCTICA:

Restricción DEFAULT (Valor Predeterminado)

Diapositiva 6

Permite que se escriba un valor en una columna cuando no se especifica en las sentencia INSERT.
SINTAXIS:
[CONSTRAINT nombreRestricción] DEFAULT expresiónConstante;

EJEMPLO:

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');


o Restricción CHECK (Regla de Validación)
Diapositiva 8
La restricción CHECK restringe los datos que los usuarios pueden escribir en una columna particular a unos valores específicos.
SINTAXIS:
[CONSTRAINT nombreRestricción] CHECK (expresiónLógica);
EJEMPLO:

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)

Diapositiva 11

La restricción UNIQUE especifica que dos filas de una columna no pueden tener el mismo valor.
SINTAXIS:
A nivel de columna:
[CONSTRAINT ] UNIQUE
A nivel de tabla:
[CONSTRAINT <>] UNIQUE ([,…])

EJEMPLO:

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:

[CONSTRAINT <>] PRIMARY KEY ([,…])

EJEMPLO:


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)
Designa a una o varias columnas como clave ajena y establece una relación de referencia con una clave primaria o clave única (UNIQUE) de otra tabla o de la misma. El valor de la clave ajena debe coincidir con un valor existente en la tabla referenciada (parent table) o ser nulo.
SINTAXIS:
A nivel de columna:
[CONSTRAINT ] REFERENCES [([,…])]
A nivel de tabla:
[CONSTRAINT ] FOREIGN KEY ([,…]) REFERENCES [ [([,…])]

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


FIN...