Comment travailler avec SQL: 2011 tables système versionné

Les tables système versionné ont un but différent de celui des tables de la période d'application en temps dans SQL, et par conséquent fonctionnent différemment. Tableaux de la période d'application en temps vous permettent de définir des périodes de temps et fonctionnent sur les données qui entrent dans ces périodes. En revanche, les tables système versionné sont conçus pour créer un registre vérifiable des exactement quand un élément de données a été ajouté à, modifiés dans, ou supprimées à partir d'une base de données.

Par exemple, il est important pour une banque de savoir exactement quand un dépôt ou retrait a été effectué, et cette information doit être conservée pendant une période de temps désigné par la loi. De même, courtiers en valeurs mobilières doivent suivre exactement quand une transaction d'achat a été effectué. Il ya un certain nombre de cas similaires, où la connaissance quand un événement particulier, à une fraction de seconde, est important.

Des applications telles que l'application de la banque ou de l'application stock courtier ont des exigences strictes:

  • Toute mise à jour ou de suppression doivent préserver le fonctionnement de l'état initial de la ligne avant d'effectuer la mise à jour ou de suppression.

  • Le système, au lieu de l'utilisateur, conserve les temps de début et de fin des périodes de lignes.

    Lignes d'origine qui ont été soumis à une mise à jour ou de suppression restent dans le tableau et sont appelés lignes historiques. Les utilisateurs ne peuvent pas modifier le contenu des lignes historiques ou les périodes associées aux rangées. Seul le système peut mettre à jour les périodes de lignes dans une table système versionné. Ceci est réalisé en mettant à jour les colonnes non-période de la table ou à la suite de suppressions de lignes.

    Ces contraintes garantissent que l'historique des modifications de données est à l'abri à la falsification, répondant ainsi aux normes d'audit et de conformité aux réglementations gouvernementales.




Les tables système versionné se distinguent des tables de la période d'application en temps par un couple de différences dans la CREATE déclarations qui les créent:

  • Alors que dans une table de la période d'application en temps l'utilisateur peut donner un nom à la période, dans une table système-version, le nom de période doit être LE TEMPS DU SYSTÈME.

  • La CREATE déclaration doit inclure les mots-clés AVEC Versioning System. Bien que SQL: 2011 permet le type de données pour le début de la période et de fin de la période pour être soit DATE tapez ou l'un des types d'horodatage, vous devrez presque toujours vouloir utiliser l'un des types d'horodatage. Bien sûr, quelque soit le type que vous choisissez pour la colonne de départ doit également être utilisé pour la colonne de fin.

Pour illustrer l'utilisation des tables système versionné, envisager de tableaux créés pour les employés et les départements. Vous pouvez créer une table système versionné avec le code suivant:

CREATE TABLE (employee_sys EmpID Integer, Sys_Start TIMESTAMP (12) GÉNÉRÉES toujours aussi ROW START Sys_End TIMESTAMP (12) GÉNÉRÉES toujours aussi ROW FIN, EmpName VARCHAR (30), le délai d'system_time (SysStart, SysEnd)) avec un système VERSIONING-

Une ligne dans une table système versionné est considéré comme une ligne de système actuel si l'heure actuelle est contenue dans la période système en temps. Sinon, il est considéré comme une ligne de système historique.

Les tables système versionné sont similaires aux tables de la période d'application en temps à de nombreux égards, mais il ya aussi des différences. Voici quelques-unes:

  • Les utilisateurs ne peuvent pas attribuer ou modifier les valeurs dans les colonnes Sys_Start et Sys_End. Ces valeurs sont assignés et modifiés automatiquement par le SGBD. Cette situation est mandaté par les mots-clés GENERATED ALWAYS.

  • Lorsque vous utilisez l'opération INSERT pour ajouter quelque chose dans une table système-version, la valeur dans la colonne Sys_Start est automatiquement réglée à l'horodatage de la transaction, qui est associé à chaque transaction. La valeur attribuée à la colonne Sys_End est la plus haute valeur de type de données de cette colonne.

  • Dans les tableaux du système-version, le METTRE À JOUR et EFFACER opérations ne fonctionnent que sur les lignes actuelles du système. Les utilisateurs peuvent mettre à jour ou supprimer des lignes de système historique.

  • Les utilisateurs ne peuvent pas modifier le système en temps période de début ou fin de temps soit rangées de système actuelles ou historiques.

  • Chaque fois que vous utilisez l'une ou l'autre METTRE À JOUR ou EFFACER opération sur une ligne-système actuel, une rangée de système historique est automatiquement insérée.

    Une déclaration de mise à jour sur une table système versionné insère d'abord une copie de l'ancienne ligne, avec son heure de fin de système mis à l'horodatage de la transaction. Cela indique que la ligne a cessé d'être au courant que timestamp. Ensuite, le SGBD effectue la mise à jour, modifier simultanément le temps de démarrage du système-période à l'horodatage de la transaction.

    Maintenant, la ligne mise à jour est la ligne de système actuel de l'horodatage de la transaction. METTRE À JOUR déclencheurs pour les lignes en question sera le feu, mais INSERT déclencheurs ne se déclenche pas, même si les lignes historiques sont insérés dans le cadre de cette opération.

UN EFFACER opération sur une table système versionné ne supprime pas les lignes spécifiées. Au lieu de cela, il change le système en temps le temps de ces lignes à l'horodatage du système de fin de période. Ceci indique que ces lignes ont cessé d'être à jour de l'horodatage de la transaction. Maintenant, ces lignes font partie du système historique plutôt que le système actuel. Lorsque vous effectuez une EFFACER fonctionnement, toute EFFACER déclencheurs pour les lignes affectées se déclenche.


» » » » Comment travailler avec SQL: 2011 tables système versionné