Está en la página 1de 18

3.

Restricciones de las Bases de


Datos

3.1 Tipos de restricciones de integridad.


3.2 Uso de restricciones.
3.3 Caso de pruebas para restricciones.

Definicin

Ayudan a mantener la
consistencia
semntica en la BD

Aseguran que los


usuarios autorizados
no provoquen la
prdida de
consistencia de datos.

Elaborado por :Luz Alondra Katt Morales

Definicin

Entidad
Dominio
Referencial

Definida por el usuario


Elaborado por :Luz Alondra Katt Morales

http://msdn.microsoft.com/es-es/library/ms184276.aspx

Integridad de Entidad
La integridad de entidad define una fila como entidad nica para una tabla
determinada. La integridad de entidad exige la integridad de las columnas de
los identificadores o la clave principal de una tabla, mediante ndices y
restricciones UNIQUE, o restricciones PRIMARY KEY.
En esta no est permitido que algn componente de la clave primaria acepte
valores nulos.
Las razones de esta regla son:
Las tuplas en las relaciones base representan entidades en la realidad.
Las entidades en la realidad son identificables por definicin.
Sus contrapartes en la base de datos tambin deben ser identificables.
Los valores de la clave primaria sirven como identificadores en la base de datos.
Los valores de clave primaria no pueden ser nulos.
http://msdn.microsoft.com/es-es/library/ms184276.aspx
Elaborado por :Luz Alondra Katt Morales
http://juanin.bligoo.com/content/view/606209/Integridad-en-las-Bases-de-Datos.html

Integridad de Entidad - unicidad


La restriccin UNIQUE asegura que todos los valores en una columna sean
distintos.
Por ejemplo, en la siguiente instruccin,
CREATE TABLE Customer
(SID integer Unique,
Last_Name varchar (30),
First_Name varchar(30));
D
La columna SID no puede incluir valores duplicados, mientras dicha
restriccin no se aplica para columnas Last_Name y First_Name.

Elaborado por :Luz Alondra Katt Morales

http://sql.1keydata.com/es/sql-constraint.php

Integridad de Entidad Clave Primaria


MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
Elaborado por :Luz Alondra Katt Morales

http://sql.1keydata.com/es/sql-constraint.php

Integridad de Dominio
La integridad de dominio viene dada por la validez de las entradas para una
columna determinada. Puede exigir la integridad de dominio para restringir el
tipo mediante tipos de datos, el formato mediante reglas y restricciones
CHECK, o el intervalo de valores posibles mediante restricciones FOREIGN
KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y
reglas.
Dato
Longitud
Descripcin
Bit
1 byte
Valores true/false
Byte
1 byte
Entero entre 0 y
255
Counter
4 bytes
Campo ID (long)
Currency
8 bytes
Numrico
Datetime
8 bytes
Fecha
Text
1 byte/caracter
De 0 a 255
caracteres

Elaborado por :Luz Alondra Katt Morales

http://msdn.microsoft.com/es-es/library/ms184276.aspx

Integridad de Dominio No nulo


NOT NULL
En forma predeterminada, una columna puede ser NULL. Si no desea permitir
un valor NULL en una columna, querr colocar una restriccin en esta columna
especificando que NULL no es ahora un valor permitido.
Por ejemplo, en la siguiente instruccin,
CREATE TABLE Customer
(SID integer NOT NULL,
Last_Name varchar (30) NOT NULL,
First_Name varchar(30));
Las columnas SID y Last_Name no incluyen NULL, mientras que
First_Name puede incluir NULL.

Elaborado por :Luz Alondra Katt Morales

http://sql.1keydata.com/es/sql-constraint.php

Integridad de Dominio Check


La restriccin CHECK asegura que todos los valores en una columna cumplan
ciertas condiciones.
Por ejemplo, en la siguiente instruccin,
CREATE TABLE Customer
(SID integer CHECK (SID > 0),
Last_Name varchar (30),
First_Name varchar(30));
La columna SID slo debe incluir enteros mayores a 0.

Elaborado por :Luz Alondra Katt Morales

http://sql.1keydata.com/es/sql-constraint.php

Integridad de Dominio Llave Foranea


MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));
Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);
SQL Server:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references CUSTOMER(SID),
Amount double);
Elaborado por :Luz Alondra Katt Morales

http://sql.1keydata.com/es/sql-constraint.php

Integridad Referencial
protege las relaciones definidas entre las tablas cuando se crean o se eliminan
filas. La integridad referencial garantiza que los valores de clave sean
coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso
que no haya referencias a valores inexistentes y que, si cambia el valor de una
clave, todas las referencias a ella se cambien en consecuencia en toda la base
de datos.
No se podr introducir un valor en la tabla
relacionada si antes no ha sido introducida en la
tabla principal.
No se puede eliminar un registro de una tabla
principal si existen registros coincidentes en la
tabla relacionada.

No se puede cambiar un valor de la clave


primaria en la tabla principal si el registro tiene
registros relacionados.

Elaborado por :Luz Alondra Katt Morales

http://msdn.microsoft.com/es-es/library/ms184276.aspx

Integridad Referencial
Por ejemplo, en las tablas Sales.SalesOrderDetail y Production.Product de la
base de datos AdventureWorks2008R2, la integridad referencial se basa en la
relacin entre la clave externa (ProductID) de la tabla Sales.SalesOrderDetail y
la clave principal (ProductID) de la tabla Production.Product. Esta relacin
garantiza que un pedido de ventas no pueda nunca hacer referencia a un
producto que no existe en la tabla Production.Product.

Elaborado por :Luz Alondra Katt Morales

http://msdn.microsoft.com/es-es/library/ms184276.aspx

Integridad definida por el usuario


La integridad definida por el usuario permite definir reglas de empresa especficas
que no pertenecen a ninguna otra categora de integridad. Todas las categoras
de integridad admiten la integridad definida por el usuario. Esto incluye todas las
restricciones de nivel de columna y nivel de tabla en CREATE TABLE,
procedimientos almacenados y desencadenadores.

Elaborado por :Luz Alondra Katt Morales

http://msdn.microsoft.com/es-es/library/ms184276.aspx

Constraints
CREATE TABLE parent
( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB;
CREATE TABLE child
( id INT, parent_id INT, INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE )
ENGINE=INNODB;

ALTER TABLE yourtablename ADD [CONSTRAINT symbol] FOREIGN


KEY [id] (index_col_name, ...) REFERENCES tbl_name
(index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET
NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET
NULL | NO ACTION}]

Elaborado por :Luz Alondra Katt Morales

http://dev.mysql.com/doc/refman/5.0/es/innodb-foreignkey-constraints.html

Constraints NOT NULL


Name
CATEGORIAID NOT
UBICACIN
NOMBRECATEGORA

Null
NULL

Type
CHAR (18)
CHAR (18)
CHAR(18)

Modificamos la restriccin de la tabla.


ALTER TABLE CATEGORIA
MODIFY(UBICACIN NOT NULL);
CATEGORIAID NOT NULL CHAR(18)
UBICACIN NOT NULL CHAR(18)
NOMBRECATEGORA CHAR(18)

Elaborado por :Luz Alondra Katt Morales

http://es.scribd.com/doc/13991883/Creacion-y-Uso-de-Constraints

Constraints
Insertamos valores a nuestra tabla.
INSERT INTO CATEGORIAVALUES ('AL12', ,'ALIMENTOS');
ERROR:Error starting at line 1 in command:
INSERT INTO CATEGORIAVALUES ('AL12',,'ALIMENTOS')
Error at Command Line:2
Column:15Error report:SQL
Error: ORA-00936: falta una expresin00936. 00000 - "missing
expression"*Cause:*Action:

Elaborado por :Luz Alondra Katt Morales

http://es.scribd.com/doc/13991883/Creacion-y-Uso-de-Constraints

Constraints - UNIQUE
Name
Null
RUCDNICTE
NOT NULL
DIRECCION
EMAIL
TELEFONO1
RAZONSOCNOMBRE
TELEFONO2

Type
CHAR(18)
CHAR(18)
CHAR(18)
CHAR(18)
CHAR(18)
CHAR(18)

En este caso realizamos dos restricciones UNIQUE a los campos de Email


yRazonSocial.
ALTER TABLE CLIENTEMODIFY (CONSTRAINT UNMAIL UNIQUE(EMAIL))
Insertamos algunas filas a nuestra tabla.
INSERT INTO CLIENTEVALUES('43918908','LOSALIZOS
212','arzame@yahoo.es','8762412','ArmandoZamora','976457238');
1 rows inserted
Elaborado por :Luz Alondra Katt Morales

http://es.scribd.com/doc/13991883/Creacion-y-Uso-de-Constraints

Constraints - UNIQUE
INSERT INTO CLIENTEVALUES
('439874232','EL SOL 12', 'arzame@yahoo.es', '9878712', 'ArmandoSanchez',
'976897638');
ERROR:Error starting at line 1 in command:INSERT INTO
CLIENTEVALUES('439874232','EL SOL
#212','arzame@yahoo.es','9878712','ArmandoSanchez','976897638')
Error report:SQL Error: ORA-00001: restriccin nica (SYSTEM.XPKCLIENTE)
violada00001. 00000 - "unique constraint (%s.%s) violated"*Cause: An
UPDATE or INSERT statement attempted to insert a duplicatekey.
For Trusted Oracle configured in DBMS MAC mode, you may seethis message if
a duplicate entry exists at a different level.*Action: Either remove the unique
restriction or do not insert the key

Elaborado por :Luz Alondra Katt Morales

http://es.scribd.com/doc/13991883/Creacion-y-Uso-de-Constraints