Jak skonfigurować klucze obce za pomocą atrybutów znaczników kolumn: foreignKeyName
i references
? Jedyny przykład, jaki znalazłem, pokazuje how to add foreign keys after the fact.Liquibase: Jak ustawić klucz obcy w tagu kolumny?
25
A
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>
-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>
jakiś pomysł, jak to zrobić w YAML? Obawiam się, że dokumentacja Liquibase zawsze pozostawia mnie zagubioną lub zagubioną. – MikeB
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
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