Jailer est un outil de création de sous-ensembles de bases de données, de schémas et de navigation dans les données.
Il crée de petites tranches à partir de votre base de données et vous permet de naviguer dans votre base de données en suivant les relations. Jailer est idéal pour créer de petits échantillons de données de test ou pour l’analyse de problèmes locaux avec des données de production pertinentes.
Dans ce didacticiel, vous apprendrez à exporter des ensembles cohérents de lignes à partir de bases de données relationnelles vers un SQL-DML trié topologiquement, c’est-à-dire une séquence d’instructions INSERT ordonnées de manière à ce qu’aucune contrainte de clé étrangère ne soit violée lors de l’exécution.
Objectif
Exportation de toutes les données relatives à l’employé nommé ‘Scott’ dans un script SQL.
Étape 1. Configurer la base de données
Utiliser le modèle de données de démonstration « Démo Scott »
Étape 2. Exporter l’employé Scott (sans restriction)
Maintenant, essayons d’exporter l’employé nommé Scott. Pour ce faire, nous avons besoin d’un modèle d’extraction.
Sélectionnez EMPLOYEE comme table à extraire et saisissez T. NAME = ‘SCOTT’ dans le champ Where :
Ce modèle d’extraction décrit un ensemble d’entités contenant le(s) employé(s) nommé(s) « SCOTT », les entités associées à ces employés, les entités associées à ces entités, etc.
Exportez cet ensemble (Export Data-Button ou Tools->Export Data). Jailer demande d’abord un nom de fichier pour le nouveau modèle d’extraction. Appelez-le scott.csv. Après cela, la boîte de dialogue Exportation de données apparaît :
Tapez scott.sql dans le premier champ. Ceci définit le nom du fichier d’export à générer.
Cliquez sur Exporter les données. Le panneau de progression affiche : Jailer a généré un fichier scott.sql contenant des instructions d’insertion pour Scott, pour son patron, pour le président et pour le département, le niveau de salaire et les participations au projet de Scott.
Mais pourquoi y a-t-il aussi des déclarations pour tous les autres employés ?
Cliquez sur « EMPLOYÉ » dans la vue d’ensemble « Lignes par tableau ». Cela affiche toutes les étapes du processus menant à des enregistrements d’employés supplémentaires. Comme vous pouvez le voir, tous les employés affectés au même service que SCOTT sont exportés. De même, tous les salariés appartenant à la même classe salariale sont également exportés.
Étape 3. Exporter l’employé Scott (restreint)
Exporter un employé nécessite d’exporter également son patron et son département. Sinon, l’ensemble des entités exportées ne serait pas cohérent (en raison des dépendances basées sur les contraintes de clé étrangère). Aucune contrainte ne nous empêche d’exclure le grade salarial et la prime de l’export, mais nous ne le faisons pas car l’ensemble résultant serait incomplet.
D’un autre côté, nous ne voulons pas exporter tous les subordonnés d’un employé ou tous les employés qui travaillent dans le même service que Scott.
Pour exclure les subordonnés, les membres du service et les employés du même niveau de salaire, nous devons restreindre certaines associations.
Une restriction est une extension de la condition de jointure d’association (dans la syntaxe SQL) pour une direction d’une association. disabled (ou false) représente une condition insatisfaisante.
Définissez les restrictions :
- du SERVICE à l’EMPLOYÉ
- de EMPLOYEE à EMPLOYEE (inverse-BOSS)
- de SALARYGRADE à EMPLOYEE
- de PROJECT à PROJECT_PARTICIPATION
- de ROLE à PROJECT_PARTICIPATION
Utilisez à nouveau Outils-> Exporter les données. Jailer n’exportera désormais que les données relatives à Scott.
-- generated by Jailer
--
-- extraction model: EMPLOYEE where NAME='SCOTT' (extractionmodel/scott.csv)
-- database URL: jdbc:db2://localhost/wisser
-- database user: scott
-- Exported Entities: 13
-- DEPARTMENT 2
-- EMPLOYEE 3
-- PROJECT 2
-- PROJECT_PARTICIPATION 2
-- ROLE 2
-- SALARYGRADE 2
Insert into SALARYGRADE(GRADE, LOSAL, HISAL) values (4, 2001, 3000), (5, 3001, 9999);
Insert into ROLE(ROLE_ID, DESCRIPTION) values (100, 'Developer'), (102, 'Project manager');
Insert into PROJECT(PROJECTNO, DESCRIPTION, START_DATE, END_DATE) values (1001, 'Development of Novel Magnetic Suspension System', '2006-01-01', '2007-08-13'), (1003, 'Foundation of Quantum Technology', '2007-02-24', '2008-07-31');
Insert into DEPARTMENT(DEPTNO, NAME, LOCATION) values (20, 'RESEARCH', 'DALLAS'), (10, 'ACCOUNTING', 'NEW YORK');
Insert into EMPLOYEE(EMPNO, NAME, JOB, BOSS, HIREDATE, SALARY, COMM, DEPTNO) values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000.00, null, 10);
Insert into EMPLOYEE(EMPNO, NAME, JOB, BOSS, HIREDATE, SALARY, COMM, DEPTNO) values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, null, 20);
Insert into EMPLOYEE(EMPNO, NAME, JOB, BOSS, HIREDATE, SALARY, COMM, DEPTNO) values (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09', 3000.00, null, 20);
Insert into PROJECT_PARTICIPATION(PROJECTNO, EMPNO, START_DATE, END_DATE, ROLE_ID) values (1003, 7566, '2007-02-24', '2008-07-31', 102);
Insert into PROJECT_PARTICIPATION(PROJECTNO, EMPNO, START_DATE, END_DATE, ROLE_ID) values (1001, 7788, '2006-05-15', '2006-11-01', 100);