![Page 1: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/1.jpg)
Evolutionäre Datenbankentwicklungim Rahmen vonContinuous Delivery
27. Januar 2014
Java Student User Group – Meeting 61
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
Wolfgang Gruber
27. Januar 2014
INSO - Industrial SoftwareInstitut für Rechnergestützte Automation | Fakultät für Informatik | Technische Universität Wien
![Page 2: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/2.jpg)
Inhalt
Database Engineering2
Datenmodellierung3
Database-Refactorings & -Transformations4
Continuous Delivery1
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 2
Database-Migrations6
Database-Versioning5
![Page 3: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/3.jpg)
Continuous Delivery
• Kontinuierliche Auslieferung von Software durch automatisierte Prozesse
• Beispiel: Tägliche Releases ohne Service-Unterbrech ung bei Facebook
• Prinzipien• Zuverlässiger & wiederholbarer Release-Prozess
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 3
• Zuverlässiger & wiederholbarer Release-Prozess• Alles ist versioniert• „If it hurts, do it more frequently and bring the pain forward“• „Done means released“
• Vorteile• Höhere Zuverlässigkeit aufgrund weniger Fehler• Weniger Stress• Deutlich kürzere Cycle-Time• Fehler haben weniger Auswirkungen
![Page 4: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/4.jpg)
Development Stages
• Software durchläuft von Entwicklung bis Prouktivbet riebmehrere Stufen
• Deployable Package wird von zentralem ContinuousIntegration Server erstellt
• Qualität nimmt mit jeder Stufe zu
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 4
LokaleEntwicklung
Testsystem QSSystem
Produktion
Quality Gate Quality GatePackaging
![Page 5: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/5.jpg)
Software-Engineering vs. Database-Engineering
• Relationale Datenbanken sind kein Hype-Thema
• Datenbanken & SQL oftmals nicht Kern-Kompetenz von Software-Entwicklern
• ORMs verstecken die Datenbank
(Beispiel: person.getAddress())
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• One-Shot-Database
• Restriktive DBAs
• Restriktive Change-Prozesse
• Legacy-Datenbanken sind meist in schlechtem Zustand (SQL-Antipatterns, Fehler, Inkonsistenzen, keine Dokumentation)
5
![Page 6: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/6.jpg)
Database Engineering
• Datenmodellierung
• Database Reverse Engineering
• Database Refactorings & Transformations
• Database Versioning & Management
• Database Testing
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Database Testing
• Database Performance Tuning
6
![Page 7: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/7.jpg)
Datenmodellierung
• Conceptual: Identifikation der Entities und ihrer Relationen, Bestandteil der Ubiquitous Language
• Logical: Genauere Auflösung, Festlegung von Attribu ten
ConceptualData Model
LogicalData Model
PhysicalData Model
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Logical: Genauere Auflösung, Festlegung von Attribu ten
• Physical: Abbildung auf konkrete Datenbank
• Modellierung: EER-Diagramme, UML-Klassendiagramme
• BDUF („Big Design Up Front“) vermeiden• Wasserfallmodell funktioniert nicht• Anforderungen ändern sich• Änderungsprozess von Anfang an definieren
7
![Page 8: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/8.jpg)
Klassifikation von Tabellen I
Table
Data System
AuditHistory
ReferenceLookup
Entity
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 8
ProtocolLogging
Status
Temporary
JoinMain Sub
![Page 9: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/9.jpg)
Klassifikation von Tabellen II
Unterschiede zwischen Tabellen-Typen:
• Größen-Wachstum
• Handhabung (Archivierung, Migration, Optimierung)
Anwendung:
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
Anwendung:
• Unterstützung bei Datenmodellierung
• Unterstützung bei Database Reverse Engineering
• Wiederherstellung der Applikation („minimale Datenbank“)
• Definition der Test-Datenbank
9
![Page 10: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/10.jpg)
Klassifikation von Tabellen – Beispiel
Order Article_Order Article
Article_CategoryLogin_Log
Customer
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 10
Address
CityCountry
Article_Audit
![Page 11: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/11.jpg)
Klassifikation von Tabellen – Beispiel
Order<<Main Entity >>
Article_Order<<Join >>
Article<<MainEntity >>
Article_Category<<Reference>>
Login_Log<<Logging>>
Customer<<MainEntity >>
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 11
<<Main Entity >> <<Join >> <<MainEntity >>
Address<<SubEntity>>
City<<Reference>>
Country<<Reference>>
Article_Audit<<Audit>>
<<MainEntity >>
![Page 12: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/12.jpg)
Klassifikation von Tabellen – Beispiel
Order<<Main Entity >>
Article_Order<<Join >>
Article<<MainEntity >>
Article_Category<<Reference>>
Login_Log<<Logging>>
Customer<<MainEntity >>
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 12
<<Main Entity >> <<Join >> <<MainEntity >>
Address<<SubEntity>>
City<<Reference>>
Country<<Reference>>
Article_Audit<<Audit>>
<<MainEntity >>
![Page 13: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/13.jpg)
Database Refactorings & Transformations
Database Refactoring: Änderung des Datenbank-Schema s um die Qualität zu verbessern. Keine Erweiterungen, kein Bugfixing
Database Transformation: Änderung des Datenbank-Schemas, um es zu erweitern
Arten:
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
Arten:
• Structural Refactorings
• Data Quality Refactorings
• Referential Integrity Refactorings
• Architectural Refactorings
• Method Refactorings
• Transformations
13
![Page 14: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/14.jpg)
Schwierigkeiten bei Datenbankänderungen
• Abhängigkeit zu Source Code
• Abhängigkeit zu anderen Applikationen
• Test-Code und Test-Daten
• Gleichzeitiger Zugriff von mehreren Servern
• Mangelnde Tool -Unterstützung
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Mangelnde Tool -Unterstützung
• Änderungen sind teilweise irreversibel
14
![Page 15: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/15.jpg)
Management der Datenbank
Dokumentation der Datenbank
Beispiel Dokumentation von Tabellen:
• Name
• Beschreibung
• Typ
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Typ
• Wachstumsrate
• Strategie für Historisierung & Archivierung
Datenbank-Kommentare nicht ausreichend
15
![Page 16: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/16.jpg)
Database Versioning
• Kontrollierter Prozess für die Durchführung von Dat abase Refactorings & Transformations
• Aktuelle Version in Datenbank gespeichert
• Jede Änderung führt zu einer neuen Version
• Änderungen sind Bestandteil des Projekt-Codes
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Anti-Pattern: Keine Verwaltung der Änderungen
• Änderungen: Migrations, Changes, Deltas, Database Script
• Tools: Apache ddlutils, Flyway, Liquibase, dbdeploy
16
![Page 17: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/17.jpg)
Flyway
• Java-Bibliothek für Datenbank-Migrationen
• Verwendung über• Command-Line• Maven• Ant• SBT
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Gradle• Spring
• Migrationen über• SQL Command Script• Java-Klasse
• Lizenz: Apache Software Licence 2.0
• Website: http://flywaydb.org/17
![Page 18: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/18.jpg)
Flyway - Konfiguration
<plugin>
<groupId>com.googlecode.flyway</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost:5432/app</url>
<user>username</user>
<locations>db/migration</locations>
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
<locations>db/migration</locations>
</configuration>
<dependencies>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2</version>
</dependency>
</dependencies>
</plugin>
18
![Page 19: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/19.jpg)
Flyway - Anwendung
Namensschema:
• SQL: V${ version }__${description }.sql
version description checksum installed_on
1 initial database -11308505 2014-01-27
2 user table added -54829323 2014-01-27
classpath:/db/migration
V1__initial_database.sqlV2__user_table_added.sqlV3_role_table_added.sql
Tabelle SCHEMA_VERSION (vereinfacht)
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• SQL: V${ version }__${description }.sql
• Java: V${version}__${description}
Maven Goals:
• flyway:init – Skripts mit bestehender Datenbank synch ronisieren
• flyway:migrate – Migrationen durchführen
• flyway:history, flyway:info – Informationen zu Migrati onen anzeigen
mvn –Dflyway.password=${passwd} compile flyway:migrat e
19
![Page 20: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/20.jpg)
Liquibase
• Java-Bibliothek für Datenbank-Migrationen
• Verwendung über• Command Line• Ant• Maven• Servlet Listener
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Spring• CDI
• Zentrale Changelog-Datei mit Changesets
• Zwei Meta-Tables: DATABASECHANGELOG und DATABASECHANGELOGLOCK
• Website: http://www.liquibase.org
• Lizenz: Apache Software Licence 2.020
![Page 21: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/21.jpg)
Liquibase - Features
• Verschiedene Formate für Changelogs (XML, JSON, YAML)
• Definierte Database Refactorings & Transformations
• Mittels Plugins erweiterbar
• Database Diffs
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Contexts
• Preconditions
• DBDoc
• Database Reverse Engineering zu Changelogs
• SQL-Output
21
![Page 22: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/22.jpg)
Liquibase - Maven
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.11</version>
<configuration>
<changeLogFile>src/main/resources/db/changelog.xml</changeLogFile>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521/XE</url>
<username>myuser</username>
<password>password</password>
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
<password>password</password>
<promptOnNonLocalDatabase>true</promptOnNonLocalDatabase>
</configuration>
</plugin>
22
![Page 23: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/23.jpg)
Liquibase - Changelog
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"
>
<property name="view.dir" value="db/view" />
<include file="${view.dir}/views.xml" />
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
<include file="${view.dir}/views.xml" />
<changeSet />
<changeSet />
</databaseChangeLog>
23
![Page 24: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/24.jpg)
Liquibase - Changeset
<changeSet
id="2014-01-27_01"
author="wolfgang.gruber"
runOnChange="true"
runAlways="false"
context="test">
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
>
<comment>New table added</comment>
<addColumn table="user">
<column name="street" type="VARCHAR(100)" />
</addColumn>
</changeSet>
24
![Page 25: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/25.jpg)
Liquibase – Changes/Refactorings
• createTable, createIndex, createSequence, createVie w
• addColumn, addPrimaryKey, addForeignKey
• dropTable, dropColumn, dropPrimaryKey
• renameTable, renameColumn, renameView
• loadData , loadUpdateData
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• loadData , loadUpdateData
• sql, sqlFile
25
![Page 26: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/26.jpg)
Liquibase - DBDoc
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery 26
![Page 27: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/27.jpg)
Liquibase - Tipps
• Namenskonvention für id und author in den Changesets
• Eine Änderung je Changeset
• Vorsicht bei der Verwendung von context. Wird beim Aufruf kein Kontext angegeben, werden alle Changese tsausgeführt
• Strukturierung des Changelog
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Strukturierung des Changelog
• Refactorings, Daten, DB-Code voneinander trennen
27
Beispiel für Strukturierung:
/app-changelog.xml/data/data-changelog.xml/data/*.csv/code/code-changelog.xml/code/*.sql/update/update-changelog.xml/update/2014-01-01_01.sql/update/2014-01-10_01.sql
![Page 28: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/28.jpg)
Best Practice
• Eigene Datenbank je Entwickler
• Management von Referenz- und Testdaten
• Automatische Deployments auf Testumgebung
• Database-Backup vor Datenbank-Migrationen
• Eigene User für Datenbank -Migrationen mit mehr Rechten
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
• Eigene User für Datenbank -Migrationen mit mehr Rechten (zB CREATE TABLE)
• Rolling Updates mit mehreren Applikationsservern erfordern spezielle Handhabung (Beispiel: renamecolumn)
28
![Page 29: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/29.jpg)
Zusammenfassung
• Continuous Delivery wird Standard für Release-Prozess
• Datenbank bildet den Kern der Applikation
• Database-Engineering genauso wichtig wie Software-Engineering
• Datenbankmodellierung erforderlich, aber BDUF sollt e vermieden werden
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
vermieden werden
• Database Refactorings bilden die Basis für Datenbank -Evolution
• Die Datenbank muss versioniert sein
• Verschiedene Tools verfügbar
29
![Page 30: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/30.jpg)
Fragen?
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
Fragen?
30
![Page 31: Java Student User Group – Meeting 61jsug.at/w/images/4/41/Datenbank-Evolution.pdf · Database Refactoring: Änderung des Datenbank-Schemas um die Qualität zu verbessern. Keine](https://reader033.vdocuments.us/reader033/viewer/2022042309/5ed705af62136e72fb7bafee/html5/thumbnails/31.jpg)
Vielen Dank für Ihre Aufmerksamkeit!
Evolutionäre Datenbankentwicklung im Rahmen von Continuous Delivery
Vielen Dank für Ihre Aufmerksamkeit!
31