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