2014-07-13 15 views

risposta

32

Utilizzare un tag nidificato <constraints> nel tag colonna.

Esempio:

<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

Qualsiasi idea di come fare questo in YAML? Ho paura che la documentazione di Liquibase mi lasci sempre volere, perso o entrambi. – MikeB

+4

Qualche idea su dove la sintassi 'references =" impiegato (id) "' è documentata? 'references' è definito come [" Foreign key definition "] (http://www.liquibase.org/documentation/column.html) ma google indirizza la maggior parte delle query a' addForeignKeyConstraint', che non è il modo migliore per andare quando stai creando una tabella o aggiungendo colonne e hai già i tag ''. – Lambart

+5

L'utilizzo della sintassi sopra non ha funzionato per me, ha generato il seguente 'REFERENCES null (null))'. Invece di 'references =" employee (id) "' Ho dovuto usare 'referencedTableName =" employee "referencedColumnNames =" id "' – caspian

-1

Forse si può aggiungere chiave esterna, come di seguito:

<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> 
Problemi correlati