2009-07-17 98 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; 

等等。这种灵活和高效的安排是做事的关系的方式...