Cómo mantener la integridad referencial en una base de datos sql de varias tablas

Incluso si cada mesa en su sistema SQL tiene la integridad de entidad y la integridad de dominio, es posible que tenga un problema debido a inconsistencias en la forma de una tabla se relaciona con otro. En bases de datos multitable más bien diseñados, cada tabla contiene al menos una columna que se refiere a una columna de otra tabla en la base de datos.

Estas referencias son importantes para mantener la integridad general de la base de datos. Las mismas referencias, sin embargo, hacen posible anomalías de actualización. anomalías de actualización son problemas que pueden ocurrir después de actualizar los datos en una fila de una tabla de base de datos.

Problemas entre tablas primarias y secundarias

Las relaciones entre tablas generalmente no son bidireccionales. Una tabla es por lo general depende de la otra. Decir que usted tiene una base de datos con una tabla de clientes y una tabla de pedidos. Puede ingresar un cliente en la tabla CLIENTE antes de que ella hace órdenes. No se puede, sin embargo, introducir una orden en la tabla PEDIDOS menos que ya tenga una entrada en la tabla de clientes para el cliente que está haciendo ese orden.

Video: 013 Eliminar Datos Multi Tablas para Datos Relacionados en MySQL

La tabla PEDIDOS depende de la tabla de clientes. Este tipo de arreglo se llama a menudo relación padre-hijo, donde el cliente es la tabla primaria y órdenes es la tabla secundaria. El niño depende de los padres.

En general, la clave principal de la tabla principal es una columna (o grupo de columnas) que aparece en la tabla secundaria. Dentro de la tabla secundaria, esa misma columna (o grupo) es una clave externa. Tenga en cuenta, sin embargo, que una clave externa no tiene que ser único.

surgen anomalías de actualización de varias maneras entre tablas primarias y secundarias. Un cliente se aleja, por ejemplo, y que desea eliminar su información de su base de datos. Si ya ha hecho algunos pedidos (que se registran en la tabla pedidos), la eliminación de ella de la tabla CLIENTE podría presentar un problema.

Tendrías registros de la tabla PEDIDOS (niño) para los que tiene no hay registros correspondientes en la tabla CLIENTE (padre). Pueden surgir problemas similares si se agrega un registro a una tabla secundaria sin hacer una adición correspondiente a la tabla primaria.

Las claves externas correspondientes en todas las tablas secundarias deben reflejar cualquier cambio en la clave principal de una fila de una matriz mesa- lo contrario se producirá un actualización de anomalías.

Utilice eliminaciones en cascada con cuidado

Puede eliminar la mayoría de los problemas de integridad referencial al controlar cuidadosamente el proceso de actualización. En algunos casos, usted tiene que cascada supresiones de una tabla padre a sus hijos. Para una eliminación en cascada cuando se elimina una fila de una tabla primaria, también se eliminan todas las filas en sus tablas secundarias cuyas claves extranjera que coincida con la clave principal de la fila eliminada de la tabla primaria.

Echar un vistazo al siguiente ejemplo:

Crear el cliente TABLA (ClientName CHAR (30) PRIMARY KEY, Address1 CHAR (30), Dirección 2 CHAR (30), CityCHAR (25) NOT NULL, StateCHAR (2), PostalCode CHAR (10), PhoneCHAR (13), Fax CHAR ( 13), Persona de contacto CHAR (30)) PRUEBAS TABLA -create (TestName CHAR (30) PRIMARY KEY, StandardCharge CHAR (30)): Para crear EMPLEADOS TABLA (EmployeeName CHAR (30) PRIMARY KEY, ADDRESS1 CHAR (30), Dirección 2 CHAR ( 30), CityCHAR (25), StateCHAR (2), PostalCode CHAR (10), HomePhone CHAR (13), OfficeExtension CHAR (4), HireDate fecha, JobClassification CHAR (10), HourSalComm CHAR (1)) ÓRDENES TABLA -create (OrderNumber INTEGER PRIMARY KEY, ClientName CHAR (30), TestOrdered CHAR (30), Vendedor de CHAR (30), OrderDate FECHA, CONSTRAINT NameFK EXTERIOR clave (CLIENTNAME) REFERENCIAS cliente (ClientName) ON CASCADE DELETE, CONSTRAINT TestFK FOREIGN KEY (TestOrdered) REFERENCIAS PRUEBAS (TestName) ON DELETE CASCADE, la restricción FOREIGN KEY SalesFK (Vendedor) las referencias a los empleados (EmployeeName) ON DELETE CASCADE) -

la restricción NameFK nombres Nombre del cliente como una clave externa que hace referencia el Nombre del cliente columna en la tabla de clientes. Si elimina una fila en la tabla de clientes, también se eliminan automáticamente todas las filas de la tabla pedidos que tienen el mismo valor en el Nombre del cliente columna como los de la Nombre del cliente columna de la tabla CLIENTE.

Video: Access 2007: Construir Relaciones Entre Tablas

Las cascadas de eliminación abajo de la tabla del cliente a la tabla Pedidos. Lo mismo es cierto para las claves externas de la tabla Pedidos que hacen referencia a las claves primarias de las pruebas y las tablas de los empleados.

formas alternativas de controlar anomalías de actualización

Puede que no quiera poner en cascada una deleción. En su lugar, es posible que desee cambiar la clave externa de la tabla secundaria a una NULO valor. Considere la siguiente variante:

Crear órdenes TABLA (OrderNumber INTEGER PRIMARY KEY, ClientName CHAR (30), TestOrdered CHAR (30), SalesPerson CHAR (30), OrderDate FECHA, CONSTRAINT NameFK EXTERIOR clave (CLIENTNAME) REFERENCIAS cliente (ClientName), CONSTRAINT TestFK FOREIGN KEY (TestOrdered) REFERENCIAS PRUEBAS (TestName), la restricción FOREIGN KEY SalesFK (Vendedor) las referencias a los empleados (EmployeeName) ON DELETE SET NULL) -

la restricción SalesFK nombres del vendedor columna como una clave externa que hace referencia el Nombre de empleado columna de la tabla de los empleados. Si un vendedor deja la compañía, se elimina la fila de la tabla EMPLOYEE. Nuevos vendedores son finalmente asignados a sus cuentas, pero por ahora, borrar su nombre de la tabla EMPLOYEE hace que todos sus órdenes en la mesa para recibir un valor nulo en el vendedor columna.

Video: Modelo Relacional e Integridad Referencial

También puede mantener los datos inconsistentes fuera de una base de datos mediante el uso de uno de estos métodos:

  • Negarse a permitir una adición a una tabla secundaria hasta que exista una fila correspondiente en la tabla padre. Si se niega a permitir que las filas de una tabla secundaria sin una fila correspondiente en una tabla primaria, se evita la aparición de filas “huérfanos” en la tabla secundaria. Esta negativa ayuda a mantener la coherencia entre las tablas.

    Video: Base de datos con integridad referencial en cascada MYSQL

  • Negarse a permitir cambios en la clave principal de una tabla. Si se niega a permitir cambios en la clave principal de una tabla, no es necesario que preocuparse de actualizar las claves externas de otras tablas que dependen de esa clave primaria.

Artículos Relacionados