如何在sqlite for android中实现一对多对象数据库

如何在sqlite for android中实现一对多对象数据库,android,sql,sqlite,Android,Sql,Sqlite,我对SQLite和SQL非常陌生,我正在努力解决以下问题: 我的应用程序将显示社区成员列表。如果我点击一个成员,我可以看到成员发表的文章列表。post是一个具有名称、时间和消息的对象。如何将其存储在SQLite数据库中,以便通过userid查询数据库并获取特定用户的帖子列表 我有一个包含以下列的用户表: USER_ID | NAME 我有一个包含以下列的Tweet表: USER_ID | NAME | TIME | MESSAGE 我的问题是:链接这两个表的最佳方法/结构是什么?我是为每个用

我对
SQLite
SQL
非常陌生,我正在努力解决以下问题:

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

我有一个包含以下列的用户表:

USER_ID | NAME
我有一个包含以下列的Tweet表:

USER_ID | NAME | TIME | MESSAGE
我的问题是:链接这两个表的最佳方法/结构是什么?我是为每个用户创建一个新的tweet表,还是将所有tweet存储在一个长表中,先存储用户1的tweet,然后存储用户2的tweet,等等

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

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

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

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

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

您需要有两个表:

1.用户

用户名

2.推特

用户ID |时间|消息

现在解释一下:

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

表2列出了所有用户的所有tweet,在用户和他的tweet之间有一列连接。 在表2中,USER_ID是外键,它正好指向users表中的一行

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

Select TWEETS.MESSAGE, TWEETS.TIME
from Users, TWEETS
where Users.USER_ID = TWEETS.USER_ID
and Users.NAME = "Pierre";

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

您需要的是一个包含用户的表,
users
。在此表中存储用户信息(
user\u id
name

Tweets
表中,存储所有用户的所有Tweets。每行一条tweet。我使用
tweet\u id
作为
Tweets
表的
主键

然后,你可以像Dave Swersky说的那样,通过加入
JOIN
,在代码中“链接”这两者

例如:

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'
我不确定您的
推文
表中的
名称是什么。据我所知,推特没有名称/主题(?)。您不需要在
tweets
users
表中存储用户名

要快速掌握SQLFiddle,请点击此处:

加入

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

我会在tweet表中添加一个
tweet\u id
,然后为每一条tweet存储一行。@谢谢,我会尝试一下。以后可能需要删除一条tweet。特里这样做的方法更为明确,因为推特感谢。我是将所有用户的所有帖子都存储在一个Post表中,还是每个用户都有一个单独的Post表?@Pierre规范化数据库通常为每个存储的“类型”数据包含一个表,因此无需创建其他表。您可以将用户和相关帖子添加到这两个表中。好的,清除。非常感谢您提供如此快速、知识丰富且有用的答案。假设帖子总数为4,那么上面的查询将返回4行,每行包含
u.Name
(冗余)?谢谢,非常有用。不幸的是,我没有足够的分数来投票给你的答案…通过避开JOIN关键字,这个答案提供了一个同样适用于sqlite的解决方案,正如OP所暗示的!这似乎是最好的方法@非常感谢特里·塞德勒。当我获得更多的分数时,我将对此进行投票…这是一个多么棒的SQLFIDLE链接。好极了,没问题!祝你好运SQL FIDLE上我的“时间”字段只是一个varchar值,但这不重要;)