来自同一张表的两个FK具有相同的含义

时间:2016-07-24 09:19:47

标签: mysql foreign-keys primary-key

我正在尝试与对话功能聊天作为我的学习项目。任何用户都应该能够将消息写入另一个用户并从该用户那里接收答案,而其他任何人都无权访问该对话。 在MySQL中,我创建了具有id,登录名,密码和权限的表user,具有id的表message,作者(用户ID为FK),消息文本,发布时间和对话ID( FK),还有一个表dialogue,其中id,FK表示一个用户,FK表示另一个用户,还有其他列带有一些参数。我想让聊天的方式让我只用一个查询就可以让两个给定用户之间的所有消息相互传递,但在上面的实现中,我必须先检查两列才能找到一个用户,然后检查所有条目。用户找到他的对话者。只有这个查询会返回一个对话PK,可以用来获取所有消息。我认为这种认识是完全错误的,但我找不到修复它的方法。我试图将对话ID附加到表user,但这使我的基础变得更加复杂。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是我的第一个模式:http://puu.sh/qdLMw/f9acde605c.png但是我还制作了另一个包含对话者和对话ID的表格。当某个用户向另一个用户写入消息时,该表中的查询请求行将当前用户设置为发送者并将其对话者设置为目标,并从该行获取对话ID。如果没有这样的行,系统将运行另一个查询,在其位置切换发送者和目标。如果结果再次为空,将创建新的对话框,对话框表中的两行将两个用户相互链接。 http://puu.sh/qdORJ/2122558f64.png 它看起来对我来说稍微好一点,如果有人有更好的答案,请告诉我。