¿Qué es el arco exclusivo en la base de datos y por qué ' es malo?

Estaba leyendo los errores de diseño de bases de datos más comunes cometidos por el desarrollador Q & A sobre stackoverflow. En la primera respuesta, había una frase sobre el arco exclusivo:

Un arco exclusivo es un error común cuando se crea una tabla con dos o más claves externas donde una y solo uno de ellos puede ser no nulo. Gran error. Por un lado, se vuelve mucho más difícil mantener la integridad de los datos. Después de todo, incluso con integridad referencial, nada impide que se establezcan dos o más de estas claves externas (a pesar de las complejas restricciones de verificación).

Realmente no «No entiendo por qué el arco exclusivo es malo. Probablemente no entendí los conceptos básicos de esto. ¿Hay alguna buena explicación sobre los arcos exclusivos?

Respuesta

Por lo que entendí hace mucho tiempo, en un exclusivo arc una tabla contiene una cantidad de columnas que son claves foráneas para otras tablas, pero solo una de ellas se puede configurar a la vez (debido a alguna restricción lógica en el dominio que sigue al mundo real). Como esta regla no se puede hacer cumplir en la base de datos, se podría crear un registro corrupto donde más de una de estas claves foráneas tenga un valor.

Haré un ejemplo. Considere una aplicación donde una empresa realiza un seguimiento de los camiones que utiliza para entregar mercancías. Un camión solo puede estar en uno de tres lugares al mismo tiempo: puede estar con un empleado, puede estar en un estacionamiento o puede estar en un taller de mantenimiento. Esto podría ser modelado teniendo una Truck-table con employeeId, parkingGarageId y maintenanceShopId, haciendo referencia a las tablas Employee, ParkingGarage y MaintenanceShop. No hay forma de hacer cumplir la regla de que solo uno de estos campos se completa en el nivel de la base de datos. Código incorrecto o alguien con acceso directo a la base de datos podría insertar un registro que tenga dos o tres campos llenos, lo que equivale a corrupción de datos en la base de datos.

Comentarios

  • Las tres posibles ubicaciones de camiones son subclases de una superclase, " ubicación del camión ". Hay muchos casos en los que las subclases se excluyen mutuamente. El desafío es cómo modelar clases y subclases en tablas relacionales.
  • Estoy de acuerdo en que hay casos en los que se justifica el uso de este diseño. Sin embargo, también puedo estar de acuerdo con la publicación original en que este patrón se usa MUCHO más de lo que debería. También tiene algunas desventajas muy importantes …
  • ¿No se puede usar una restricción de verificación? Por ejemplo, alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null)). No ' t me gustan los arcos exclusivos, pero se pueden aplicar con una restricción de verificación. Por supuesto, la restricción FK también debe estar presente.
  • Por lo tanto, las " restricciones de verificación complejas a pesar de " de la publicación citado anteriormente. Es posible que pueda hacer una validación realmente sofisticada con restricciones de verificación o diablos, incluso disparadores, que no ' t lo convierten en una buena idea o una muestra de buen diseño. Imagínese haciendo restricciones de comprobación en arcos exclusivos con cuatro o cinco columnas … Además, ' estoy bastante seguro de que no todos los motores de base de datos admitir la restricción CHECK . MySQL declara explícitamente en los documentos que las cláusulas CHECK se analizan, pero se ignoran …
  • Esta fuente recomienda un arco exclusivo. ¿Pensamientos?

Respuesta

No hay nada malo en los arcos exclusivos. Simplemente aplique la regla comercial correspondiente mediante una restricción de verificación. La mayoría de los principales sistemas de administración de bases de datos admiten restricciones de verificación (Oracle, SQL Server, PostgreSQL). Si está utilizando una herramienta de modelado de datos, es muy probable que su herramienta genere automáticamente el código para implementar la restricción de verificación.

Respuesta

El arco exclusivo es muy útil en el diseño conceptual o lógico. No significa que tengas que implementar de esa manera. En el ejemplo anterior, el diseñador puede decidir implementar el diseño con tres tablas. Una para estacionamiento ubicación, uno para el empleado y otro para el taller de mantenimiento.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *