Datenbank Migrationen (Liquibase)

Das Datenbank-Schema wird mit Liquibase migriert. (Liquibase Dokumentation)

  • Das Master-File liegt in src/main/resources/changelog/db.changelog-master.xml
  • Unsere Konvention ist für jeden Sprint eine neues Changelog-File anzulegen und im Master-File einzubinden.
  • Möglichst nur eine Änderung pro Change-Set.

Siehe auch: Best Practices

Achtung

Wenn Tabellen mit Foreign-Key-Beziehungen zu anderen Tabellen anzulegen sind, bitte auch darauf achten die entsprechenden Foreign-Key-Contstraints in der Migration anzulegen.

Beispiel: Neue Entitätstabelle mit Foreign Key

<!-- Beispiel für eine neue Entitätstabelle mit Foreign Key -->
<!-- Bisherige Konvention zu Cascade-Triggern: ON DELETE RESTRICT -->
<changeSet id="<Release-Nummer>-<laufende Nummmer>" author="<Autor>">
    <comment>
        Kurze Erklärung warum Änderung.
    </comment>
   <createTable tableName="foo">
       <column name="id" type="int8">
           <constraints nullable="false" primaryKey="true"
                        primaryKeyName="foo_pkey"/>
       </column>
       <column name="r_event" type="int8">
           <constraints nullable="false"
                        foreignKeyName="fk_foo_account"
                        references="event(id) ON DELETE RESTRICT" />
       </column>
       <column name="created" type="TIMESTAMPTZ">
           <constraints nullable="false"/>
       </column>
   </createTable>
</changeSet>

Beispiel: Spalte hinzufügen

<changeSet id="<Release-Nummer>-<laufende Nummmer>" author="<Autor>">
        <comment>
            Kurze Erklärung warum Änderung.
        </comment>
        <addColumn tableName="<Tabellenname>">
            <column name="type" type="VARCHAR(36)">
            </column>
        </addColumn>
    </changeSet>

Konventionen zu Datentypen in der Datenbank

  • Primary Key: int8
  • Datumsfelder: TIMESTAMPZ