我应该使用第三个表中的多对多关联表吗?

时间:2017-01-29 00:15:53

标签: database database-design many-to-many

我正在实施一个消息系统。 我有这些表:ThreadUserThreadUserMessage

  • 每个Thread都有User个,通过ThreadUser(多对多)
  • 每个User都有Thread个,通过ThreadUser(多对多)
  • 每个Message属于Thread(多对一)
  • 每个Message属于User(多对一)

Message.from指向ThreadUser而不是User是个好主意,以确保线程中的消息只能来自该线程中的用户而不是任何用户在我的DB?有什么缺点?

1 个答案:

答案 0 :(得分:0)

我认为应该是解决问题的合理方法:

用户表:

UserId (PK), UserName, Email, ......


主题表:

ThreadId (PK), ThreadName, ......


ThreadUser表:

ThreadUserId (PK), ThreadId(FK), UserId(FK),........

请记住在此表中制作UNIQUE KEY的{​​{1}},从而确保每个用户只能参与一次。


最后,
消息表:

(ThreadId, UserId)

请注意,我们通过在消息表中引用MessageId (PK), ThreadUserId(FK), MessageTitle, MessageBody,........来识别 ThreadUser。这应该有助于确定哪个用户以及在哪个帖子下发布了哪条消息。

这意味着,在有人发布ThreadUserId内的任何内容之前,应用程序必须验证Messages是否存在ThreadUserId以及User是否存在Thread ;我希望写一些东西。

希望有所帮助。