¿Rails necesita restricciones a nivel de base de datos?


Tengo el mismo problema que en el siguiente post.

Así que me pregunto, ¿por qué Rails no soporta la generación de claves foráneas por defecto? ¿No es necesario? ¿O se supone que debemos hacerlo manualmente?

Author: Community, 2010-04-07

2 answers

Las restricciones de base de datos no son necesarias más que el uso de cinturones de seguridad son necesarios en su coche. Puedes conducir todo lo que quieras y todo funcionará genial hasta que llegue un problema. El cinturón de seguridad (restricciones) lo mantiene (los datos) seguro.

Por lo tanto, es muy recomendable que cree restricciones para reforzar la integridad de los 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) Cometa un error en su código que causa datos no válidos.

Las restricciones de base de datos pueden ser más trabajo, pero ahorra mucho trabajo, especialmente cuando su código puede hacer suposiciones sobre los datos y no tiene que hacer toneladas de comprobaciones de validez.

La razón por la que ActiveRecord no soporta llaves foráneas fuera de la caja es porque está destinado a ser independiente de la base de datos, y las llaves foráneas no son universalmente soportadas por todos los sistemas de bases de datos.

 56
Author: Tilendor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-16 17:00:20

Puede agregar soporte de clave externa con el complemento Foreigner.

No todas las bases de datos soportadas para ActiveRecord admiten claves foráneas, por lo que el framework Rails no la incluye como característica principal.


Nota: lo anterior ya no es exacto, ya que Rails agregó soporte FK en 4.2.

 9
Author: Adam Lassek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 00:27:50