我一直在努力寻找一种方法来创建 liquibase 中的复合外键 .
我有一张 table 一个 它有一个复合 PK,比方说( id1, id2 )。我正在尝试制作另一张 table 乙 ,其中 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
任何帮助将非常感激。
谢谢
最佳答案
我不使用 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: number of referencing columns must match referenced columns
因为您的详细信息表包含单列(
id1_id2
)并尝试引用表 A 中的两列( id1
、 id2
)。
关于oracle - 如何在liquibase中添加复合外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401036/