Respuesta

56

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.

+13

¡Me gusta la analogía del cinturón de seguridad! – Zabba

+1

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

9

Puede añadir soporte-clave externa con la Foreigner plugin.

No todas las bases de datos compatibles con ActiveRecord soportan claves foráneas, por lo que el marco de los carriles no lo incluye como una característica central.


Nota: lo anterior ya no es exacto, como carriles added FK support en 4.2.

+0

lo sé ..... solo quiero saber..¿lo necesitamos? ..... – jojo

+2

La respuesta corta es sí, es importante, pero por defecto tiene que usar ': options' picadillo. ActiveRecord vive en un nivel de abstracción donde no puede asumir soporte para FK. –

Cuestiones relacionadas