2015-01-28 11 views
7

Sto creando una tabella di collegamento che ha 3 colonne; id, product_id, tournament_id.Aggiunta di un vincolo univoco composito in Liquibase

L'aggiunta di un uniqueConstraint alla colonna "id" è banale, ma voglio assicurarmi che ogni coppia di (product_id, tournament_id) sia unica.

L'esempio a Liquibase.org mostra

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

ma è possibile ottenere questo all'interno di un blocco <createTable>?

Inoltre, solo per confermare; questo crea un vincolo univoco composito sulle due colonne o crea due vincoli univoci separati?

risposta

5

Io sono abbastanza sicuro che:

  1. È non può farlo all'interno del tag CreateTable in sé, ma si può farlo all'interno dello stesso changeset come quando il tavolo è creato.
  2. E fa creare un vincolo univoco composto sulle due colonne. Un modo per controllare è eseguire liquibase con il comando per generare l'SQL per l'aggiornamento piuttosto che eseguire il comando di aggiornamento e controllare cosa fa per il tuo database. Sulla riga di comando, anziché eseguire liquibase update, eseguire liquibase updateSQL.
0

È possibile leggere liquibase manual problema anche simili si possono trovare here

Nel tuo caso dovrebbe essere:

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