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

我对SQLiteSQL很陌生,我正在努力解决以下问题:

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

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

 USER_ID | NAME 

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

 USER_ID | NAME | TIME | MESSAGE 

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

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

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

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

 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。’ 语法是用于使查询更易于阅读的表别名。

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

你想要的是一个包含用户和users表。 在此表中,您可以存储用户信息( user_idname )。

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

然后你可以通过像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表中的name是什么。 据我所知,推文没有名称/主题(?)。 您不需要在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 

你需要有两个表:

1. 用户

USER_ID | 名称

2. TWEETS

USER_ID | 时间| 信息

现在解释一下:

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

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

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

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