2013-09-26 80 views
0

在我的應用程序中,用戶可以創建項目(上傳他們的照片/圖片),欣賞或添加到收藏夾中的其他用戶項目,撰寫消息,發表評論。還有活動供稿,每個用戶可以看到新評論,新消息,朋友的新項目等。Mysql活動飼料設計

活動供稿中的每條記錄都可以與不同的對象相關聯。例如,類型new_vote的記錄可以連接到VoteProjectSender(誰投了票)。並且每個記錄都有owner。我有如下表(簡單地):

feed (id, owner_id, sender_id, project_id, vote_id, message_id, comment_id, type) 
projects (id, title) 
votes (id, vote) 

而且我希望每個記錄中涉及到多個對象。例如,類型new_message的記錄可能與多個消息有關。因此,在活動Feed頁面上,我可以向用戶顯示「Mike給你寫了4條消息」。在我看來它將是:

feed (id, type) 
projects (id, title) 
votes (id, vote) 
feeds_projects_relations (feed_id, project_id) 
feeds_votes_relations (feed_id, vote_id) 

和其他類似的表。

設計是否正確?有沒有更好的方法來做到這一點?

謝謝。

+0

如果您希望將用戶照片圖像數據作爲帶有BLOB字段的單獨表格包含在數據庫中,則可能需要考慮,因爲假設您使用的是InnoDB,回滾事務時文件系統上的文件不會被刪除/更改。 –

+0

@RaymondNijland,我不確定這件事。圖片是我網站上的主要內容,就是內容。將所有這些文件保存在數據庫中是個好主意嗎? – krasulya

+0

可能依賴應用程序/硬件/ MySQL配置/使用的存儲引擎/ ..在表和文件上存儲路徑文件有一個優點,這應該是更快的編寫文件,但是當你需要獲取一個文件,你需要做的一個數據庫請求和一個基於路徑的文件系統請求....如果您將文件存儲到數據庫中寫入文件可能比文件系統更慢,但獲取文件是一個簡單的內部連接,文件流將發送到php客戶端可能會更快......但你真的需要對這個基準進行基準測試 –

回答

0

您已經設計了您的數據庫,假設從feed到vote有多對多的關係。真的嗎?我會假設每個投票只涉及一個飼料。在這種情況下,不要使用feeds_votes_relations表,只需將feed_id添加到您的投票表中,以指向它所在的提要。

我也想知道feed是否是正確的表名。我認爲飼料是一個聚合體或一組。通常情況下,您希望您的表保存單個對象,如投票或項目,併爲表格或項目命名。

+0

我有表項目'項目',表'投票'表決等。我保持飼料recrods在一個單獨的表名爲'飼料'。 有些情況下,幾張選票可能與飼料有關。例如,2個用戶可以投票支持項目,我希望顯示用戶 「Mike L.和Jennie K.爲您的項目投了票。投票是:9.5,Mike來自7.9,Jennie來自7.9。 還有其他記錄many2many。有人可以給我5條消息,3個用戶可以爲我的項目添加5條評論等。 我想知道,這是不錯的設計? – krasulya

+0

@krasulya這聽起來仍然像投票是一對多。一個項目可以有多個投票,但每個投票只有一個項目。 – Vulcronos

+0

哦,我明白了。 「投票」可以只與一個「feed」關聯,沒錯。但我不想'投票'模型知道任何關於'feed'的信息。我想'feed'是獨立的。 – krasulya