2014-07-13 31 views

Odpowiedz

32

Użyj zagnieżdżonego tagu <constraints> w tagu kolumny.

Przykład:

<changeSet id="SAMPLE_1" author="alice"> 
    <createTable tableName="employee"> 
     <column name="id" type="int" autoIncrement="true"> 
      <constraints primaryKey="true"/> 
     </column> 
     <column name="first_name" type="varchar(255)"/> 
     <column name="last_name" type="varchar(255)"> 
      <constraints nullable="false"/> 
     </column> 
    </createTable> 
</changeSet> 

<changeSet id="create address table" author="bob"> 
    <createTable tableName="address"> 
     <column name="id" type="int" autoIncrement="true"> 
      <constraints primaryKey="true"/> 
     </column> 
     <column name="line1" type="varchar(255)"> 
      <constraints nullable="false"/> 
     </column> 
     <column name="line2" type="varchar(255)"/> 
     <column name="city" type="varchar(100)"> 
      <constraints nullable="false"/> 
     </column> 
     <column name="employee_id" type="int"> 
      <constraints nullable="false" foreignKeyName="fk_address_employee" references="employee(id)"/> 
     </column> 
    </createTable> 
</changeSet> 
+3

jakiś pomysł, jak to zrobić w YAML? Obawiam się, że dokumentacja Liquibase zawsze pozostawia mnie zagubioną lub zagubioną. – MikeB

+4

Czy jest jakiś pomysł na dokumentację składni 'references =" employee (id)? "reference" jest zdefiniowane jako ["Definicja klucza obcego"] (http://www.liquibase.org/documentation/column.html), ale google kieruje większość zapytań do 'addForeignKeyConstraint', co nie jest najmilszym sposobem, aby przejść tworzysz tabelę lub dodajesz kolumny i masz już znaczniki ''. – Lambart

+5

Korzystanie z powyższej składni nie działa dla mnie, wygenerowało następujące "REFERENCES null (null))". Zamiast 'references =" employee (id) "' musiałem użyć 'referencedTableName =" employee "refercatedColumnNames =" id "' – caspian

-1

Może można dodać klucz obcy, jak poniżej:

<changeSet id="1" author="ozhanli"> 
    <!-- 
    Owner Entity. 
    --> 
    <createTable tableName="owner"> 
     <column name="id" type="bigint" autoIncrement="true"> 
      <constraints primaryKey="true" nullable="false"/> 
     </column> 
     <column name="name" type="varchar(255)"> 
      <constraints nullable="true" /> 
     </column> 
    </createTable> 

    <!-- 
    Car Entity. 
    --> 
    <createTable tableName="car"> 
     <column name="id" type="bigint" autoIncrement="true"> 
      <constraints primaryKey="true" nullable="false"/> 
     </column> 
     <column name="brand" type="varchar(255)"> 
      <constraints nullable="true" /> 
     </column> 
     <column name="owner_id" type="bigint"> 
      <constraints nullable="true" /> 
     </column> 
    </createTable> 

    <!-- 
    Constraints for Car entity 
    --> 
    <addForeignKeyConstraint baseColumnNames="owner_id" 
          baseTableName="car" 
          constraintName="fk_car_owner_id" 
          referencedColumnNames="id" 
          referencedTableName="owner"/> 
</changeSet>