sql >> Base de Datos >  >> RDS >> Oracle

¿Puede la clave externa ser nula?

La columna (o columnas) de una clave primaria debe ser NOT NULL. Un registro no puede ser identificado de forma única por un NULL. Por lo tanto, las columnas de ID en el extremo al que se hace referencia de la clave externa deben definirse como NOT NULL.

Sin embargo, es una decisión de diseño legítima que una relación de clave externa sea opcional, y la forma de representarlo es haciendo que el extremo de referencia de la clave sea opcional, es decir, permitir valores NULL.

En términos de modelado de datos, lo que ha descrito es un arco (exclusivo):"una tabla ... con dos o más claves externas donde una y solo una de ellas puede ser no nula". En el modelado lógico, los arcos son perfectamente aceptables, pero existe una fuerte opinión a favor de implementarlos como tablas separadas. En su escenario, sería una Sale genérica tabla más dos tablas de subtipos, VehicleSale y PieceSale .

Las ventajas de la implementación de tablas separadas son:

  • más fácil de hacer cumplir las restricciones de clave externa;
  • más fácil agregar columnas adicionales relacionadas con (digamos) ventas de vehículos que no se aplican a las ventas por piezas;
  • más fácil ampliar el modelo con subtipos adicionales;
  • modelo de datos más claro, que puede simplificar el desarrollo de aplicaciones.

Sin embargo, las ventajas no son todas unidireccionales. Si bien es bastante fácil asegurarse de que una Sale se aplica a una VehicleSale o una PieceSale pero no ambos, haciendo cumplir la regla de que una Sale debe tener un registro de un niño en realidad se vuelve bastante retorcido.

Entonces, el consejo que prevalece es que un arco exclusivo es un error, y generalmente es un buen consejo. Pero no es tan claro como algunos creen.



No