11

我很陌生,SQLite并且SQL正在努力解决以下问题:

我的应用程序将显示社区成员列表。如果我点击一个成员,我可以看到成员发布的帖子列表。帖子是具有名称、时间和消息的对象。如何将其存储在SQLite数据库中,以便我可以查询数据库userid并获取特定用户的帖子列表。

我有一个包含这些列的用户表:

USER_ID | NAME

我有一个包含这些列的推文表:

USER_ID | NAME | TIME | MESSAGE

我的问题是:link这两张表的最佳方法/结构是什么?我是为每个用户创建一个新的推文表,还是将所有推文存储在一个长表中,首先为用户 1 发布推文,然后为用户 2 等推文?

我不一定在寻找代码转储,而是对逻辑的解释。

4

3 回答 3

14

已经给出并接受了答案,但我想补充一下。

你想要的是一张有用户的桌子,users. 在此表中,您存储您的用户信息 ( user_id, name)。

在您的Tweets表中,存储所有用户的所有推文。每行一条推文。我正在使用tweet_idas 作为PRIMARY KEY桌子Tweets

然后,您可以通过JOIN像 Dave Swersky 所说的那样在代码中“链接”两者。

例如:

Users
--------------------------
user_id   |   user_name
--------------------------
   123    |    'Terry'
   34     |    'Pierre'

Tweets
-----------------------------------------------------------------------
tweet_id |   user_id   |  time      |         message     
-----------------------------------------------------------------------
   0     |    123      | 135646     |  'This is a tweet'
   1     |    123      | 132646     |  'This is another tweet by Terry'
   2     |    34       | 352646     |  'Pierre\'s tweet'

我不确定name你的Tweets桌子上有什么用。据我所知,推文没有名称/主题(?)。您不需要将用户名存储在tweetsusers表中。

如需快速 SQLFiddle,请访问此处:http ://www.sqlfiddle.com/#!2/43492/1/0

加入

SELECT u.user_id, u.name, t.time, t.message, t.time 
FROM my_users u
INNER JOIN tweets t ON u.user_id = t.user_id
于 2012-10-10T14:32:03.510 回答
11

这是一个典型的“JOIN”场景,用户和帖子之间存在一对多的关系。

以下是显示所有用户及其帖子的查询示例:

SELECT u.User_ID, u.Name, p.Time, p.Message
FROM Users u INNER JOIN Posts p ON u.User_ID = p.User_ID

这将产生一个包含四列的结果集。每个“推文”都将与其相关的用户记录一起显示。“你”。和“p”。语法是用于使查询更易于阅读的表别名。

于 2012-10-10T14:02:25.397 回答
6

您需要有两个表:

1.用户

USER_ID | 姓名

2.推文

USER_ID | 时间 | 信息

现在解释一下:

表 1 代表用户,有关于用户的所有数据,如姓名、电话、地址等。

表 2 是所有用户的所有推文,并且有一列连接用户和他的推文。在表 2 中,USER_ID 是外键,它正好指向用户表中的一行。

要获取一个用户的所有推文,您可以编写下一个查询:

Select TWEETS.MESSAGE, TWEETS.TIME
from Users, TWEETS
where Users.USER_ID = TWEETS.USER_ID
and Users.NAME = "Pierre";
于 2012-10-10T14:06:33.720 回答