gpt4 book ai didi

php - 如何处理循环外键插入?

转载 作者:可可西里 更新时间:2023-11-01 07:13:34 25 4
gpt4 key购买 nike

我有一个表'release_group' 和另一个表'release',如下所示:

release_group 
------------------------
release_group_id (PRIMARY KEY)
name
main_release_id (FOREIGN KEY)

release
------------------------
release_id (PRIMARY KEY)
release_group_id (FOREIGN KEY)
name

如果我创建一个发布行,release_group_id 不可用,只是因为它尚未创建。但是,如果没有 ma​​in_release_id,我无法创建 release_group 行。所以这是一种没有办法的情况。

编辑:release_group 中的main_release_id 表示该release 是该组的主要版本,我将使用该版本作为引用。

处理这种情况的专业方法是什么?

1.删除表 release_group 中的外键索引 ma​​in_release_id 并赋予属性 ALLOW NULL。创建 release_group 行,以便我可以在发布行中应用它的 ID。

2。保留表“release_group”中的“main_release_id”外键索引并为其分配一个临时整数值 0。创建发布行并相应地更新 release_group 中的外键?请记住,如果这是要走的路,我可能会无意中得到值为 0 的外键,我不知道数据库中是否符合这种道德规范?

处理这种情况的专业方法是什么?

谢谢

最佳答案

看到一个版本不能属于多个组,您可以通过以下方式消除复杂性:

  1. 完全删除 main_release_id 字段

  2. release表中添加一个release_main字段;它将是 NULL(不是主要的)或 1(主要的)。

  3. (release_group_id, release_main) 上添加一个 UNIQUE 约束,以确保只能有一个主版本。

更新

如果一个版本可以属于多个组,则需要创建一个多对多表并将两个表中的外键移动到其中:

(release_group_id [FK], release_id [FK], is_main)

主键将跨越前两个字段。确保只能有一个主要版本需要第一个和最后一个字段的跨越唯一键。

旧答案

假设 main_release_id 是一个可为空的字段,我建议如下:

  1. 插入release_groupmain_release_idnull;获取最后插入的 ID。

  2. 插入release入口,传递上一步的id;获取最后插入的 ID。

  3. 更新 release_group 表条目,将 main_release_id 的值设置为您从上一步获得的值。

  4. 提交交易

或者,您可以使用序列,以便在插入条目之前知道 id。请参阅手册中 LAST_INSERT_ID() 下的示例.

关于php - 如何处理循环外键插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478322/

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