2011-04-29 17 views
1

我想創建一個數據庫系統,用戶可以在其中創建列表以及他們的朋友(他們允許列表訪問)可以添加到列表。我的「列表」的一個大型數據庫表或每個「列表」的新表格

我試圖繪製出該模式之間不能決定如下:

清單表 隨着屬性: listid,入門號,入門,用戶ID

其中,listid是要更改的列表,entry-number是列表中條目的編號(因此列表中的第一項是條目0),entry是列表中的條目,user-id是添加的用戶條目

VS

具體名單表 其中特定表與屬性的每個列表做出 入門號,入門,用戶ID

這似乎是第二個選項使得它更容易獲得信息/更改一旦我們找到了表,而第一個更容易理解。

我剛進入數據庫,所以我想正確選擇模式。

謝謝!

+0

我不知道,但第二個選項是沒有意義的:它說,您將創建一個表中的每個它意味着列表每次向數據庫添加數據時都要更改模式。也許我不只是得到它。 – 2011-04-29 23:47:38

回答

1

第一個選項更易於維護和規範化。查詢此選項並創建使用該列表的應用程序會更容易。

+0

我同意,規範化ftw – 2011-04-29 23:50:05

+0

我的問題是,如果我有很多用戶訪問一個列表表單,這不會一定比爲每個列表創建一個單獨的表更低效率(和更慢?)? 這是可縮放的嗎? – mamontazeri 2011-04-29 23:53:46

+0

創建必須爲每個用戶創建一個新表的應用程序將更加困難。假設您想查找具有最長列表的用戶。你會如何查詢?使用單個表的效率不會很低。數據庫系統針對這種情況進行了優化。 – 2011-04-29 23:57:24

1

從我所看到的,你應該有兩張桌子。一個保存用戶信息,另一個保存列表信息。 用戶將擁有userID(PK),並且您的List表將具有listID(PK)和一個用戶ID作爲FK,以引用該列表屬於哪個用戶。所以呀,你的第一選擇:) GL

例如:

User 
userID(PK) | username | etc 
-------------------------- 
1 | Bob | etc 
2 | Nick | etc 


Lists 
listID(PK) | userID(FK) | date_entered | entry 
---------------------------------------------- 
1 | 2 | 1/2/2011 | blah blah 
2 | 2 | 2/1/2011 | blah blah 
3 | 1 | 2/3/2011 | blah blah 
4 | 2 | 2/6/2011 | blah blah 
5 | 1 | 3/1/2011 | blah blah 

//you should know the userID for the user you are looking up list info for (C#) 
query = "select * from Lists where userID = " + userID.ToString() + " ORDER BY date_entered DESC"; 
+0

對於列表中的每個條目,我需要跟蹤創建該條目的用戶。你的設置似乎並不快。 – mamontazeri 2011-04-29 23:53:15

+0

它不怎麼樣? – 2011-04-29 23:57:29

+0

@mamontazeri您將需要加入列表項目表與用戶表,您可以獲得用戶的詳細信息。 – 2011-04-30 00:00:54

相關問題