¿Por qué se aplican restricciones en la base de datos? ¿No será más flexible ponerlo en el código?
Estoy leyendo un libro para principiantes sobre la implementación de bases de datos, así que estoy preguntando esto como principiante. Digamos que he diseñado una base de datos, incluido este modelo de entidad:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Restricciones actuales:
- Una persona registrada en el sistema solo puede ser un Estudiante o un Empleado.
- La entidad de la persona requiere la unicidad del número social, que suponemos que cada persona tiene solo un único (también conocido como una clave primaria lo suficientemente buena ). (ver # 1)
Más tarde, decidimos eliminar el número 1: si un día la universidad decide que el Teacher
(el Employee
subtipo) también puede ser Student
, tomando cursos en su tiempo libre, es mucho más difícil cambiar el diseño de la base de datos que podría tener miles, millones, miles de millones, millones de entradas en lugar de simplemente cambiar la lógica en el código: solo la parte que no permitió que una persona se registrara como estudiante y como empleado.
(Es muy improbable, pero no puedo pensar en otra cosa en este momento. Aparentemente es posible).
¿Por qué nos interesan las reglas comerciales en el diseño de bases de datos en lugar de en el código?
# 1: Una nota 7 años después, un ejemplo de la vida real:
he visto un gobierno donde, por un error, se duplicaron los SSN emitidos: varias personas, el mismo SSN. Aquellos que diseñaron el DB original definitivamente cometieron el error de no aplicar esta restricción de unicidad en la base de datos. (¿y luego un error en la aplicación original? ¿múltiples aplicaciones que usan la base de datos compartida y no acuerdan dónde colocar, verificar y aplicar la restricción? ...).
Este error continuará viviendo en el sistema y todo el sistema desarrollado después de lo cual dependerá de la base de datos de ese sistema original, durante muchos años por venir. Leyendo las respuestas aquí, aprendí a aplicar todas las restricciones, tantas como sea posible, sabiamente (no a ciegas) en la base de datos para representar el mundo físico real lo mejor que pueda.