2

2 つの列を一意にしたいのですが、1 つのaddUniqueConstraint columnNamesセクション内に必要な列をリストしようとすると、2 つの addUniqueConstraint の原因で変更リストを作成しましたが、機能しませんでした。

そのため、「setSpec」列に addUniqueConstraint を指定し、「name」列に 2 番目を指定しましたが、制約は「setSpec」列にのみ適用され、名前の値が重複するエンティティを挿入する可能性があります。また、列の名前を「name」から「set_name」に変更しようとしましたが、動作は同じままです。

だから今、私は両方の列を一意にすることについて混乱しています。誰でも解決策を提案したり、私の間違いを指摘したりできますか?そのような大きなライブラリにそのような単純な欠陥があるとは思わないからです。ありがとうございました。しかし、興味深いことに、 addUniqueConstraint セクションを 1 つだけ残すと、指定された列のいずれかが制約を受けます。

ここに私のテーブルがあります:

<changeSet id="2020-07-07--16-00-create-set-table" author="Illia Daliek">
    <createTable tableName="set">
      <column name="id" type="uuid">
        <constraints primaryKey="true" nullable="false"/>
      </column>
      <column name="name" type="varchar(255)">
        <constraints nullable="false"/>
      </column>
      <column name="description" type="varchar(1024)"/>
      <column name="setSpec" type="varchar(255)">
        <constraints nullable="false"/>
      </column>
      <column name="created_by_user_id" type="uuid"/>
      <column name="created_date" type="timestamptz"/>
      <column name="updated_by_user_id" type="uuid"/>
      <column name="updated_date" type="timestamptz"/>
    </createTable>
  </changeSet>

これが、一意の制約を追加しようとする私の試みです

  <changeSet id="rename-column" author="Illia Daliek">
    <renameColumn tableName="set" oldColumnName="name" newColumnName="set_name"/>
  </changeSet>

  <!--this one works fine-->
  <changeSet  id="2020-08-28--11-00-add-unique-constraint-to-set.set_spec-column " author="Illia Daliek">
    <addUniqueConstraint  columnNames="setSpec"
                          constraintName="unique"
                          schemaName="${database.defaultSchemaName}"
                          tableName="set"/>
  </changeSet>

  <!--this one doesn't work-->
  <changeSet  id="2020-08-28--11-00-add-unique-constraint-to-set.name-column " author="Illia Daliek">
    <addUniqueConstraint  columnNames="set_name"
                          constraintName="unique"
                          schemaName="${database.defaultSchemaName}"
                          tableName="set"/>
  </changeSet>
4

1 に答える 1