Integridad en de datos

El término integridad de datos se refiere a la corrección y complementación de los datos en una base de datos.

Cuando los contenidos se modifican con sentencias INSERT, DELETE o UPDATE, la integridad de los datos almacenados puede perderse de muchas maneras diferentes, p.e :

Una de las funciones importantes de un DBMS relacional es preservar la integridad de sus datos almacenados en la mayor medida posible.

Tipos de restricciones de integridad

Fuente: http://es.wikipedia.org/wiki/Integridaddedatos

Integridad referencial en MySQL

MySQL soporta cinco tipos de tablas: MyISAM, ISAM, HEAP, BDB (Base de datos Berkeley), e InnoDB. BDB e InnoDB son ambas tipos de tablas transaccionales. Además de poder trabajar con transacciones en MySQL, las tablas del tipo InnoDB también tienen soporte para la definición de claves foráneas, por lo que se nos permite definir reglas o restricciones que garanticen la integridad referencial de los registros.

A partir de la versión 4.0, MySQL ha agregado InnoDB a la lista de tipos de tablas soportados en una instalación típica.

Comprobando soporte de InnoDB en Mysql.

Nota: para asegurarnos que tenemos soporte para el tipo de tablas InnoDB podemos ejecutar la siguiente sentencia:

mysql> SHOW VARIABLES LIKE '%innodb%'

Si el resultado no es vacio entonces tenemos soporte para innoDB.

Claves foráneas en MySQL

InnoDB no crea de manera automática índices en las claves foráneas o en las claves referenciadas, así que debemos crearlos de manera explícita. Los índices son necesarios para que la verificación de las claves foráneas sea más rápida.

Ejemplo 1. creando tablas con clave foreneas

A continuación se muestra como definir las dos tablas de ejemplo con una clave foránea.

CREATE TABLE cliente
(
    id_cliente INT NOT NULL,
    nombre VARCHAR(30),
    PRIMARY KEY (id_cliente)
) ENGINE = INNODB;

CREATE TABLE venta
(
    id_factura INT NOT NULL,
    id_cliente INT NOT NULL,
    cantidad   INT,
    PRIMARY KEY(id_factura),
    INDEX (id_cliente),
    FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
) ENGINE = INNODB;

Ejemplo 2. agregando clave forenea a tablas existentes:

-- Base de datos: `padres_hijos`
--
-- Estructura de tabla para la tabla `padres`
CREATE TABLE `padres` (
    `padre_ID` int(11) NOT NULL auto_increment,
    `padreNombre` varchar(25) NOT NULL,
    PRIMARY KEY  (`padre_ID`)
) ENGINE=InnoDB ;
-- Estructura de tabla para la tabla `hijos`
CREATE TABLE `hijos` (
    `hijo_ID` int(11) NOT NULL auto_increment,
    `hijoNombre` varchar(25) NOT NULL,
    `hijoPadre_ID` int(11) NOT NULL,
    PRIMARY KEY  (`hijo_ID`),
    KEY `hijoPadre_ID` (`hijoPadre_ID`)
) ENGINE=InnoDB ;

-- Agregando referencia a posterior en la tabla `hijos`
--
ALTER TABLE `hijos`
    ADD CONSTRAINT `relacion_padre_hijos`
    FOREIGN KEY (`hijoPadre_ID`)
    REFERENCES `padres` (`padre_ID`)
    ON DELETE CASCADE ON UPDATE CASCADE;

Descargar archivo: bd_padres_hijos.sql;

Como se puede ver, la tabla hijos a cambiado su estructura, ahora, además de la llave primaria (PRIMARY KEY) hijo_ID, tenemos una llave externa o foránea (KEY) hijoPadre_ID.

Para mayor información consulte el apartado Claves foreaneas de este curso.