2017-01-29 7 views
0

私はメッセージングシステムを実装しています。 私は、これらのテーブルがあります:ThreadUserThreadUserMessage3番目のテーブルの多対多の関連テーブルを使用する必要がありますか?

  • Threadは各UserThreadUser(多対を経て、多くのThread秒を持っている(多対多)ThreadUser
  • を経て、多くのUser秒を持っています
  • Messageが属する多)Thread(多対一)
  • Messageはに属し(多対1)

は、それは、スレッド内のメッセージのみがそのスレッド内のユーザーではなく任意のユーザであることができることを保証するために、ThreadUser代わりのUserMessage.fromポイントを持っているのは良いアイデアです私のDB?何が欠点ですか?ここで

+0

私はこの権利を理解していることを確認するだけでなく、明確化のために質問したいと思います...スレッドとユーザーの多対多の関係の性質は何ですか?スレッド、例えば、スレッド1は 'User 1'と' User 2'に同時に関連付けられますか? –

+0

多くのユーザはスレッドに関与しています – benwaffle

答えて

0

は、私はあなたの問題に対する適切な解決策になるはずです何を感じるのです。

ユーザー表:

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


スレッド表:

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


ThreadUser表:

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

ことにより、各ユーザーはスレッドだけに一度参加できることを保証し、この表に(ThreadId, UserId)の複合UNIQUE KEYを作ることを忘れないでください。


最後に、
メッセージ表:

MessageId (PK), ThreadUserId(FK), MessageTitle, MessageBody,........

私たちがメッセージテーブルにThreadUserIdをreferncingによって両方ThreadUserを識別していることに注意してください。そのため、どのユーザーがどのメッセージをどのスレッドに投稿したのかを特定するのに役立ちます。

このことは、Messagesの誰かのポストは何も前に、アプリケーションはThreadUserIdがそのUserのために、彼らが役立ちます。

ホープの何かを書くことを希望しているThreadのために存在するかどうかを検証する必要があります。

+0

'ThreadUserId'を削除し、' ThreadId'を 'ThreadId'に、' UserId'をPKIに 'ThreadUser'、' ThreadId'と 'UserId'を' Messages'に、 'ThreadUser'の列を参照します。意味のないドメインが1つ少ないことを意味し、 'Messages'から' User'または 'Threads'に直接参加できます。 – reaanb

関連する問題