gpt4 book ai didi

c# - 外键应该以哪种方式进入一对一关系

转载 作者:行者123 更新时间:2023-12-03 16:18:13 25 4
gpt4 key购买 nike

我有一个位置表,有一个 ID 的主键。

我还有 location_lonlat 表,其中包含一个名为 LID(用于位置 ID)的列。

这就是这两个表当前的关联方式。

我想在其中一个表上创建一个外键,如果我坚持它目前的工作方式(最简单的方法),那么我应该从
location_lonlat.LID 指向locations.id。

当我尝试这样做时,出现错误

"The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "



我认为这是因为 location.id 是一个主键,我可能会绕过它,但似乎整个方法有点味道。

在位置表上有一个 locationLonLatId 不是更好吗?

无论如何,他们有1-1的关系,所以也许这无关紧要?

什么方法最好?

最佳答案

简而言之,即使在一对一关系的情况下,最好还是识别父表(首先添加记录的表)并建立从父到子的关系。

如果您关心为什么,请进一步阅读...

情况一

如果两个表之间的 1 对 1 关系是标识性的(外键成为子键的主键),则相同的数据结构会导致两个表具有相同的主键。唯一的区别是,如果声明了 RI 约束以确保键保持同步,则必须在另一个表(“来自”表)之前将记录添加到另一个表中。

情况二

如果子表具有不同的主键,即关系是非识别性的,则必须从父表添加到子表的关系,以便在子表中创建必要的外键属性来保存连接 ID。

情况3

在与 1) 相同的情况下(一对一,表之间具有识别关系)但基数在关系的子端显示为可选,让关系从父级到子级是有意义的.

如果关系是从子级到父级,则导致父表的外键属性必须可以为空(以允许没有子记录的父记录),因此父记录有时会在此为 NULL字段,如果没有子记录。

如果关系是从父到子的,则外键在子表中,父表中不存在外键。在这种情况下,要么有子记录(1 到 1),要么没有(1 到 0)。就存储而言,这导致了更有效的结构。

关于c# - 外键应该以哪种方式进入一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8214973/

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