web-dev-qa-db-fra.com

Ajout d'une contrainte unique composite dans Liquibase

Je crée une table de liens qui a 3 colonnes; id, product_id, tournoi_id.

L'ajout d'un uniqueConstraint à la colonne "id" est trivial, mais je veux m'assurer que toute paire de (product_id, tournoi_id) est unique.

L'exemple de Liquibase.org montre

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

mais est-il possible d'accomplir cela dans un <createTable> bloquer?

Aussi, juste pour confirmer; cela crée-t-il une contrainte unique composite sur les deux colonnes, ou cela crée-t-il deux contraintes uniques distinctes?

20
Alec

Je suis assez certain que:

  1. Vous ne pouvez pas le faire à l'intérieur de la balise createTable elle-même, mais vous peut le faire dans le même ensemble de modifications que lorsque la table est créée.
  2. Il crée crée une contrainte composite unique sur les deux colonnes. Une façon de vérifier est d'exécuter liquibase avec la commande pour générer le SQL pour la mise à jour plutôt que d'exécuter la commande update et de vérifier ce qu'elle fait pour votre base de données. Sur la ligne de commande, plutôt que d'exécuter liquibase update vous courriez liquibase updateSQL.
16
SteveDonie

Vous pouvez lire la base de données manuel également un problème similaire que vous pouvez trouver ici

Dans votre cas, cela devrait être:

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