具有自动生成键的外键约束,基本问题(InnoDB)

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

要回复问题请先登录注册