#sqlsatPordenone #sqlsat495 February 27, 2016 SQL Server 2016 Temporal Database Support Gianluca
#sqlsatPordenone #sqlsat495 February 27, 2016 Organizers
#sqlsatPordenone #sqlsat495 February 27, 2016 Gold Sponsors
#sqlsatPordenone #sqlsat495 February 27, 2016 Bronze Sponsors
#sqlsatPordenone #sqlsat495 February 27, 2016 Gianluca Hotz Fondatore e Mentor SolidQ 20 anni con SQL Server (dalla 4.21 nel 1996) Modellazione basi di dati, dimensionamento e amministrazione, sviluppo, ottimizzazione Interessi Modello relazionale, architettura DBMS, alta disponibilità e Disaster Recovery Microsoft MVP SQL Server dal 1998 Fondatore e vice presidente UGISS User Group Italiano SQL Server (PASS Chapter) Mail: -
#sqlsatPordenone #sqlsat495 February 27, 2016 Agenda Introduzione SQL Server Temporal Tables Cosa manca?
#sqlsatPordenone #sqlsat495 February 27, 2016 INTRODUZIONE
#sqlsatPordenone #sqlsat495 February 27, 2016 Cos’é un database? Collezione strutturata di fatti sottoinsieme di fatti del mondo reale di interesse rappresenta proposizioni considerate vere assiomi permette di derivare nuove proposizioni tramite regole formali di inferenza 8
#sqlsatPordenone #sqlsat495 February 27, 2016 Database e temporalità Database convenzionale Codifica solo dati correnti Dati modificati non appena proposizioni cambiano Dati eliminati non appena proposizioni cessano di essere vere Database temporale Codifica anche dati storici (passati e futuri) Nessuna modifica o eliminazione diretta dei dati
#sqlsatPordenone #sqlsat495 February 27, 2016 Dati senza temporalità Le righe sono proposizioni istanziate dal predicato: Un fornitore identificato da, con nome, con sede nella città, ha un contratto in corso (correntemente). S#SNAMECITY S1GianlucaVarese S2DavideMilano S3AndreaBrescia ……… S (fornitore)
#sqlsatPordenone #sqlsat495 February 27, 2016 Problema dati non temporali Non sappiamo quando è iniziato il contratto Non sappiamo quando termina il contratto Se il contratto è già terminato Non sappiamo quando è finito! La proposizione viene eliminata… …non sapremo neppure che è stato a contratto! Non posso registrare un contratto futuro
#sqlsatPordenone #sqlsat495 February 27, 2016 Semi Temporalizzazione Le righe sono proposizioni istanziate dal predicato: Un fornitore identificato da, con nome, con sede nella città, ha un contratto in corso dal. S#SNAMECITYSINCE S1GianlucaVareseD04 S2DavideMilanoD07 S3AndreaBresciaD03 ………… S_SINCE (fornitore)
#sqlsatPordenone #sqlsat495 February 27, 2016 Problemi dati semi temporali Sappiamo quando è iniziato il contratto Non sappiamo quando termina il contratto Se il contratto è già terminato Non sappiamo quando è finito! La proposizione viene eliminata… …non sapremo neppure che è stato a contratto! Posso registrare un contratto futuro
#sqlsatPordenone #sqlsat495 February 27, 2016 Temporalizzazione completa Le righe sono proposizioni istanziate dal predicato: Un fornitore identificato da, con nome, con sede nella città, ha (o ha avuto o avrà) un contratto in corso dal al. S#SNAMECITYFROMTO S1GianlucaVareseD04D10 S2DavideMilanoD07D10 S3AndreaBresciaD03D10 …………… S_SINCE
#sqlsatPordenone #sqlsat495 February 27, 2016 Problemi dati completamente temporali Interrogazioni Due attributi per indicare gli estremi dell’intervallo Espressioni complesse per filtri o operazioni relazionali Definizione dei vincoli Chiave primaria Dati ridondanti o contradditori in periodi sovrapposti Circonlocuzione Dati ripetuti in periodi immediatamente consecutivi Chiavi esterne Vincolo di integrità deve comprendere il periodo
#sqlsatPordenone #sqlsat495 February 27, 2016 Bi Temporalità Stated Time (o Valid/Application Time) Si riferisce a quando crediamo che qualcosa sia/sia stato/sarà vero secondo quanto sappiamo ora Specificato da utente/applicazione Permette di gestire anche periodi futuri Logged Time (o Transaction/System Time) Si riferisce a quando il database ha registrato qualcosa come vero Gestito direttamente dal sistema Permette di gestire solo presente e passato
#sqlsatPordenone #sqlsat495 February 27, 2016 Bi Temporalità formale Stated Time (o Valid/Application Time) per una proposizione P è l’insieme dei tempi T in modo che, secondo quanto a nostra conoscenza ora, P è, è stata o sarà vera al tempo T. Logged Time (o Transaction/System Time) per una proposizione P è l’insieme dei tempi T in modo che, secondo quanto afferma, o ha affermato, il database al tempo T, P è o è stata vera.
#sqlsatPordenone #sqlsat495 February 27, 2016 Bi Temporalizzazione Le righe sono proposizioni istanziate dal predicato: Un fornitore identificato da, con nome, con sede nella città, ha (o ha avuto o avrà) un contratto in corso dal al Si ritengono vere nel periodo da a S#SNAMECITYFROMTOS_FROMS_TO S1GianlucaVareseD02D10D01D02 S2DavideMilanoD07D10D01D99 S3AndreaBresciaD03D10D01D99 S1GianlucaVareseD04D10D02D99 ………………… S_SINCE
#sqlsatPordenone #sqlsat495 February 27, 2016 SQL SERVER TEMPORAL TABLES
#sqlsatPordenone #sqlsat495 February 27, 2016 «Temporal Table» in SQL Server 2016 «System-versioned Temporal Table» Permette di gestire valori correnti e storici Periodo validità definito da due colonne di tipo datetime2 aggiornato dal sistema a fronte di modifiche Implementata tramite due tabelle fisiche «Current Table» per dati correnti «History Table» per dati storici (modificati) Schema speculare a «Current Table»
#sqlsatPordenone #sqlsat495 February 27, 2016 Scenari obiettivo «Workaround» Complessi Limitati Inefficienti Funzionalità Estensioni DML/DDL ANSI SQL 2011 Time TravelData Audit Slowly Changing Dimensions Repair record- level corruptions
#sqlsatPordenone #sqlsat495 February 27, 2016 «Temporal table» (dati correnti) Insert / Bulk Insert * Versioni vecchie Update */ Delete * «History table» Performance Funzionamento modifiche
#sqlsatPordenone #sqlsat495 February 27, 2016 «Temporal table» (dati correnti) Query temporali * FOR SYSTEM_TIME ALL, AS OF, BETWEEN … AND …, FROM … TO, CONTAINED IN «History table» Query normali (dati correnti) * Include versioni storiche Performance Funzionamento interrogazioni
#sqlsatPordenone #sqlsat495 February 27, 2016 Predicati temporali Image from FOR SYSTEM_TIME
#sqlsatPordenone #sqlsat495 February 27, 2016 Nessun cambio modello di programmazioneNuovi «Insights» INSERT / BULK INSERT UPDATE DELETE MERGE DML SELECT * FROM temporal Querying CREATE temporal TABLE PERIOD FOR SYSTEM_TIME… ALTER regular_table TABLE ADD PERIOD… DDL FOR SYSTEM_TIME AS OF FROM..TO BETWEEN..AND CONTAINED IN Temporal Querying Performance Come iniziare con i dati temporali
#sqlsatPordenone #sqlsat495 February 27, 2016 DEMO Exploring Temporal Tables
#sqlsatPordenone #sqlsat495 February 27, 2016 Modifiche allo schema Prima della CTP3 Disabilitare «versionamento» Modificare entrambi gli schemi Riabilitare «versionamento» Dalla CTP3 In generale, operazione diretta Qualche limite Es. aggiunta colonne «computed», «identity»
#sqlsatPordenone #sqlsat495 February 27, 2016 Gestione «Retention» Stretch Database Partizionamento «History Table» Script di pulizia personalizzato
#sqlsatPordenone #sqlsat495 February 27, 2016 SELECT * FROM Department FOR SYSTEM_TIME AS OF ' ' Considerazioni: 1.Storico più voluminoso dati correnti 2.Dati conservati da 3 a 10 anni 3.«Caldi»: fino a poche settimane/mesi 4.«Freddi»: interrogati raramente Soluzione: Storico come «stretch table»: PeriodEnd < “Now - 6 months” Azure SQL Dùtabase «Stretch Database»
#sqlsatPordenone #sqlsat495 February 27, 2016 Partizionamento «History Table» 1.SWITCH OUT 2.MERGE RANGE 3.SPLIT RANGE Image from
#sqlsatPordenone #sqlsat495 February 27, 2016 Script di pulizia personalizzato Image from
#sqlsatPordenone #sqlsat495 February 27, 2016 Interoperabilità con «In-Memory OLTP» Image from
#sqlsatPordenone #sqlsat495 February 27, 2016 COSA MANCA?
#sqlsatPordenone #sqlsat495 February 27, 2016 Limitazioni Tabelle non possono essere FILETABLE No colonne tipo FILESTREAM No query temporali via «Linked Server» «History Table» nello stesso database «History Table» non può avere vincoli INSERT e UPDATE non possono referenziare colonne periodo TRUNCATE TABLE richiede disabilitazione «versionamento» Dati «History Table» non modificabili direttamente ON [DELETE|UPDATE] CASCADE non permessi INSTEAD OF trigger non permessi AFTER trigger permessi solo su «Current Table» CDC e CDT supportati solo con «Current Table» Altri punti di attenzione…
#sqlsatPordenone #sqlsat495 February 27, 2016 Implementazioni «Valid/Application/Stated Time» Periodo rappresentato tramite intervallo? Operatori relazionali generici? PACK/UNPACK Operatori di Allen Valutare IntervalCID OperatoreNotazioneDefinizione Equals(i 1 = i 2 )(b 1 = b 2 ) AND (e 1 = e 2 ) Before(i 1 before i 2 )(e 1 < b 2 ) After(i 1 after i 2 )(i 2 before i 1 ) Includes (i 1 ⊇ i 2 ) (b 1 ≤ b 2 ) AND (e 1 ≥ e 2 ) Properly Includes (i 1 ⊃ i 2 )(i 1 ⊇ i 2 ) AND (i 1 ≠ i 2 ) Meets(i 1 meets i 2 )(b 2 = e 1 + 1) OR (b 1 = e 2 +1) Overlaps(i 1 overlaps i 2 )(b 1 ≤ e 2 ) AND (b 2 ≤ e 1 ) Merges(i 1 merges i 2 )(i 1 overlaps i 2 ) OR (i 1 meets i 2 ) Begins(i 1 begins i 2 )(b 1 = b 2 ) AND (e 1 ≤ e 2 ) Ends(i 1 ends i 2 )(e 1 = e 2 ) AND (b 1 ≥ b 2 )
#sqlsatPordenone #sqlsat495 February 27, 2016 Risorse - Presentazioni UGISS Workshops Database & Time-Dependent Data - Parte 1 Database & Time-Dependent Data - Parte 1 Database & Time-Dependent Data - Parte 2 Database & Time-Dependent Data - Parte 2 Disponibili demo e Screencast SQL Conference Temporal Database Introduction Temporal Database Introduction
#sqlsatPordenone #sqlsat495 February 27, 2016 Risorse - Libri teoria Temporal Data and The Relational Model Temporal Data and The Relational Model C.J.Date, Hugh Darwen, Nikos A. Lorentzos ISBN Date on Database Writings Date on Database Writings C.J.Date ISBN Un capitol con critica a standard proposto TSQL2 Time and Relational Theory: Temporal Databases in the Relational Model and SQL Time and Relational Theory: Temporal Databases in the Relational Model and SQL C.J.Date, Hugh Darwen, Nikos A. Lorentzos ISBN Completamente riscritto (include standard SQL 2011)
#sqlsatPordenone #sqlsat495 February 27, 2016 Risorse - Libri implementazione Inside Microsoft SQL Server 2008: T-SQL Programming Inside Microsoft SQL Server 2008: T-SQL Programming Itzik Ben-Gan, Dejan Sarka, Greg Low et al ISBN Capitolo su dati temporali, UDT basato su CLR e intervalli Developing Time-Oriented Database Applications in SQL Developing Time-Oriented Database Applications in SQL Richard T. Snodgrass ISBN Fuori stampa, download gratuito: Joe Celko's SQL for Smarties: Advanced SQL Programming Joe Celko's SQL for Smarties: Advanced SQL Programming Joe Celko ISBN Capitoli su dati temporali e interrogazioni
#sqlsatPordenone #sqlsat495 February 27, 2016 Risorse - Articoli First Look at System-Versioned Temporal Tables-Part 1: Creating Tables and Modifying Data First Look at System-Versioned Temporal Tables-Part 1: Creating Tables and Modifying Data First Look at System-Versioned Temporal Tables-Part 2: Querying Data and Optimization Considerations First Look at System-Versioned Temporal Tables-Part 2: Querying Data and Optimization Considerations Temporal Tables (MSDN) Temporal Tables (MSDN)
#sqlsatPordenone #sqlsat495 February 27, 2016 Q&A Questions?
#sqlsatPordenone #sqlsat495 February 27, 2016 THANKS! #sqlsatPordenone #sqlsat495