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

标签 oracle liquibase

我一直在努力寻找一种方法来创建 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 中的两列( id1id2 )。

关于oracle - 如何在liquibase中添加复合外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401036/

相关文章:

甲骨文 ORA-00933 : SQL command not properly ended

java - 使用R2DBC进行数据库迁移

mysql - 从 createView 标记中删除架构名称

postgresql - liquibase diff 不起作用

sql-server - 输出使用动态 PL/SQL 执行的 SELECT 的结果

java - Mybatis SQL session 提交看起来比以下代码慢

oracle - oracle 语句中的 TRUSTED/UNTRUSTED 关键字

oracle - 在Apache Nifi中引用一个查询的结果

java - 具有多模块项目的 Liquibase

spring-boot - liquibase dropFirst 忽略架构