2012-06-18 61 views
1

我很難爲我的應用程序設計合適的數據模型。
在我的應用程序中,我有成對的參與者將一起完成幾項活動。每個配對在其存在過程中將進行2-3次對話。每個對話可能有許多由配對參與者創作的消息。
我有最好的模式是這樣的:專用聊天應用程序的數據模型設計

  PAIRINGS 
     / \ 
     /  \ 
     V   V 
PARTICIPANTS  CONVERSATIONS 
-pairing_id  -pairing_id 
     \  /
     \  /
     V  V 
     MESSAGES 
     -participant_id 
     -conversation_id 

但是這種模式允許以與該對話相關的配對之外的消息的作者,這似乎是錯誤的。任何人對如何構建我的數據模型有更好的建議?

+0

這是太模糊。沒有標準符號。沒有足夠的細節。 – Jonno

+0

我沒有足夠的聲望發佈圖片,因此我無法包含圖表。如果有任何問題我可以回答,我很樂意這樣做。 – Selah

回答

2

這是一個常見問題。添加pairing_idMESSAGES表並更改適當兩個FOREIGN鍵包括此列:

  PAIRINGS 
     / \ 
     /  \ 
     V   V 
PARTICIPANTS  CONVERSATIONS 
-pairing_id  -pairing_id 
     \  /
     \  /
     V  V 
     MESSAGES 
     -participant_id 
     -conversation_id 
     -pairing_id 

大多數DBMS也會要求你添加上PARTICIPANTS (pairing_id, participant_id)UNIQUE指數,並在CONVERSATIONS (pairing_id, conversation_id)

+0

有趣...這是一個常見的模式,我可以讀更多關於?有什麼我可以在互聯網上搜索的術語? – Selah

+0

是的,我應該說這在菱形設計中很常見。看到這個類似的問題:[SQL:數據庫規範化,同時保留約束](http://stackoverflow.com/questions/7183039/sql-normalization-of-database-while-retaining-constraints/7183985#7183985)或這個(更多複雜)一:[從多個候選鍵中選擇](http://stackoverflow.com/questions/9082575/choosing-from-multiple-candidate-keys/9082972#9082972) –

+0

請注意,這需要複合(複合)PK或唯一索引和一個複合外鍵 - 而且一些ORM與複合FKs有困難或根本無法使用這些。 –