Oracle 如何在liquibase中添加复合外键?
我一直在努力寻找一种在liquibase中创建复合外键的方法 我有一个表a,它有一个复合PK,比方说(id1,id2)。我正在尝试创建另一个表B,其中A.PK映射为AFK 我正在用liquibase和YAML,但有些东西似乎不合用 我尝试在创建表时添加FK(因此在列标记中) 不幸的是,此语法返回一个错误: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
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