需要SQL数据库设计帮助

时间:2009-07-17 01:45:18

标签: sql-server optimization database-design

我试图限制数据库中表的大小,因为我听说这很好(我是一名新手Web开发人员)。我想让用户在数据库中输入一个列表。因此,他们输入标题,整体评论,然后开始制作列表。如果不为每个列表创建一个新表,我无法弄清楚如何做到这一点。因为,假设一个用户想要一个包含44个值的列表而另一个用户想要一个包含10个值的列表。如果不为每个列表创建一个新表,我想不出怎么做。我非常感谢你能给我的任何帮助/见解。

3 个答案:

答案 0 :(得分:5)

基本上,您希望为用户列表创建一个表,其中表中的每一行引用一个用户的列表,另一个表用于用户列表值,其中表中的每一行都有一列用于引用它所属的列表,以及用户输入值的列。

答案 1 :(得分:0)

你的桌子可能是: UserID,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用户只是从查询中获取他们的列表:

从the theTable中选择ListID,Titel,Comment 其中UserID = @UserID

答案 2 :(得分: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包含每个用户信息(名称等)。

因此,要获得列表的所有行,只需

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;

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