Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序Parse.com上的多对多关系_Android_Database_Design Patterns_Database Design_Parse Platform - Fatal编程技术网

Android应用程序Parse.com上的多对多关系

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列,名为“投票数”,包含其拥有的赞成票/反对票的数量 这就是我的问题:我绝对希望每个用户在每个帖子上只能投一次票。我该怎么做?如何将每个用户保存在数据库中,使其只能投票一次?如果您打算在数据库设计级别解决此问题,类似的内容可能会对您有所帮助:

我正在考虑开发一个应用程序,它将有一个向上投票/向下投票系统(就像我们这里的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行的指针。