这不是circular reference。
这将是如果电子邮件将有一个强烈的诚信关系邀请和邀请一个独立的强大的完整性关系回电子邮件(例如)。
编辑:关于设计
随着亨克Holterman指出的问题是,如果你的设计是normalized到需要的程度。
Assiming 表:主键如
用户:ID
电子邮件:ID,users_id
邀请:ID,users_id,emails_id
,并假设上的table_id领域和外键没有其他限制放置在表上(例如,只有一部分密钥是唯一的),那么你已经建模如下:
- 为每个用户可以有多个电子邮件,你不能有电子邮件没有相应的用户记录
- 每个电子邮件可以有几个邀请,你不能有没有相应的电子邮件,也没有用户记录邀请(注:从上面的定义,我们可以不知道,如果USER_ID指进入在电子邮件或用户)
现在只有你可以说,如果这些规则对应于从现实世界的情况的,你正在尝试模拟。
查看数据库设计的一种方法是 - 实际上没有错误的数据库设计,您几乎总是可以找到可以使某些东西看起来像错误的数据。这就是为什么不采取两个规则(以句子形式)和表格(E-R图表,表格和关系的描述),不可能说设计中是否存在问题(尽管可以从个人经验中提出建议)。
为了说明 - 上面的说明不清楚user_id引用哪个表可能看起来很容易回答。考虑到你说每个邀请都有一封邮件,常见的答案就是它应该从邮件表中引用user_id。
否则,可能存在一个邀请,其中记录的邀请user_id和邮件记录的user_id不同。
通常情况下,这应该会让红色灯标记为“标准化数据”,闪烁在您的脑海中。但是,这里通常没有提到的假设是email_id决定了user_id,而这可能不是真的(!)。
这取决于数据的语义(每个表的谓词) - 例如,如果您试图模拟可以向一个人发送邀请并从另一个人接收电子邮件答复的情况人(例如通过秘书邀请人并接受直接回复),那么红灯熄灭,一切都很好 - 这就是真正发生的事情,这就是你在设计中允许的。
我认为如果您向我们展示您的表格模式的裸露骨骼会更好。 – satoru 2010-04-08 08:12:53
基本上它会是这样的:
– SlappyTheFish 2010-04-08 08:18:40更好编辑额外的信息到问题中不在评论中。并使用反引号进行格式化。 – 2010-04-08 08:20:10