restricciones base de datos no se requieren más de lo que el uso de cinturones de seguridad son obligatorios en su coche. Puede manejar todo lo que quiera y todo funcionará bien hasta que llegue un problema. El cinturón de seguridad (restricciones) lo mantiene a usted (a los datos) a salvo.
Por lo tanto, es muy recomendable que cree restricciones para aplicar la integridad de datos a nivel de base de datos, porque es muy probable que 1) Interactúe con la base de datos en algún momento fuera de Rails y 2) Cometerá un error su código que causa datos no válidos.
limitaciones de bases de datos pueden ser más trabajo, pero ahorra mucho trabajo, sobre todo cuando su código puede hacer suposiciones acerca de los datos y no tiene que hacer un montón de comprobaciones de validez.
La razón por la cual ActiveRecord no admite las claves externas de fábrica es porque debe ser una base de datos independiente, y las claves externas no son universalmente compatibles con todos los sistemas de bases de datos.
¡Me gusta la analogía del cinturón de seguridad! – Zabba
Otra razón: a menos que su aplicación Rails sea un proceso, un hilo, ejecutándose en un solo servidor, puede procesar varias solicitudes a la vez. Cosas como 'validates: username, unicity: true' pueden fallar en ese caso, porque cada instancia de aplicación busca el nombre de usuario solicitado, no lo encuentra y lo inserta. Solo un índice único lo impide. En general, cualquier verificación como "¿esta información es válida dado lo que hay en la base de datos ** ahora mismo?" solo puede ser realizado confiablemente por la base de datos en sí misma. –