[JAVA] Wenn Sie es leid sind, ER-Diagramme zu zeichnen

Einführung

Unabhängig von der ** Neuentwicklung ** / ** Wartungsentwicklung ** ist es sehr wichtig, die Datenstruktur während der Systementwicklung zu verstehen. ** ER-Diagramm (E-R-Diagramm) ** ist nützlich zum Verständnis der Datenstruktur.

Probleme bei der Erstellung des ER-Diagramms

Dokumente und Programme ** "Unterschied" **

Es ist ein sehr nützliches ** ER-Diagramm **, aber wie bei allen Dokumenten tritt ** eine Abweichung von der Entität (dem Programm) ** auf.

Um eine "Dissoziation" zu vermeiden, versuchen wir, regelmäßig eine Synchronisation durchzuführen, aber nicht alle Mitglieder fordern die Entwicklung immer mit einem klaren Bewusstsein heraus. Die Dokumentation wird am Boden zerstört sein.

Dokumente und Datenbanken auch ** "Unterschied" **

Nicht nur ** Dokumente und Programme **, sondern auch ** Dokumente und Datenbanken ** sind unterschiedlich.

** Die Definition der Datenbank (Tabelle, Index, Ansicht) **, die bereits als Dienst ausgeführt wird ** und des ** Dokuments ** sind unterschiedlich.

Umgang mit dem, was im Dienst ist, indem es zum "Schöpfer" gemacht wird

Der alte Weg, um mit der Diskrepanz zwischen ** Dokumenten ** und ** Programmen ** umzugehen, besteht darin, Dokumente aus dem Betrieb zu wecken (** umgekehrt **). ** Programm ** → ** Dokument ** und der Inhalt werden wiedergegeben.

Ebenso wäre es großartig, wenn der Inhalt als ** Datenbank ** → ** Dokument ** wiedergegeben werden könnte.

Sie möchten nicht mit der Maus kneten.

Ich mag die Kommandozeile.

Ich möchte meine Arbeit nach Möglichkeit ohne Maus beenden.

Im Gegensatz zu meinen Gefühlen erzwingen visuelle Dokumente wie ER-Diagramme die Mausbedienung.

Bei der Entwicklung mit mehreren Personen ist Unterstützung für mehrere Plattformen erforderlich

Wenn Sie mit mehreren Personen entwickeln, ist ein Tool vorzuziehen, das ** Multi-Plattform ** unterstützt. ** Wenn es sich um ein Tool handelt, das nur unter Windows ausgeführt werden kann, konzentriert sich die Last auf einige Mitglieder. ** ** **

Es gibt drei Anforderungen für das ER-Diagrammgenerierungswerkzeug

Ich bat um drei Punkte für das ER-Diagrammgenerierungswerkzeug.

  1. Kann von einer vorhandenen Datenbank rückgängig gemacht werden
  2. Kann mit CUI ausgeführt werden
  3. Funktioniert in mehreren Umgebungen (Windows / Mac / Unix OS)

Nachdem ich eine Weile gesucht hatte, fand ich ein Tool namens ** SchemaSpy **. Die Verwendung wird im Folgenden kurz zusammengefasst.

** Versuchen Sie es mit SchemaSpy **

Informationen zur Ausführungsumgebung

** SchemaSpy ** besteht aus Java, daher ist ** JRE ** erforderlich.

Informationen zur unterstützten Datenbank

Wir verwenden ** JDBC-Wikipedia **, um eine Verbindung zur Datenbank herzustellen, und stellen eine Verbindung zu einer beliebigen Datenbank her, für die der JDBC-Treiber bereitgestellt wird. Ist möglich.

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)

installieren

Bereiten Sie eine virtuelle Umgebung für die Überprüfung vor. Starten Sie ** 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

Melden Sie sich nach dem Booten bei der virtuellen Umgebung an.

$ vagrant ssh

Installieren Sie die gewünschte Anwendung.

#Installieren Sie JDK und Graphviz
$ sudo yum install -y \
    'graphviz*' \
    java-1.8.0-openjdk-devel \
;

# /usr/local/Platziere zwei Jar-Dateien in src.
$ sudo mkdir -p /usr/local/src

$ cd /usr/local/src/

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

# 2.JDBC-Treiber für die Verbindung zu PostgreSQL
$ sudo wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar

Erstellen Sie ein Startskript, um ein ER-Diagramm zu erstellen

Da es beim Ausführen der Befehlszeile viele Argumente gibt, erstellen Sie ein Startskript mit dem Namen ** schemaspy ** und schließen Sie die festen Argumente jedes Mal ein.

Dieses Mal habe ich auf die lokale ** "ebis" ** Datenbank zugegriffen und sie so eingestellt, dass ein ER-Diagramm generiert wird.

schemaspy


#!/usr/bin/env bash

#Das Verzeichnis, in dem die JAR-Datei früher abgelegt wurde
JDBC_DRIVER_DIR=/usr/local/src
JDBC_DRIVER_PATH=${JDBC_DRIVER_PATH:-$(echo ${JDBC_DRIVER_DIR}/*.jar| sed "s/ /:/g")}

#Hier"PostgreSQL"Spezialisiert auf
DATABASE_TYPE=${DATABASE_TYPE:-pgsql}

#Verbindungsziel-DB-Host
DB_HOST=${DB_HOST:-localhost}
#Name der Verbindungsziel-DB
DB_NAME=${DB_NAME:-ebis}
#Verbindungsziel-DB-Benutzer
DB_USER=${DB_USER:-postgres}
#Verbindungsziel-DB-Passwort
DB_PASS=${DB_PASS:-}


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


# -hq           :Hochwertiger Modus. Das Ausgabeergebnis wird schön sein!
# -noimplied    :Deaktivieren Sie die Funktion, die "die Beziehung zwischen vorhandenen Tabellen ohne externen Schlüssel errät und im ER-Diagramm wiedergibt".
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}" \
;
#Ausführungsberechtigung erteilen
$ chmod u+x schemaspy

Lauf

Starten Sie das Skript.

$ ./schemaspy

Sie können sehen, dass ein Verzeichnis mit dem Namen ** "ebis" ** erstellt wurde und DB-Definitionsinformationen und ER-Diagramme generiert wurden.

(Ebis ist der DB-Name des Systems namens Ad Ebis, an dem ich zuvor beteiligt war, aber leider kann ich die DB-Informationen von Ad Ebis hier nicht anzeigen.)

Ausgabebeispiel (eccube3)

EC-CUBE / ec-cube Ich habe versucht, ein ER-Diagramm zu erstellen, indem ich unmittelbar nach dem Setup eine Verbindung zur DB herstellte.

eccube3-er.png

QuickStart-Skript

Ich habe es zu einem Shell-Skript gemacht. Wenn es sich um eine Redhad-Umgebung handelt, wird automatisch die nicht im Voraus installierte installiert und anschließend ausgeführt.

GitHub - genzouw/schemaspy-cli: schemaspy commandline interface


Sehr nützlich, um sich einen Überblick über das System zu verschaffen. ** SchemaSpy ** Wenn Sie ein besseres Tool kennen, lassen Sie es mich bitte wissen.

das ist alles

Recommended Posts

Wenn Sie es leid sind, ER-Diagramme zu zeichnen
Wenn Sie "Spring Boot" satt haben, probieren Sie doch "jooby".
Was tun, wenn Sie den Text eines Elements in Selen nicht abrufen können?
Wenn Sie eine unveränderliche Sammlung mit JPA löschen, erhalten Sie natürlich eine UnsupportedOperationException.
Rufen Sie den Typ eines Elements eines Arrays ab, um festzustellen, ob es sich um ein Array handelt
[RSpec] ArgumentError: falsche Anzahl von Argumenten Wenn Sie einen Fehler erhalten, müssen Sie sich möglicherweise um die Benennung von Variablen kümmern.
Was tun, wenn ein Argumentfehler auftritt? Falsche Anzahl von Argumenten (gegeben 2, erwartete 0) in Ihrem RSpec-Test
Implementierung der Löschfunktion (wenn Sie einen fremden Schlüssel haben)
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?