5

¿Cómo representaría una relación de varios a varios temporal en SQL? En circunstancias no temporales uno usaría un junction table (también conocido como enlace/puente/mapa) para conectar los dos lados.¿Cómo harías una relación temporal de muchos a muchos en SQL?

¿Está agregando el seguimiento temporal tan simple como incluir una columna ValidStart y ValidEnd en la tabla de unión? Si ha hecho esto, ¿qué problemas (si los hubiere) se encontró? ¿Existe un método mejor para realizar un seguimiento de los cambios a lo largo del tiempo en este tipo de relación?

Si sirve de algo, en mi caso estoy usando específicamente SQL 2008 y los datos temporales no son bitemporal ya que solo estoy rastreando la hora válida.

Respuesta

5

Estoy trabajando en un proyecto (desde hace algunos años) que utiliza datos temporales y relaciones temporales de muchos a muchos. Cada tabla tiene columnas ValidFrom y ValidUntil (solo fechas de almacenamiento).

Primero debe definir la semántica de las columnas válidas *, es decir, si ValidUntil está incluido o excluido del rango de validez. También debe especificar si las fechas NULL son válidas y cuál es su significado.

A continuación necesita un par de funciones, como dbo.Overlaps2() y dbo.Overlaps3() que reciben 2 y 3 intervalos de fechas respectivamente, y devuelve 1 si los rangos de fecha se superponen y 0 en caso contrario.

Además de eso, definí las vistas para las relaciones de muchos a muchos con dbo.Overlap3 (...) = 1.

Un punto adicional es tener un conjunto de funciones que calculen el rango de validez efectivo en función de las fechas en 2 o 3 tablas relacionadas.

Recientemente tuve que agregar la funcionalidad para permitir que un usuario muestre todos los datos disponibles, o solo datos actualmente válidos. Guardo esta configuración en una tabla de usuarios, asocie el SPID al usuario al abrir una conexión y filtre los registros en otro conjunto de vistas.

+0

Guau, has trabajado mucho con esto. Inicialmente pensé en "precios efectivos" en una tabla de productos como ejemplo, pero claramente hay muchos más usos para "citas efectivas" que eso. – jeremcc

Cuestiones relacionadas