4. Zend Tutorial

Nachdem ich im dritten Tutorial erklärt hatte, wie die (vorläufige) Struktur der Datenbank aussieht, müssen wir noch ein paar Vorbereitungen schaffen, damit wir einfach unsere Datenbank aktualisieren können. Das ganze habe ich bereits in meinem Artikel Zend Framework und Liquibase beschrieben. Ich möchte dazu auch nur die Abweichungen niederschreiben.

Ant Build Datei

Die Ant-Build-Datei sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<project name="liquibase-test">
  <description>
    Zend Framework Tutorial
  </description>
 
  <!-- prepare -->
  <target name="prepare">
    <path id="library.classpath">
      <fileset dir="library/3rdparty/mysql">
        <include name="*.jar" />
      </fileset>
      <fileset dir="library/3rdparty/liquibase">
        <include name="*.jar" />
      </fileset>
    </path>
 
    <taskdef resource="liquibasetasks.properties">
      <classpath refid="library.classpath" />
    </taskdef>
 
    <!-- set global properties for this build -->
    <property name="changelog.file" location="db/changelog.xml" />
    <property name="base.path" location="." />
  </target>
 
  <!-- properties -->
  <target name="properties_development" depends="prepare">
    <property name="database.driver" value="com.mysql.jdbc.Driver" />
    <property name="database.url" 
       value="jdbc:mysql://localhost/zend_volleyball" />
    <property name="database.user" value="root" />
    <property name="database.password" value="" />
  </target>
 
  <!-- development -->
  <target name="development" depends="properties_development">
    <updateDatabase changeLogFile="${changelog.file}" 
      driver="${database.driver}"
      url="${database.url}" username="${database.user}" 
      password="${database.password}"
      classpathref="library.classpath" />
  </target>
</project>

Damit das ganze funktioniert müssen folgende Voraussetzungen erfüllt sein:

  • Im Ordner library/3rdparty/mysql muß ein MySQL-Connector verfügbar sein,
  • Im Ornder library/3rdparty/liquidbase muss Liquidbase verfügbar sein,
  • Ant muss installiert sein. Das habe ich in Ant unter Windows 7 installieren bereits beschrieben.
  • Java muß auf dem System installiert sein.
  • Die Datei db/changelog.xml muss angelegt werden. Inhalt wie nachfolgend beschrieben.

Liquidbase

Die Datei changelog.xml stellt den Einstiegspunkt  für Liquidbase dar. Dort referenzieren wir bisher nur eine weitere Datei:

<?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-2.0.xsd">
 
 <include file="/db/001.setup.xml" /> 
 
</databaseChangeLog>

Nun formulieren wir unser Datenbank Model in Liquidbase:

<?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-2.0.xsd">
 
  <preConditions>
    <dbms type="mysql" />
  </preConditions>
 
  <changeSet id="10" author="set">
 
    <!-- Team -->
    <createTable tableName="volleyball_team">
      <!-- common -->
      <column name="id" type="int" autoIncrement="true">
        <constraints primaryKey="true" nullable="false" />
      </column>
      <column name="name" type="varchar(255)">
        <constraints nullable="false" />
      </column>
      <column name="available" type="boolean" />
      <column name="fee_paid" type="boolean" />
      <column name="competition_id" type="int" />
      <column name="group_id" type="int" />
    </createTable>
 
    <!-- Competition -->
    <createTable tableName="volleyball_competition">
      <!-- common -->
      <column name="id" type="int" autoIncrement="true">
        <constraints primaryKey="true" nullable="false" />
      </column>
      <column name="name" type="varchar(255)">
        <constraints nullable="false" />
      </column>
      <column name="start" type="datetime" />
      <column name="single_duration" type="time" />
      <column name="number_of_sets" type="int" />
    </createTable>
    
    <!-- Group -->
    <createTable tableName="volleyball_group">
      <!-- common -->
      <column name="id" type="int" autoIncrement="true">
        <constraints primaryKey="true" nullable="false" />
      </column>
      <column name="name" type="varchar(255)">
        <constraints nullable="false" />
      </column>
    </createTable>
    
    <!-- Fremdschlüssel -->
    <addForeignKeyConstraint constraintName="fk_competition_team" 
      baseTableName="volleyball_team" baseColumnNames="competition_id" 
      referencedTableName="volleyball_competition" 
      referencedColumnNames="id" />
    <addForeignKeyConstraint constraintName="fk_group_team" 
      baseTableName="volleyball_team" baseColumnNames="group_id" 
      referencedTableName="volleyball_group" 
      referencedColumnNames="id" />
  </changeSet>
</databaseChangeLog>

An sich nichts spannendes. Wenn man sich ein bisschen in die Dokumentation von Liquidbase einliest, ist das kein Problem mehr. Wenn alles richtig gemacht wurde können wir das Ant-Skript in der Konsole starten und sollten folgende Ausgabe erhalten:

Ant Skript ausführen

So sollte die Ausgabe in der Konsole aussehen.

Kommentar verfassen