Oracle 如何在liquibase中添加复合外键?

Oracle 如何在liquibase中添加复合外键?,oracle,liquibase,Oracle,Liquibase,我一直在努力寻找一种在liquibase中创建复合外键的方法 我有一个表a,它有一个复合PK,比方说(id1,id2)。我正在尝试创建另一个表B,其中A.PK映射为AFK 我正在用liquibase和YAML,但有些东西似乎不合用 我尝试在创建表时添加FK(因此在列标记中) 不幸的是,此语法返回一个错误: Caused by: java.sql.SQLSyntaxErrorException: ORA-02256: number of referencing columns must match

我一直在努力寻找一种在liquibase中创建复合外键的方法

我有一个表a,它有一个复合PK,比方说(id1,id2)。我正在尝试创建另一个表B,其中A.PK映射为AFK

我正在用liquibase和YAML,但有些东西似乎不合用

我尝试在创建表时添加FK(因此在列标记中)

不幸的是,此语法返回一个错误:

Caused by: java.sql.SQLSyntaxErrorException: ORA-02256: number of referencing columns must match referenced columns
我尝试过的另一件事是首先创建表,使用所需FK的列,并尝试在该列上添加FK约束。这不会引发任何错误,但不会产生任何影响(LB的日志在描述中也显示为“空”)

任何帮助都将不胜感激


谢谢

我没有使用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\u id2
),并试图引用表a中的两列(
id1
id2
)。

您尝试过吗?大概是这样的:

- changeSet:
    id: 1
    author: you
    changes:
    - addForeignKeyConstraint:
        baseColumnNames: id1, id2
        baseTableName: tableB
        constraintName: FK_tableB_tableA
        referencedColumnNames: id1, id2
        referencedTableName: tableA

第一种语法是尝试创建一个列,并尝试将其与两个外部列关联?我明白你的意思,但我不确定如何映射复合FK,而liquibase文档并没有真正的帮助谢谢,我认为这是有关oracle的正确解决方案,但我不知道如何在liquibase约束fk_det_mas外键(id_1,id_2)引用主(id_1,id_2)中映射它;我试试看。再次谢谢你,不客气。不幸的是,我也不知道,但我知道不能将一列映射为两列。祝你好运
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>
- changeSet:
    id: 1
    author: you
    changes:
    - addForeignKeyConstraint:
        baseColumnNames: id1, id2
        baseTableName: tableB
        constraintName: FK_tableB_tableA
        referencedColumnNames: id1, id2
        referencedTableName: tableA