SQL Server 2016 : Les nouveautés

Découvrir les temporal tables

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Découvrez la fonctionnalité de table temporelle. Elle permet de maintenir automatiquement un historique de modification sur une table, avec des dates de début et de fin.
06:50

Transcription

Une nouveauté très intéressante de SQL server 2016 est l'idée de tables temporelles ou « Tamporal tables ». C'est quelque chose qui a été défini dans la norme SQL il y a quelques anées qui a été integré par d'autres éditeurs de base de données relationnelles et qui est integré maintenant dans SQL server 2016. Il s'est integré avec pas mal d'intelligence et c'est assez bien fait. On va voir de quoi il s'agit. Je suis dans PachaData Formation, bien sûr, ma base de données d'exemples et j'ai une table de contact. Ce que j'ai envie de faire c'est aussi ajouter une table d'employé que je vais mettre dans mon schéma contact. Mais j'aimerais garder l'historique des employés, c'est-à-dire de savoir à quel moment ils ont changé de position ou bien ils ont changé peut-être de manager. J'aimerais garder, donc, toute l'histoire de la hiérarchie de mon entreprise. Pour cela je vais utiliser cette fonctionnalité integrée de table temporelle. Cela consiste simplement à attacher à une table existante une table d'historique qui va contenir les anciennes données à tout moment ou quelque chose est modifiée dans la table originelle. Donc, ça veut dire vous avez une table tout à fait normale que vous reqêtez tout à fait normalement, mais derrière se cache une table qui va contenir les anciennes informations. Et automatiquement, dès que vous faites une modification sur une ligne de votre table, eh bien, l'ancienne version va être copier dans cette table d'archives, si vous voulez, par SQL server. Ce qui fait que vous disposez à tout moment de tout l'historique des changements dans votre table et vous ne perdez plus rien. Non seulement vous ne perdez plus rien mais ça vous fait une sorte de sécurité car si un changement a été fait par erreur, eh bien, vous avez toujours les anciennes versions des lignes, vous pouvez revenir en arrière en faisant une requête dans cette table temporelle. Je vais déjà vous montrer comment on crée tout ça. Je suis dans le PachaData, je vais me créer un schéma que je vais appeler Historique, juste pour séparer les deux tables. C'est vraiment pas nécessaire mais ça peut être une bonne pratique. Vous pouvez bien sûr créer votre table d'historique dans le même schéma. Vous pouvez même ne pas indiquer le nom, je vais vous montrer tout de suite. Moi, j'ai choisi de le faire dans un schéma que j'appelle historique. Ensuite je crée une table Contact employé. Alors ça peut aussi être une table existante ou je vais ajouter les colonnes nécessaires, je peux tres bien travailler sur une table déjà existante. Et là simplement je crée une nouvelle table. Je mets mes informations ici. Alors, juste pour la petite histoire j'utilise une syntaxe aussi in line de création de cle étrangère. Et puis je me rajoute deux collonnes de type Datetime2. Là j'ai décidé de les mettre la gradularité du dixième deux secondes, mais si je fais ça on est à la nanoseconde. Donc, c'était un choix comme ça, ce n'est pas très très grave. Et je vais dire, ce n'est pas nécessaire, mais je peux le faire, eh bien, tu vas générer automatiquement ces dates. As Row Starts et As Row End. Donc, cette syntaxe qui vient de la norme SQL me dit : ces deux colonnes, eh bien, les données de départ et de fin vont être générées automatiquement, et on va voir ce que ça donne. J'ai rajouté ça aussi, je vais l'enlever mais c'est pour vous montrer la syntaxe, je peux également dire que ces colonnes sont cachées. C'est-à-dire que si je fais un select étoile sur la table je ne vais pas les voir. Pourquoi je voudrais les cacher ? Pour des raisons peut-être que je modifie une table existante pour ajouter une fonctionnalité temporelle et je ne veux pas troubler les requêtes déjà existantes qui font des selects étoile, ce n'est pas une bonne idée, mais bon ça existe ou bien simplement je veux que toute cette fonctionnalité sur une nouvelle table soit totalement dissimulée et je n'ai jamais vraiment besoin d'avoir des notions de date de début et de date de fin que je vais pouvoir requêter. Donc, soit je choisis de montrer ces colonnes, soit je choisis de ne pas les montrer, mais elles sont de toute façon nécessaire pour le fonctionnement de la table temporelle. Donc, ici je vais choisir de les montrer. Je prends ces deux colonnes et je vais ajouter cette syntaxe Periode for System Time et je vais dire par quoi on commence et par quoi on finit. Cette syntaxe me permet d'indiquer à SQL server sur quelle colonne il va se baser pour la plage temporelle de validité de chaque information, de chaque ligne. Et puis, bon, je rajoute une contrainte de l'étrangère, peu importe mais ensuite je vais rajouter à la fin du DDL, c'est-à-dire de la syntaxe de création de ma table. Cette instruction With, With System Versioning On, et je lui dis ma table d'historique s'appelle comme ça. Alors ici il y a plusieurs solutions, c'est très souple également. Soit vous ne mettez pas la table d'historique et à ce moment-là SQL server en crée une automatiquement et la nomme automatiquement, soit vous décidez de nommer vous-même votre table d'historique, et à ce moment-là soit cette table n'existe pas, comme c'est le cas ici, elle est créée automatiquement par SQL server. Soit cette une table qui existe déjà, c'est possible, par exemple vous avez déjà une table d'archives. Et à ce moment-là SQL server va l'utiliser si le schéma qui est ici est le même que le schéma de la table d'historique. Il faut qu'il y ait Employe ContactID, Position, Date de début, Date de fin. Il faut que ce soit exactement la même chose. Sinon il est impossible d'utiliser cette table comme table d'historique. Donc, voyez, c'est très souple. Vouz pouvez integrer le systeme de Temporal Tables à une architecture de tables d'archives existantes. Une autre note en passant c'est que cette table, vous pouvez donc la créer d'abord ou la manipuler ensuite, et placer par dessus en index Clustered ColumnStore pour en faire une table ColumnStore compressee et qui va être plus performante si vous faites des agrégations sur les données historiques. Selon votre utilisation vous avez beaucoup de souplesse aussi sur la table d'archives. OK, Je crée ma table, jetez un coup d'oeil ici. Voici ma table employé et il est indiqué clairement qu'on a un contrôle de version par le système. On voit ici à l'icone que c'est une table qui est une temporal table, ici je descends. Eh bien, j'ai là sous table qui s'appelle Historique employé avec le schéma identique. C'est indiqué dans l'arborescence de l'exploraeur d'objet de managment studio très très clairement.

SQL Server 2016 : Les nouveautés

Découvrez les nouveautés de SQL Server 2016. Voyez les options de configuration limitées aux bases de données, le chiffrage de données à partir des applications clientes, etc.

2h26 (27 vidéos)
Aucun commentaire n´est disponible actuellement
 

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !