2014-07-13 17 views

Trả lời

32

Sử dụng thẻ lồng nhau <constraints> trong thẻ cột của bạn.

Ví dụ:

<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

Bất kỳ ý tưởng làm thế nào để làm điều này trong YAML? Tôi sợ tài liệu Liquibase luôn để lại cho tôi mong muốn, mất mát, hoặc cả hai. – MikeB

+4

Bất kỳ ý tưởng nào trong đó cú pháp 'references =" employee (id) "' được ghi lại? 'references' được định nghĩa là [" Foreign key definition "] (http://www.liquibase.org/documentation/column.html) nhưng google dẫn hầu hết các truy vấn tới' addForeignKeyConstraint', đây không phải là cách tốt nhất để đi khi bạn đang tạo một bảng hoặc thêm các cột và đã có các thẻ ''. – Lambart

+5

Sử dụng cú pháp trên không hiệu quả đối với tôi, nó tạo ra các 'tham chiếu null (null)) sau đây'. Thay vì 'references =" employee (id) "' Tôi đã phải sử dụng 'referencedTableName =" employee "referencedColumnNames =" id "' – caspian

-1

Có lẽ bạn có thể thêm chìa khóa nước ngoài như sau:

<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> 
Các vấn đề liên quan