Как добавить составной внешний ключ в liquibase? - PullRequest
0 голосов
/ 19 сентября 2018

Я уже некоторое время пытаюсь найти способ создания составного внешнего ключа в ликвидазе .

У меня есть таблица A , котораяскажем, имеет композитный PK ( id1, id2 ).Я пытаюсь создать другую таблицу B , в которой A.PK отображается как FK .

, которую я использую liquibase с YAML и, кажется, что-то не складывается.

Я пытался добавить FK при создании таблицы (так в теге столбца)

- column:
    name: id1_id2
    type: int
    constraints:
       nullable: false
       foreignKeyName: fk_id1_id2
       references: A(id1, id2)

К сожалению, этот синтаксис возвращает ошибку:

Caused by: java.sql.SQLSyntaxErrorException: ORA-02256: number of referencing columns must match referenced columns

ДругойЯ сначала попытался создать таблицу со столбцом для нужного FK и попытаться добавить ограничение FK для этого столбца.Это не выдает никакой ошибки, но ничего не делает (также журнал для LB говорит "пусто" в описании)

changes:
  - addForeignKeyContraint:
    baseColumnNames: id1, id2
    baseTableName: B
    constraintName: fb_id1_id2
    referencedColumnNames: id1, id2
    referencedTableName: A

Любая помощь будет высоко ценится.

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы пробовали addForeignKeyConstraint ?Как то так:

- changeSet:
    id: 1
    author: you
    changes:
    - addForeignKeyConstraint:
        baseColumnNames: id1, id2
        baseTableName: tableB
        constraintName: FK_tableB_tableA
        referencedColumnNames: id1, id2
        referencedTableName: tableA
0 голосов
/ 19 сентября 2018

Я не использую Liquibase, но вот как это должно выглядеть в отношении Oracle: если вы хотите создать составной внешний ключ (в таблице подробностей), тогда он должен ссылаться на составнойпервичный ключ (в основной таблице).

Посмотрите на этот пример:

SQL> create table master
  2    (id_1 number,
  3     id_2 number,
  4     constraint pk_mas primary key (id_1, id_2));

Table created.

SQL> create table detail
  2    (id_det number constraint pk_det primary key,
  3     --
  4     id_1   number,
  5     id_2   number,
  6     constraint fk_det_mas foreign key (id_1, id_2) references master (id_1, id_2));

Table created.

SQL>

В противном случае он не будет работать;вот почему вы получили ошибку

ORA-02256: количество ссылочных столбцов должно соответствовать ссылочным столбцам

, поскольку ваша таблица сведений содержит один столбец (id1_id2) ипопытался сослаться на два столбца в таблице A (id1, id2).

...