2011-10-02 51 views
1

我想存儲屬於用戶的筆記,書籤,視頻和圖像的數個項目的用戶:Mysql的設計與數據

簡化用戶表如下:

user: id, email, password_hash 

一註釋包含一個標題和內容,而書籤包含一個標題和URL

note: id, title, content, (user_id) 
bookmark: id, title, uri 
video: id, title, uri 
images: id, title, uri 

我可以創建一個表,所有這些,但是如果我想添加別的東西,例如任務,我會爲此創建另一個表。你如何建議我設計桌子?

是mysql最好的分貝,或者像mongodb會更好?

+0

你可以有'ID,標題,content'和'user_id'一個表,以'content'作爲一種通用的領域?然後添加另一個字段,指定行定義的內容的類型。 – Bojangles

+0

「標題」的唯一性範圍是什麼? - 全球唯一,每種內容類型唯一,每個用戶唯一或每個用戶和內容類型組合的唯一性?內容中是否會有除url之外的字段?你使用InnoDB(所以集羣是一個問題)?您是否需要在不更改數據庫模型的情況下指定新的內容類型的能力? –

+0

a)每種內容類型都是唯一的,b)時間戳,已刪除(bool)c)否,我沒有使用InnoDB。 –

回答

0

由於JamWaffles建議你可以爲內容的一個表,一個用於內容類型,即:

content: id, title, uri, content_type_id, user_id 
content_type: id, name 

編輯:內容表看起來是這樣的:

------------------------------------------------------------- 
| id | title |  uri  | content_type_id | user_id | 
------------------------------------------------------------- 
| 1 | 'My note' | '/note?id=1' |  4  | 56 | 
------------------------------------------------------------- 

和內容類型表:

--------------- 
| id | name | 
--------------- 
| 4 | 'note' | 
--------------- 

我還沒有真正使用MongoDB,但我想你可以使用下面的結構ure:

{ 
    "id": "...", 
    "email": "...", 
    "password_hash": "...", 
    "notes": { 
    "id": "...", 
    "title": "...", 
    "uri": "..." 
    } 
    "bookmarks": { 
    ... 
    } 
} 

MongoDB和其他NoSQL數據庫一樣有其優點和缺點。你將不得不評估你的具體需求,以確定你的更好的套件。就我個人而言,我不明白爲什麼你不能爲你的proprosed數據庫結構使用mysql。

我希望這有助於
每Flitig
Netlight諮詢

+0

然後註釋內容會發生什麼?我應該爲此創建一個單獨的表格嗎? –

+0

在mysql的情況下,你會在表'內容'的筆記。 'content'中的示例行可以是'content_type'中的對應行{123,'My note','/ note?id = 1',4,56}'','{4''note'}' – flitig