Pregunta

¿Puede compartir sus pensamientos ¿cómo poner en práctica los datos de versiones en PostgreSQL. (He pedido pregunta similar con respecto Cassandra y MongoDB . Si tienes alguna idea, que dB es mejor para esa acción, por favor)

Supongamos que necesito registros de versión en una libreta de direcciones simple. registros de la libreta de direcciones se almacenan en una tabla sin relaciones de simplicidad. Espero que la historia:

  • se utiliza con poca frecuencia
  • será utilizado a la vez para presentarlo de una manera "máquina del tiempo"
  • no habrá más versiones que unos pocos cientos a un único registro.
  • historia no expirará.

Estoy considerando los siguientes enfoques:

  • Crear una nueva tabla de objetos para almacenar el historial de registros con una copia del esquema de la tabla de direcciones y agregue marca de tiempo y la clave externa a la tabla de la libreta de direcciones.

  • Crea un tipo de esquema de tabla para almacenar menos cambios en los registros de libreta de direcciones. Dicha tabla consistiría en: AddressBookId, fecha y hora, NombreCampo, Valor. De esta manera me gustaría almacenar sólo los cambios a los registros y no tendría que seguir tabla de historial y mesa libreta de direcciones en sincronía.

  • Crear una tabla para almacenar seralized (JSON) registros de la libreta de direcciones o cambios a los registros de la libreta de direcciones. Dicha mesa sería el siguiente aspecto: AddressBookId, fecha y hora, el objeto (varchar). De nuevo, esto es menos de esquema para no tener que seguir la tabla de historial con mesa de libreta de direcciones en sincronía. ( Esto se modela después de simple versiones de documentos con CouchDB )

¿Fue útil?

Solución

hacer algo como el segundo enfoque: tener la mesa con el conjunto real de trabajo y una historia con cambios (marca de tiempo, record_id, property_id, valor_propiedad). Esto incluye la creación de registros. Una tercera tabla describe las propiedades (id, nombre_propiedad, property_type), que ayuda en la conversión de datos más arriba en la aplicación. Por lo que también puede realizar un seguimiento muy fácilmente cambios de las propiedades individuales.

En lugar de una marca de tiempo que podría también tener un int similar, cosa que se incremento para cada cambio por record_id, por lo que tiene un versión actual .

Otros consejos

podría tener start_date y end_date.

Cuando end_date es NULL, `s el registro actual.

Estoy versionando los datos del glosario, y mi enfoque era bastante exitoso para mis necesidades. Básicamente, para los registros que necesita de versiones, se divide el conjunto de campos en los campos persistentes y campos dependientes de la versión, creando así dos tablas. Algunos de la primera serie también debe ser la clave única para la primera tabla.

Dirección
Identificación [pk]
nombre completo [uk]
cumpleaños [uk]
Versión
Identificación [pk]
address_id [uk]
marca de tiempo [uk]
dirección

De esta manera, se obtiene una dirección determinada por los sujetos nombre completo y fecha de nacimiento (no debe cambiar por el control de versiones) y unos registros que contengan direcciones versionados. address_id debe estar relacionada con Dirección: id a través de clave externa. Con cada entrada en la tabla Versión obtendrá una nueva versión para el sujeto. Dirección: id = address_id con una marca de tiempo específico, de qué manera se puede tener una referencia de la historia

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