gpt4 book ai didi

java - 如何在 liquibase 变更集中设置多个外键?

转载 作者:行者123 更新时间:2023-12-01 22:18:04 25 4
gpt4 key购买 nike

我有一个由两个表组成的连接表,其中一个以 id 作为主键,而另一个以 3 列作为主键,基本上是复合主键。现在,在连接表上我应该引用哪一列,或者更准确地说,在编写更改集时如何将多个列引用为外键。

以下是表格:

<changeSet id="Create X table">
<createTable tableName="X">
<column name="SERVICE" type="VARCHAR(50)">
<constraints primaryKey="true"/>
</column>
<column name="ACTION" type="VARCHAR(50)">
<constraints primaryKey="true"/>
</column>
<column name="TARGET" type="VARCHAR(50)">
<constraints primaryKey="true"/>
</column>
</createTable>
</changeSet>

第二个表:

<changeSet id="Create Y table">
<createTable tableName="Y">
<column name="ID" type="VARCHAR(36)">
<constraints primaryKey="true" primaryKeyName="XPKY"/>
</column>
<column name="NAME" type="VARCHAR(50)">
<constraints nullable="false" unique="true"/>
</column>
</createTable>

连接表:

 <changeSet id ="Create X_Y_REL table">
<createTable tableName="X_Y_REL">
<column name="Y_NAME" type="VARCHAR(50)">
<constraints nullable="false" referencedTableName="Y" referencedColumnNames="NAME"
foreignKeyName="XFK1X_Y_REL"/>
</column>
<column name="X_ID" type="VARCHAR(150)">
<constraints nullable="false" referencedTableName="X" referencedColumnNames="?????"
foreignKeyName="XFK2_X_Y_REL"/>
</column>
</createTable>

因此,我不知道在这里放置什么作为引用的列名称,因为表 X 中没有单个主键列。它的主键是复合键。

有什么建议吗?

最佳答案

这更像是一个数据库设计问题,而不是 Liquibase 问题,但这是我对此的想法。

您可能应该只向每个表添加一个整数或 UUID 列以用作代理主键。从长远来看,这将使你和任何追随你的人的事情变得更容易。然后始终使用该键作为外键关系。

如果您还希望数据库强制执行某些列组合对于数据库的每一行也必须是唯一的,您也可以这样做,但这是一个单独的问题。

如果您不想添加代理主键,则在第三个变更集中,您可以引用组成复合键的多个列名称,并用逗号分隔它们。它看起来像这样:

<changeSet id ="Create X_Y_REL table" author="Steve">
<createTable tableName="X_Y_REL">
<column name="Y_NAME" type="VARCHAR(50)">
<constraints nullable="false" referencedTableName="Y" referencedColumnNames="NAME"
foreignKeyName="XFK1X_Y_REL"/>
</column>
<column name="X_ID" type="VARCHAR(150)">
<constraints nullable="false" referencedTableName="X" referencedColumnNames="SERVICE,ACTION,TARGET"
foreignKeyName="XFK2_X_Y_REL"/>
</column>
</createTable>
</changeSet>

关于java - 如何在 liquibase 变更集中设置多个外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com