¿Hay ventajas en el uso de las restricciones de clave externa cuando se trabaja en un marco de registro activo como Ruby-on-rails?

StackOverflow https://stackoverflow.com/questions/3168995

Pregunta

Ya estoy de vuelta en el desarrollo web a tiempo completo después de una pausa de 5 años en movimiento. Mi experiencia previa (sin registro activo o MVC) me dice que ser muy cuidadoso con mi esquema de base de datos. restricciones de claves foráneas, índices únicos, etc ... realmente puede ayudar cuando su código espagueti escritura.

¿La comunidad todavía encontrar estos útiles cuando se trabaja en un marco de grabación / MVC activo?

Editar

Mi preocupación principal es la gestión de las limitaciones en dos lugares; el código del modelo y el PP. Este medio de duplicar el trabajo y que podría dar lugar a errores. Es decir. usted tiene una restricción única en algún campo en la base de datos, pero el modelo no se sabe al respecto? Creo que lo contrario es cierto, así, usted podría olvidarse de poner la restricción en el modelo, entonces tendría datos duplicados cuando no lo desea.

¿Fue útil?

Solución

Se trabajará muy bien, sin embargo, en los casos usted tiene que tener cuidado de doble condición errores clic raza (como sufre validates_uniqueness_of de las condiciones de carrera).

Por lo que el modelo se refiere a que no le importa, la lógica en la base de datos es independiente de la lógica en la aplicación Rails.

Otros consejos

Si usted no utiliza limitaciones, su base de datos acumulan los casos de integridad referencial roto y duplicados donde debería haber valores únicos, etc.

Más al punto, si lo hace restricciones de uso (y no obtiene en el hábito de la desactivación de vez en cuando como algunas personas lo hacen), usted siempre tiene la seguridad de que todos sus datos se ajusta a los datos destinados modelo.

Ese es el valor de las limitaciones de bases de datos reforzado: se trata de la única manera que puede estar seguro de sus datos, y usted no tendrá que vuelva a comprobar que su marco (por ejemplo ActiveRecord) ha funcionado correctamente. Usted no tendrá que escribir secuencias de comandos SQL de limpieza para encontrar huérfanos espurios y duplicados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top