ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Bases Datos 4


Enviado por   •  18 de Junio de 2013  •  3.612 Palabras (15 Páginas)  •  1.288 Visitas

Página 1 de 15

Integridad referencial en MySQL

* Claves foráneas e integridad referencial

Claves foráneas e integridad referencial

Podemos decir de manera simple que integridad referencial significa que cuando un registro en una tabla haga referencia a un registro en otra tabla, el registro correspondiente debe existir. Por ejemplo, consideremos la relación entre una tabla cliente y una tabla venta.

+------------+ +-------------+

| cliente | | venta |

+------------+ +-------------+

| id_cliente | | id_factura |

| nombre | | id_cliente |

+------------+ | cantidad |

+-------------+

Para poder establecer una relación entre dos tablas, es necesario asignar un campo en común a las dos tablas. Para este ejemplo, el campo id_cliente existe tanto en la tabla cliente como en la tabla venta. La mayoría de las veces, este campo en común debe ser una clave primaria en alguna de las tablas. Vamos a insertar algunos datos en estas tablas.

Tabla cliente

+------------+--------------+

| id_cliente | nombre |

+------------+--------------+

| 1 | Juan penas |

| 2 | Pepe el Toro |

+------------+--------------+

Tabla venta

+------------+------------+----------+

| id_factura | id_cliente | cantidad |

+------------+------------+----------+

| 1 | 1 | 23 |

| 2 | 3 | 39 |

| 3 | 2 | 81 |

+------------+------------+----------+

Hay dos registros en la tabla cliente, pero existen 3 id_cliente distintos en la tabla venta. Habíamos dicho que las dos tablas se relacionan con el campo id_cliente, por lo tanto, podemos decir que Juan Penas tiene una cantidad de 23, y Pepe el Toro 81, sin embargo, no hay un nombre que se corresponda con el id_cliente 3.

Las relaciones de claves foráneas se describen como relaciones padre/hijo (en nuestro ejemplo, cliente es el padre y venta es el hijo), y se dice que un registro es huérfano cuando su padre ya no existe.

Cuando en una base de datos se da una situación como esta, se dice que se tiene una integridad referencial pobre (pueden existir otra clase de problemas de integridad). Generalmente esto va ligado a un mal diseño, y puede generar otro tipo de problemas en la base de datos, por lo tanto debemos evitar esta situación siempre que sea posible.

En el pasado, MySQL no se esforzaba en evitar este tipo de situaciones, y la responsabilidad pasaba a la aplicación. Para muchos desarrolladores, esta no era una situación del todo grata, y por lo tanto no se consideraba a MySQL para ser usado en sistemas "serios". Por supuesto, esta fue una de las cosas más solicitadas en las anteriores versiones de MySQL; que se tuviera soporte para claves foráneas, para que MySQL mantenga la integridad referencial de los datos.

Una clave foránea es simplemente un campo en una tabla que se corresponde con la clave primaria de otra tabla. Para este ejemplo, el campo id_cliente en la tabla venta es la clave foránea. Nótese que este campo se corresponde con el campo id_cliente en la tabla cliente, en dónde este campo es la clave primaria.

Las claves foráneas tienen que ver precisamente con la integridad referencial, lo que significa que si una clave foránea contiene un valor, ese valor se refiere a un registro existente en la tabla relacionada.

Claves foráneas en MySQL

Estrictamente hablando, para que un campo sea una clave foránea, éste necesita ser definido como tal al momento de crear una tabla. Se pueden definir claves foráneas en cualquier tipo de tabla de MySQL, pero únicamente tienen sentido cuando se usan tablas del tipo InnoDB.

A partir de la versión 3.23.43b, se pueden definir restricciones de claves foráneas con el uso de tablas InnoDB. InnoDB es el primer tipo de tabla que permite definir estas restricciones para garantizar la integridad de los datos.

Para trabajar con claves foráneas, necesitamos hacer lo siguiente:

* Crear ambas tablas del tipo InnoDB.

* Usar la sintaxis FOREIGN KEY(campo_fk) REFERENCES nombre_tabla (nombre_campo)

* Crear un índice en el campo que ha sido declarado clave foránea.

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

) TYPE = 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)

) TYPE = INNODB;

La sintaxis completa de una restricción de clave foránea es la siguiente:

[CONSTRAINT símbolo] FOREIGN KEY (nombre_columna,

...

Descargar como (para miembros actualizados)  txt (19.4 Kb)  
Leer 14 páginas más »
Disponible sólo en Clubensayos.com