2009-07-17 221 views
2

我想是因爲我聽到這很好(我是新手Web開發人員),以限制我的數據庫表中的約。我想讓用戶在數據庫中輸入一個列表。所以他們輸入一個標題,整體評論,然後開始製作清單。我無法弄清楚如何在不爲每個列表製作新表的情況下做到這一點。因爲,例如,一個用戶想要一個包含44個值的列表,而另一個用戶需要一個包含10個值的列表。如果不爲每個列表製作一個新表格,我都無法想象如何做到這一點。我非常感謝你能給我的任何幫助/見解。SQL數據庫設計需要幫助

回答

5

基本上,你想爲用戶列表,在表中的每一行是指一個用戶的名單表,另一個表用戶列表值,其中表中的每一行都有一列參考到它所屬的列表,以及用戶輸入的值列。

0

你的表可能是: 用戶名,INT ListID,INT(主鍵唯一標識符) 標題,VARCHAR(250) 評論,VARCHAR(MAX)

Example Content: 
1 | 1 | The Title  | My Comment 
1 | 2 | The Other Title | My other comment 
2 | 3 | First Comment | Second Person, first comment 

Eacher用戶只是得到他們的從查詢列表:

選擇ListID,影片名稱,評論作者the_Table 其中UserID = @UserID

0

你可以用一個逃脫對於所有列表行的表,比方說簡單地

CREATE TABLE ListLines (
    listID INTEGER, 
    lineNo INTEGER, 
    line TEXT, 
    PRIMARY KEY (listID, lineNo), 
    FOREIGN KEY (listID) REFERENCES Lists 
); 

與列出的表格成爲:

CREATE TABLE Lists (
    listID INTEGER PRIMARY KEY, 
    userID INTEGER, 
    title TEXT, 
    comment TEXT, 
    FOREIGN KEY (userID) REFERENCES Users 
); 

假設你有一個Users表與每個用戶的信息主鍵userID INTEGER(名等等)。

因此,要獲得給予其ID你剛纔

SELECT line FROM ListLines 
WHERE listID=:whateverid 
ORDER BY lineNo; 

,或者你可以UNION與例如在一個列表中的所有行標題:

SELECT title AS line FROM Lists 
WHERE listID=:whateverid 
UNION ALL 
SELECT line FROM ListLines 
WHERE listID=:whateverid 
ORDER BY lineNo; 

等等。這種靈活和高效的安排是做事的關係的方式...