我是外键约束的新手。我将制定一个简单的例子来解释我的情况。
我有一张表user
和一张表entry
。在user
中有一个user.firstEntry
,它是entry.EntryID
的外键。在entry
中有一个entry.userID
,它是user.userID
表的外键。这些ID都是自动增量值。
这样的周期是否被禁止?然后我将不得不改变设计?
我无法在两个表中插入一些有效的条目,因为第一个插入已经说明了约束存在问题。自动提交已关闭。
我该怎么办?
由于
答案 0 :(得分:1)
用户和条目都需要预先创建另一个。并且由于无法创建其他任何一个,您将遇到此问题 IF 外部约束检查就是。
无论我从你的问题中能理解什么,每个用户似乎都有多个条目。所以你的表设计可能看起来像Table_User(user_id(pk),user_name等),条目表可能是Table_Entry(entry_id(pk),entry_whatever,...,user_id(fk到用户表))因为看起来用户是独立但条目依赖于用户。
答案 1 :(得分:1)
外键约束应该阻止您将无效数据添加到外键列中。
在大多数情况下,它会检查指定表中是否存在该值。因为您的用户和条目表中有一个循环,所以当您尝试创建条目时,它将检查用户表中是否存在entry.userID的值。当您尝试添加新用户时,它将执行相同操作,它将在条目表中检查您为user.firstEntry输入的值。如果用户和条目都是新的,则由于您的周期,无法链接这两者。新条目记录需要现有用户,新用户记录需要现有条目。当两个表都为空时,我认为你不能满足约束条件。
我建议将外键保留在条目表中的userID(因为我假设条目链接到用户)并找到一些其他方式来表示用户的第一个条目。也许是user_entry_history表或其他类似的东西。
免责声明 - 自从我搞砸了数据库设计以来已经有一段时间了。
答案 2 :(得分:1)
有点奇怪的设计,但你可以这样做:
创建用户时,将firstEntry设置为NULL。 插入具有该用户ID的条目。 更新用户并将firstEntry设置为插入条目的id。