考虑一个简单的情况,其中有2个表,名为Users和WorkGroups。
在这个给定的情况下,我需要跟踪哪个用户创建了一个工作组。
我已经做过的事情:
我在这里面临的问题是,这会在用户和工作组表之间产生循环引用。由于编程中的任何地方的循环引用都是不可能的。
我该如何解决这个问题?我有没有更好的设计模式?
修改 至于“循环引用是否大而不是”,概念上它们可能不是,但由于实现在不同的数据库中是非通用的,它们仍然是一个有效的问题。当您使用ORM时,情况会更加严重,因为ORM对数据库的支持限制了您可以拥有的数据库设计类型。
答案 0 :(得分:2)
您需要允许至少一个外键为NULL
。这将允许您在该表中创建第一行,将外键保留为占位符。在另一个表上创建相应的行后,您将更新第一行中的外键。
你也可以认为这是一个永久的条件。如果您在创建任何用户之前自动创建第一个工作组,则该第一个工作组实际上没有创建者,因此您可以将其设置为NULL
。