Android应用程序Parse.com上的多对多关系
我正在考虑开发一个应用程序,它将有一个向上投票/向下投票系统(就像我们这里的Stack Overflow)。 我很难建造基地,也就是建筑 假设我有一个帖子列表,在ListView中查看,数据来自数据库(Parse.com db)。每个帖子都有自己的Int列,名为“投票数”,包含其拥有的赞成票/反对票的数量Android应用程序Parse.com上的多对多关系,android,database,design-patterns,database-design,parse-platform,Android,Database,Design Patterns,Database Design,Parse Platform,我正在考虑开发一个应用程序,它将有一个向上投票/向下投票系统(就像我们这里的Stack Overflow)。 我很难建造基地,也就是建筑 假设我有一个帖子列表,在ListView中查看,数据来自数据库(Parse.com db)。每个帖子都有自己的Int列,名为“投票数”,包含其拥有的赞成票/反对票的数量 这就是我的问题:我绝对希望每个用户在每个帖子上只能投一次票。我该怎么做?如何将每个用户保存在数据库中,使其只能投票一次?如果您打算在数据库设计级别解决此问题,类似的内容可能会对您有所帮助:
这就是我的问题:我绝对希望每个用户在每个帖子上只能投一次票。我该怎么做?如何将每个用户保存在数据库中,使其只能投票一次?如果您打算在数据库设计级别解决此问题,类似的内容可能会对您有所帮助:
用户{USER_ID}的主键
POST{USER\u ID,POST\u SEQUENCE\u NUMBER}的主键
投票{Vote_ID}的主键
现在具有唯一约束
投票表uc1=
{voter\u FK,post\u FK}
将满足 每个用户只能对每个帖子进行一次投票 同时具有此唯一约束
投票表uc2=
{voter\u FK!=post\u FK.USER\u ID}
将满足 你不能投票给你自己的职位
正如您在问题中所指出的,您正在使用Parse.com。我以前没有使用过Parse.com,因此我的建议可能不会立即生效,但文档中的快速搜索将我指向以下链接: 联接表允许您与附加到该关系的信息(例如投票(-1/+1)、日期等)建立多对多关系 这里您需要的是两个实体(
Post
和User
),它们应该使用连接表Vote
进行连接,该表跟踪每个用户对该帖子的投票。我想试试这样的东西:
ParseUser currentUser = getCurrentUser();
ParseObject post = ... //This is the post where the user is going to vote on.
ParseObject currentVote = new ParseObject("Vote");
currentVote.put("voter", currentUser);
currentVote.put("post", post);
currentVote.put("date", new Date());
currentVote.put("vote", -1); //down-vote
currentVote.saveInBackground();
你可以看到这是怎么回事
我不确定Parse.com如何处理约束,但根据查询界面,您可能希望通过在添加投票之前运行查询,确保用户在每篇文章上只投票一次:
// set up the query on the Vote table
ParseQuery<ParseObject> query = ParseQuery.getQuery("Vote");
query.whereEqualTo("voter", ParseUser.getCurrentUser());
query.whereEqualTo("post", post);
// execute the query
query.findInBackground(newFindCallback<ParseObject>() {
public void done(List<ParseObject> votes, ParseException e) {
if(votes.length <= 0) {
//apply the vote as above
} else {
//user already voted
}
}
});
//在投票表上设置查询
ParseQuery=ParseQuery.getQuery(“投票”);
query.whereEqualTo(“投票者”,ParseUser.getCurrentUser());
查询:whereEqualTo(“post”,post);
//执行查询
query.findInBackground(newFindCallback(){
公共作废完成(列出投票,e){
如果(Voces.length如果不想让用户上下两次投票,这意味着仅用一个简单的整数来保存数字是不够的。您必须将每个用户与帖子上的投票关联。因此,用户和帖子将与另一个表/关系连接以跟踪投票。没错。这是我难以理解的部分。)nding.我需要每个用户指向我的Posts表中的每一行吗?或者可能保存他喜欢的每个post ID?这意味着随着时间的推移,每个用户文件都会很重,不是吗?嘿,Moshen。谢谢,但我很难理解这一点。嗨,模型或约束是可以理解的?模型我理解。我做了一些这样的事情rts。这是我不理解的限制。我发现这个问题,我猜你的建议很相似。它基本上意味着:创建3个表:User、Post和Like。User和Post有id,Like有一个指向User行和Post行的指针。