如何在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值,但这不重要;)