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

Pie*_*rtz 11 sql sqlite android

我是很新的SQLite,并SQL和我与如何处理以下挣扎:

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

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

USER_ID | NAME
Run Code Online (Sandbox Code Playgroud)

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

USER_ID | NAME | TIME | MESSAGE
Run Code Online (Sandbox Code Playgroud)

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

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

Ter*_*ler 14

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

你想要的是一个用户表,users.在此表中,您可以存储用户信息(user_id,name).

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

然后,您可以通过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'
Run Code Online (Sandbox Code Playgroud)

我不确定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
Run Code Online (Sandbox Code Playgroud)


Dav*_*sky 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
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含四列的结果集.每个"推文"将显示其相关的用户记录.'你'.和'p.' 语法是用于使查询更易于阅读的表别名.


Ofi*_* A. 6

你需要有两个表:

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";
Run Code Online (Sandbox Code Playgroud)

  • 但现在我做了.+1. (3认同)
  • 谢谢,真的很有帮助.不幸的是,我没有足够的积分来投票给你答案...... (2认同)