如何解决数据库中的循环依赖?

How to work around circular dependency in databases?

我的数据库中的两个表(Post 和 Thread)相互引用,这被认为是 SQL 服务器不支持一对一关系的解决方案。参见 diagram 。我让 key_post 在我的第一个数据库中不接受空值,但这意味着我不能插入任何一个表,所以我必须让 key_post 可以为 null 至少能够先创建线程提交 key_post 字段,如果我想删除 key_post ,我可以将 key_post 设置为 null ,但我想找到一个不需要在代码中特别注意的解决方案,因为它可以变得凌乱。

Entity Framework 不会允许这种情况发生,除非一个为空。那是因为它会先插入一个,而 FK 在那里,它会失败。您可以像现在一样使 1 null 并被迫这样做,或者您需要创建一个 "ThreadPost" table 定义为:

ThreadPost

ThreadId (PK)
PostId (PK)

然后您将从 Post 中删除 ThreadId 并从 Thread 中删除 PostId。从技术上讲,如果您首先自动使用代码,我相信 EF 会以这种方式设计 tables。