5

Come rappresenteresti una relazione molti-a-molti in SQL temporal? In circostanze non temporali si usa uno junction table (alias link/bridge/map) per collegare i due lati.Come crei una relazione temporale molti-a-molti in SQL?

L'aggiunta del monitoraggio temporale è semplice come includere le colonne ValidStart e ValidEnd sulla tabella di giunzione? Se hai fatto questo, quali problemi (se ce ne sono) hai incontrato? Esiste un metodo migliore per tenere traccia dei cambiamenti nel tempo in questo tipo di relazione?

Se è utile, nel mio caso sto specificatamente utilizzando SQL 2008 e i dati temporali non sono bitemporal poiché sto monitorando solo l'ora valida.

risposta

5

Sto lavorando a un progetto (da qualche anno a questa parte) che utilizza sia dati temporali che rapporti temporali molti-a-molti. Ogni tabella contiene colonne ValidFrom e ValidUntil (solo per la memorizzazione delle date).

Per prima cosa è necessario definire la semantica delle colonne Valid *, vale a dire se ValidUntil è incluso o escluso dall'intervallo di validità. È inoltre necessario specificare se le date NULL sono valide e qual è il loro significato.

Successivamente è necessario un paio di funzioni, come dbo.Overlaps2() e dbo.Overlaps3() che ricevono rispettivamente 2 e 3 intervalli di date e restituiscono 1 se gli intervalli di date si sovrappongono e 0 in caso contrario.

Inoltre, ho definito le viste per le relazioni molti-a-molti con dbo.Overlap3 (...) = 1.

Un altro punto è disporre di un set di funzioni che calcolano l'intervallo di validità effettivo in base alle date in 2 o 3 tabelle correlate.

Recentemente ho dovuto aggiungere funzionalità per consentire a un utente di visualizzare tutti i dati disponibili o solo i dati attualmente validi. Salvare questa impostazione in una tabella utenti, associare lo SPID all'utente quando si apre una connessione e filtrare i record in un'altra serie di viste.

+0

Wow, hai lavorato molto con questo. Inizialmente pensavo a "prezzi efficaci" su una tabella di prodotti come esempio, ma chiaramente ci sono molti altri usi per "incontri efficaci" rispetto a quello. – jeremcc