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.
Definición




                                Ayudan a mantener la
                                    consistencia
                                 semántica en la BD



                                  Aseguran que los
                                 usuarios autorizados
                                   no provoquen la
                                      pérdida de
                                consistencia de datos.



Elaborado por :Luz Alondra Katt Morales
Definición


                                           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 algún 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 definición.

   Sus contrapartes en la base de datos también 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.


Elaborado por :Luz Alondra Katt Morales           http://msdn.microsoft.com/es-es/library/ms184276.aspx
                     http://juanin.bligoo.com/content/view/606209/Integridad-en-las-Bases-de-Datos.html
Integridad de Entidad - unicidad
La restricción UNIQUE asegura que todos los valores en una columna sean
distintos.

Por ejemplo, en la siguiente instrucción,
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
restricción 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         Descripción
               Bit                1 byte            Valores true/false
               Byte               1 byte            Entero entre 0 y
                                                    255
               Counter            4 bytes           Campo ID (long)
               Currency           8 bytes           Numérico
               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 restricción en esta columna
especificando que NULL no es ahora un valor permitido.

Por ejemplo, en la siguiente instrucción,

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 restricción CHECK asegura que todos los valores en una columna cumplan
ciertas condiciones.

Por ejemplo, en la siguiente instrucción,
CREATE TABLE Customer
(SID integer CHECK (SID > 0),
Last_Name varchar (30),
First_Name varchar(30));


La columna “SID” sólo 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
relación entre la clave externa (ProductID) de la tabla Sales.SalesOrderDetail y
la clave principal (ProductID) de la tabla Production.Product. Esta relación
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 específicas
que no pertenecen a ninguna otra categoría de integridad. Todas las categorías
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-foreign-
                                          key-constraints.html
Constraints – NOT NULL

Name                           Null                Type
CATEGORIAID NOT                NULL               CHAR (18)
UBICACIÓN                                         CHAR (18)
NOMBRECATEGORÍA                                    CHAR(18)

Modificamos la restricción de la tabla.

ALTER TABLE CATEGORIA
MODIFY(UBICACIÓN NOT NULL);
CATEGORIAID NOT NULL CHAR(18)
UBICACIÓN NOT NULL CHAR(18)
NOMBRECATEGORÍA 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 expresión00936. 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                                Type
RUCDNICTE      NOT NULL                             CHAR(18)
DIRECCION                                          CHAR(18)
EMAIL                                               CHAR(18)
TELEFONO1                                          CHAR(18)
RAZONSOCNOMBRE                                     CHAR(18)
TELEFONO2                                          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: restricción ú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

Restricciones bd

  • 1.
    3. Restricciones delas Bases de Datos 3.1 Tipos de restricciones de integridad. 3.2 Uso de restricciones. 3.3 Caso de pruebas para restricciones.
  • 2.
    Definición Ayudan a mantener la consistencia semántica en la BD Aseguran que los usuarios autorizados no provoquen la pérdida de consistencia de datos. Elaborado por :Luz Alondra Katt Morales
  • 3.
    Definición Entidad Dominio Referencial Definida por el usuario Elaborado por :Luz Alondra Katt Morales http://msdn.microsoft.com/es-es/library/ms184276.aspx
  • 4.
    Integridad de Entidad Laintegridad 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 algún 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 definición. Sus contrapartes en la base de datos también 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. Elaborado por :Luz Alondra Katt Morales http://msdn.microsoft.com/es-es/library/ms184276.aspx http://juanin.bligoo.com/content/view/606209/Integridad-en-las-Bases-de-Datos.html
  • 5.
    Integridad de Entidad- unicidad La restricción UNIQUE asegura que todos los valores en una columna sean distintos. Por ejemplo, en la siguiente instrucción, 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 restricción no se aplica para columnas “Last_Name” y “First_Name”. Elaborado por :Luz Alondra Katt Morales http://sql.1keydata.com/es/sql-constraint.php
  • 6.
    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
  • 7.
    Integridad de Dominio Laintegridad 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 Descripción Bit 1 byte Valores true/false Byte 1 byte Entero entre 0 y 255 Counter 4 bytes Campo ID (long) Currency 8 bytes Numérico 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
  • 8.
    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 restricción en esta columna especificando que NULL no es ahora un valor permitido. Por ejemplo, en la siguiente instrucción, 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
  • 9.
    Integridad de Dominio– Check La restricción CHECK asegura que todos los valores en una columna cumplan ciertas condiciones. Por ejemplo, en la siguiente instrucción, CREATE TABLE Customer (SID integer CHECK (SID > 0), Last_Name varchar (30), First_Name varchar(30)); La columna “SID” sólo debe incluir enteros mayores a 0. Elaborado por :Luz Alondra Katt Morales http://sql.1keydata.com/es/sql-constraint.php
  • 10.
    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
  • 11.
    Integridad Referencial protege lasrelaciones 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
  • 12.
    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 relación entre la clave externa (ProductID) de la tabla Sales.SalesOrderDetail y la clave principal (ProductID) de la tabla Production.Product. Esta relación 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
  • 13.
    Integridad definida porel usuario La integridad definida por el usuario permite definir reglas de empresa específicas que no pertenecen a ninguna otra categoría de integridad. Todas las categorías 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
  • 14.
    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-foreign- key-constraints.html
  • 15.
    Constraints – NOTNULL Name Null Type CATEGORIAID NOT NULL CHAR (18) UBICACIÓN CHAR (18) NOMBRECATEGORÍA CHAR(18) Modificamos la restricción de la tabla. ALTER TABLE CATEGORIA MODIFY(UBICACIÓN NOT NULL); CATEGORIAID NOT NULL CHAR(18) UBICACIÓN NOT NULL CHAR(18) NOMBRECATEGORÍA CHAR(18) Elaborado por :Luz Alondra Katt Morales http://es.scribd.com/doc/13991883/Creacion-y-Uso-de-Constraints
  • 16.
    Constraints Insertamos valores anuestra 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 expresión00936. 00000 - "missing expression"*Cause:*Action: Elaborado por :Luz Alondra Katt Morales http://es.scribd.com/doc/13991883/Creacion-y-Uso-de-Constraints
  • 17.
    Constraints - UNIQUE Name Null Type RUCDNICTE NOT NULL CHAR(18) DIRECCION CHAR(18) EMAIL CHAR(18) TELEFONO1 CHAR(18) RAZONSOCNOMBRE CHAR(18) TELEFONO2 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
  • 18.
    Constraints - UNIQUE INSERTINTO 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: restricción ú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