¿Cómo se determina si una tabla de base de datos de relación méritos la integridad referencial?

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

Pregunta

Tengo una aplicación donde la mayoría de las tablas de la base tiene una fuerte relación con otra mesa. Actualmente estoy exigir la integridad referencial con claves externas, pero me pregunto si esto es realmente el mejor enfoque. Los datos en la tabla principal se pueden eliminar de una interfaz de administración de usuarios de la empresa, lo que implica tener que hacer una eliminación en cascada, (o escribir varias instrucciones delete), pero no estoy seguro de si realmente desea eliminar todos los datos a que otros al mismo tiempo. Podría ser una gran cantidad de datos que * puede * ser útil en una fecha posterior (informes tal vez?). Sin embargo, los datos de las tablas secundarias es básicamente inútil para la aplicación en sí a menos que exista la relación con la tabla principal.

¿Fue útil?

Solución

Dada la opción, siempre guardo los datos alrededor. Y puesto que ya tiene las claves externas en su lugar, tener alguna protección incorporada de violaciónes de integridad.

Si lo que los usuarios quieren es "eliminar" un registro, por lo tanto, ocultándola de la aplicación, tenga en cuenta la estrategia de "virtual de borrado." - marcar un récord como inactivos, en lugar de eliminar físicamente de la base de datos

En cuanto a la aplicación, en función de su base de datos, añadir lo que equivale a la lógica booleana / bits para su mesa. Todas las filas se asignan verdadero / 1 por defecto; "Borra" están marcados como falso / 0.

Otros consejos

Puede utilizar las claves externas y relaciones para exigir la integridad referencial sin tener que usar eliminaciones en cascada. Raramente uso borrados en cascada como siempre he encontrado a menudo es mejor tener los datos y gestionar / archivar bien de lo que es para eliminarlo .

Sólo tiene que escribir su propia lógica de eliminación para apoyar sus propias reglas de negocio.

supresiones lógicas funcionan de manera excelente, así y que los utilizan ampliamente.

No desea eliminar algunos de los datos - es probable que va a terminar con los datos sin escrúpulos, que no tiene idea de donde debía estar en el primer lugar. Es o todo o nada.

Soft eliminar, es decir, que tiene un campo de bits en cada fila que determins si el registro está "borrado" o no es el camino a seguir. De esta manera, sólo tiene que comprobar si el registro se borra == true en la API, y lo oculta de la aplicación.

A mantener los datos, pero nadie puede recuperarla a través de la aplicación.

Yo diría que el uso de claves foráneas, por regla general - este "salvaguardias" el diseño de su base de datos a largo plazo, así como la integridad de los datos en sí. Las restricciones son también a estado de forma explícita la decisión de un diseñador.

restricciones

que he visto en deshicieron extremadamente grandes bases de datos - que sería una de las razones para no usarlos, si se compara el rendimiento y hay una sobrecarga de clave externa significativa.

que haría uso de lógica / suave eliminar . Básicamente, esto significa añadir una columna más (posiblemente Deleted columna de bits) a la tabla en cuestión, lo que marcaría una fila en particular como eliminado.

Eso dijo, "borrado" de datos es sólo eso: suprimido. Por lo tanto, no puede lógicamente ser utilizado en informes y cosas similares. Para superar esto, también me presento columna Hidden ocultar ciertas filas que conservan su significado lógico.

Nunca hacer eliminaciones físicas. Puede añadir una bandera BOOL isDeleted para indicar el registro se borra. Cuando se quiere "Borrar" un registro, sólo tiene que establecer el indicador en True.

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