web-dev-qa-db-ja.com

Liquibaseで複合一意制約を追加する

3つの列を持つリンクテーブルを作成しています。 id、product_id、tournament_id。

「id」列にuniqueConstraintを追加するのは簡単ですが、(product_id、tournament_id)のペアが一意であることを確認したいと思います。

Liquibase.orgの例は

<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint catalogName="cat"
        columnNames="id, name"
        constraintName="const_name"
        deferrable="true"
        disabled="true"
        initiallyDeferred="true"
        schemaName="public"
        tableName="person"
        tablespace="A String"/>
</changeSet>

しかし、<createTable>ブロック内でこれを達成することは可能ですか?

また、確認するだけです。これは複合一意制約を2つの列に作成しますか、それとも2つの個別の一意制約を作成しますか?

20
Alec

私は次のことを確信しています。

  1. あなたはできません createTableタグ自体の中でそれを行いますが、あなたはcanテーブルが作成されたときと同じチェンジセット内でそれを行います。
  2. does 2つの列に複合一意制約を作成します。確認できる1つの方法は、更新コマンドを実行するのではなく、コマンドでliquibaseを実行して更新用のSQLを生成し、データベースに対して何を行うかを確認することです。コマンドラインでは、liquibase updateを実行するのではなく、liquibase updateSQLを実行します。
16
SteveDonie

あなたはliquibaseを読むことができます manual あなたが見つけることができる同様の問題 here

あなたの場合、それは:

<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint
        columnNames="id, product_id, tournament_id"
        constraintName="your_constraint_name"
        tableName="person"
        />
</changeSet>
4
ciostek223