Liquibase には、列を一意として定義する方法が 2 つあります。
テーブルを作成するとき
<constraints>
は、列で次を使用します。<createTable tableName="my_table"> <column name="my_column"> <constraints unique="true" uniqueConstraintName="my_table_my_column_uk"> </column> </createTable>
テーブルを作成した後、次を使用し
<createIndex>
ます。<createTable tableName="my_table"> <column name="my_column"/> </createTable> <createIndex tableName="my_table" unique="true" indexName="my_table_my_column_uk"> <column name="my_column"/> </createIndex>
単一列の一意のキーに対するこれら 2 つのアプローチに違いはありますか?
MySQL に関する私自身の観察では、違いはないようです。両方の宣言 (上記) は同じSHOW CREATE TABLE
結果をもたらします。
...
UNIQUE_KEY `my_table_my_column_uk` (`my_column`)
...
しかし、これはすべてのデータベース実装に当てはまるのでしょうか?それとも、データベースごとに<createIndex unique="true">
異なるスキーマ出力を生成する<constraint unique="true"/>
のでしょうか?
背景: コード内のリレーショナル モデルから直接、liquibase の変更ログを作成するスクリプトがあります。モデルが列が一意であることを示した場合、生成スクリプトは両方の宣言を作成しました。生成された結果をクリーンアップしていて、宣言の 1 つを削除したいのですが、それが適切かどうかを知りたいです。