[JAVA] Si vous en avez assez de dessiner des diagrammes ER

introduction

Indépendamment du ** nouveau développement ** / ** du développement de la maintenance **, il est très important de comprendre la structure des données pendant le développement du système. ** ER Diagram (E-R Diagram) ** est utile pour comprendre la structure des données.

Problème avec la création du diagramme ER

Documents et programmes ** «différence» **

C'est un ** diagramme ER ** très utile, mais comme pour tous les documents, ** une divergence par rapport à l'entité (programme) ** se produit.

Afin d'éviter la ** «dissociation» **, nous essayons de prendre la synchronisation régulièrement, mais tous les membres ne contestent pas toujours le développement avec une conscience claire. La documentation sera dévastée.

Documents et bases de données également ** «différence» **

Non seulement ** les documents et programmes **, mais aussi ** les documents et bases de données ** sont divergents.

** La définition de la base de données (table, index, vue) ** qui s'exécute déjà en tant que service ** et le ** document ** sont divergents.

Gérer ce qui est en service en en faisant le "créateur"

La manière traditionnelle de gérer l'écart entre les ** documents ** et les ** programmes ** consiste à réveiller les documents de ce qui est en service (** inversé **). ** Programme ** → ** Document ** et le contenu est reflété.

De la même manière, ce serait formidable si le contenu pouvait être reflété comme ** base de données ** → ** document **.

Vous ne voulez pas pétrir avec votre souris.

J'aime la ligne de commande.

J'aimerais terminer mon travail sans utiliser de souris si possible.

Contrairement à mes sentiments, les documents visuels tels que les diagrammes ER forcent le fonctionnement de la souris.

Une prise en charge multiplateforme est requise lors du développement avec plusieurs personnes

Si vous développez avec plusieurs personnes, un outil prenant en charge ** multi-plateforme ** est préférable. ** S'il s'agit d'un outil qui ne peut être exécuté que sous Windows, la charge sera concentrée sur certains membres. ** **

Il existe trois exigences pour l'outil de génération de diagramme ER

J'ai demandé trois points pour l'outil de génération de diagramme ER.

  1. Peut être annulé à partir d'un DB existant
  2. Peut être exécuté avec CUI
  3. Fonctionne dans plusieurs environnements (Windows / Mac / Unix OS)

Après avoir cherché pendant un moment, j'ai trouvé un outil appelé ** SchemaSpy **. L'utilisation est brièvement résumée ci-dessous.

** Essayez d'utiliser SchemaSpy **

À propos de l'environnement d'exécution

** SchemaSpy ** est fait de Java, donc ** JRE ** est requis.

À propos de la base de données prise en charge

Nous utilisons ** JDBC-Wikipedia ** pour nous connecter à la base de données et nous connecter à toute base de données pour laquelle le pilote JDBC est fourni. Est possible.

Type Description
db2 IBM DB2 with 'app' Driver
db2net IBM DB2 with 'net' Driver
udbt4 DB2 UDB Type 4 Driver
db2zos DB2 for z/OS
derby Derby (JavaDB) Embedded Server
derbynet Derby (JavaDB) Network Server
firebird Firebird
hsqldb HSQLDB Server
informix Informix
maxdb MaxDB
mssql Microsoft SQL Server
mssql05 Microsoft SQL Server 2005
mssql-jtds Microsoft SQL Server with jTDS Driver
mssql05-jtds Microsoft SQL Server 2005 with jTDS Driver
mysql MySQL
ora Oracle with OCI8 Driver
orathin Oracle with Thin Driver
pgsql PostgreSQL
sqlite SQLite
sybase Sybase Server with JDBC3 Driver
sybase2 Sybase Server with JDBC2 Driver
teradata Teradata (requires -connprops)

installer

Préparez un environnement virtuel pour la vérification. Démarrez ** Vagrant **.

$ echo '''\
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos7.1"
  config.ssh.insert_key = false
  config.vm.network "private_network", ip: "192.168.33.41"
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end
end
''' > Vagrantfile

$ vagrant up

Après le démarrage, connectez-vous à l'environnement virtuel.

$ vagrant ssh

Installez l'application requise.

#Installez JDK et Graphviz
$ sudo yum install -y \
    'graphviz*' \
    java-1.8.0-openjdk-devel \
;

# /usr/local/Placez deux fichiers Jar dans src.
$ sudo mkdir -p /usr/local/src

$ cd /usr/local/src/

# 1.Corps SchemaSpy
$ sudo wget http://jaist.dl.sourceforge.net/project/schemaspy/schemaspy/SchemaSpy%205.0.0/schemaSpy_5.0.0.jar

# 2.Pilote JDBC pour se connecter à PostgreSQL
$ sudo wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar

Créer un script de démarrage pour générer un diagramme ER

Comme il existe de nombreux arguments lors de l'exécution de la ligne de commande, créez un script de démarrage avec le nom ** schemaspy ** et encapsulez les arguments fixes à chaque fois.

Cette fois, j'ai accédé à la base de données locale ** "ebis" ** et l'ai configurée pour générer un diagramme ER.

schemaspy


#!/usr/bin/env bash

#Le répertoire dans lequel le fichier JAR a été placé précédemment
JDBC_DRIVER_DIR=/usr/local/src
JDBC_DRIVER_PATH=${JDBC_DRIVER_PATH:-$(echo ${JDBC_DRIVER_DIR}/*.jar| sed "s/ /:/g")}

#ici"PostgreSQL"Spécialisé dans
DATABASE_TYPE=${DATABASE_TYPE:-pgsql}

#Hôte de base de données cible de la connexion
DB_HOST=${DB_HOST:-localhost}
#Nom de la base de données cible de la connexion
DB_NAME=${DB_NAME:-ebis}
#Utilisateur de base de données cible de la connexion
DB_USER=${DB_USER:-postgres}
#Mot de passe de la base de données cible de la connexion
DB_PASS=${DB_PASS:-}


[ ! -d "./${DB_NAME}" ] && mkdir -p "./${DB_NAME}"


# -hq           :Mode haute qualité. Le résultat de sortie sera magnifique!
# -noimplied    :Désactivez la fonction qui "devine la relation entre les tables existantes qui n'ont pas de clé externe et la reflète dans le diagramme ER"
java \
  -jar      "/usr/local/src/schemaSpy_5.0.0.jar" \
  -hq \
  -noimplied \
  -o        "./${DB_NAME}" \
  -charset  utf-8 \
  -dp       "${JDBC_DRIVER_PATH}" \
  -t        "${DATABASE_TYPE}" \
  -host     "${DB_HOST}" \
  -s        "public" \
  -db       "${DB_NAME}" \
  -u        "${DB_USER}" \
  -p        "${DB_PASS}" \
;
#Accorder l'autorisation d'exécution
$ chmod u+x schemaspy

Courir

Lancez le script.

$ ./schemaspy

Vous pouvez voir qu'un répertoire appelé ** "ebis" ** a été créé et que les informations de définition de base de données et les diagrammes ER ont été générés.

(Ebis est le nom de la base de données du système appelé Ad Ebis dans lequel j'étais impliqué auparavant, mais malheureusement, je ne peux pas afficher les informations de la base de données d'Ad Ebis ici.)

Exemple de sortie (eccube3)

EC-CUBE / ec-cube J'ai essayé de générer un diagramme ER en me connectant à la base de données immédiatement après l'installation.

eccube3-er.png

Script de démarrage rapide

J'en ai fait un script shell. S'il s'agit d'un environnement Redhad, il installera automatiquement celui qui n'est pas installé à l'avance, puis l'exécutera.

GitHub - genzouw/schemaspy-cli: schemaspy commandline interface


Très utile pour avoir une vue d'ensemble du système. ** SchemaSpy ** Si vous connaissez un meilleur outil, faites-le moi savoir.

c'est tout

Recommended Posts

Si vous en avez assez de dessiner des diagrammes ER
Si vous en avez assez de "Spring Boot", pourquoi ne pas essayer "jooby"?
Que faire si vous ne pouvez pas obtenir le texte d'un élément dans Selenium
Si vous supprimez une collection immuable avec JPA, vous obtiendrez naturellement une UnsupportedOperationException.
Obtenez le type d'un élément d'un tableau pour déterminer s'il s'agit d'un tableau
[RSpec] ArgumentError: nombre incorrect d'arguments Si vous obtenez une erreur, vous devrez peut-être vous soucier de la dénomination des variables.
Que faire si vous obtenez une erreur d'argument: nombre incorrect d'arguments (donné 2, attendu 0) dans votre test RSpec
Implémentation de la fonction de suppression (si vous avez une clé étrangère)
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry