我试图限制数据库中表的大小,因为我听说这很好(我是一名新手Web开发人员)。我想让用户在数据库中输入一个列表。因此,他们输入标题,整体评论,然后开始制作列表。如果不为每个列表创建一个新表,我无法弄清楚如何做到这一点。因为,假设一个用户想要一个包含44个值的列表而另一个用户想要一个包含10个值的列表。如果不为每个列表创建一个新表,我想不出怎么做。我非常感谢你能给我的任何帮助/见解。
答案 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;
等等。这种灵活高效的安排是做事的关系方式......