2009-03-10 19 views
5

Tengo una base de datos con una tabla de informes. Esta tabla representa los datos del informe y tiene restricciones. Ahora la aplicación es utilizada por los bomberos, y es posible que tengan que salir corriendo y apagar algunos incendios. Por lo tanto, en el medio de completar datos para esta tabla, es posible que tengan que salir corriendo. Lo que hacemos es que cuando se termina la sesión guardamos los datos en una tabla de borrador, donde simplemente serializamos el gráfico de objetos, sin restricciones (ya que no podemos saber si todo está en un estado válido). Y cuando el bombero quiere retirar los datos nuevamente, simplemente retiramos el borrador nuevamente.versión preliminar de la tabla de la base de datos

¡Esto funciona bien! Sin embargo, los bomberos ahora quieren poder buscar en la mesa y en la mesa de reclutamiento. Así que aquí me gustaría quizás almacenar todos los datos (incluido el borrador) en una tabla, que busco, así que no tengo que consolidar la búsqueda de dos tablas ...

¿Hay algún tipo de base de datos? patrón para borradores? Lo que quiero es un patrón para almacenar datos sin restricciones (en modo borrador) y con restricciones (en modo final).

Respuesta

1

Vaya con la solución simple: cree una vista que sea simplemente una unión de las dos tablas (lo cual debería ser bastante sencillo ya que supongo que ambas tienen estructuras (casi) idénticas) y luego ejecute búsquedas sobre eso como fuente si quieren incluir ambos.

En realidad, no fusionaría los datos completos y de borrador en ningún momento: la posibilidad de error y el uso accidental de datos no validados parece enorme.

No estaría trabajando en una interfaz para el IRS en el Reino Unido en este momento, ¿verdad? Si no, suena como si DK hubiera optado por una solución similar (en principio) a este problema (yo solía trabajar para un Servicio de Bomberos y Rescate del Reino Unido).

+0

No trabajando en el IRS no :-) ¿No duplicaríamos nuestro mantenimiento? Quiero decir que si agregamos una columna a una tabla, tendríamos que agregarla a la otra tabla (y la vista por cierto) – khebbie

+0

Sí, pero ya tendrás que hacerlo, ¿no? No será necesario enmendar la unión en tanto que las dos tablas coincidan exactamente: simplemente use "[Table1] UNION [Table2];" sin especificar nombres de campo. – mavnn

1

No sé de un patrón de base de datos para borradores, pero le sugiero que guarde su tabla separada si necesita validación y simplemente busca en ambas tablas.

3

No sé si esto calificaría como un patrón, pero creo que la manera más limpia de hacerlo sería crear una vista que una unión de las dos tablas y buscar en contra de eso.

+0

esto también fue mi primer pensamiento – user29964

0

He pensado bastante largo y tendido sobre este problema, y ​​aquí está mi respuesta:

  1. borradores de la tienda y sus correspondientes entidades validados en la misma mesa. tiene una columna is_draft

  2. uso is_draft = 1 para desactivar la validación de los disparadores y las restricciones de comprobación, o las reglas de validación de ORM

  3. muchos de sus campos tendrán que ser anulable o tienen valores por defecto

esto tiene varias ventajas:

  1. borradores y sus correspondientes entidades validadas se almacenan en la misma mesa

  2. borradores y sus correspondientes entidades validadas tienen la misma identificación. ¿Porque es esto importante?

imagine que puede comenzar un presupuesto para un cliente. guardarlo obtiene una identificación. lo estás viendo en un navegador web/quotes/id/55. empiezas a editar esa cita, eliminas un valor requerido porque estaba equivocado. tienes que ir a la puerta de al lado para buscarlo, pero quieres guardarlo. el número de identificación no debería cambiar.

también sería confuso para las personas si están colaborando en el mismo documento y su identificación cambia constantemente si entra y sale de un estado válido.

Cuestiones relacionadas