插入带有外键约束的记录

Insert record with foreign key constraints

首先,如果这个问题重复,我深表歉意 - 但我发现很难用简短、准确的词来说明我的问题。

我有这些实体。 左边包含几个组(就像在 Unix 中,以便让整个组同时使用数据),目前,它始终为 1。右边的包含项目 - 中间的确保一个组可以获得访问多个项目。

可以看到,它们之间存在外键关系。现在,我想在 nmd__tree 中创建一个新项目。这样做时,它 returns 一个错误:

Cannot add or update a child row: a foreign key constraint fails (nmd.nmd__tree, CONSTRAINT FK_nmd__tree FOREIGN KEY (treeid) REFERENCES nmd__helperusergrouphierarchy (treeidfk))

这是有道理的,因为 nmd_tree 依赖于辅助实体中的有效外键 - 但与此同时,它提出了问题,即 treeidfk 还不知道,因为它是在 nmd__tree

中自动生成的

一个解决方案可能是删除关系,在nmd__tree[=40=中插入记录,提取新写入的主键(treeid) 并使用新 ID 在中间帮助实体中创建一条记录。它会工作,但真的不是很优雅。此外,删除的关系会带来其他潜在问题。

我的意图是创建一个查询,通过同时创建两条记录来处理这个问题。我知道,不可能进行双重插入并找到 this suggestion (我的版本不写任何记录),以及一篇建议存储过程的文章,我认为这不应该做一个差异

非常感谢您向正确的方向推动。

看来您的约束定义方向错误;中间的 table 应该有两个外键约束,而不是两端的 table。这样,您可以在两端 table 插入记录,然后 link 使用中间的 table.

向上插入记录