如何在将数据导入Parse.com时保持关系

时间:2013-06-08 02:21:35

标签: mysql parse-platform

我有一个数据库,我想将其导入Parse.com,但是无法解决数据应该如何存储在Parse中并保持这些数据之间的关系。

这是我目前的数据及其关系。

表1:视频

- > VideoName

- > URL

表2:表演者

- > PerformerName

- >生物

表3:游戏

- > GameName

- > GameDetail

表4:季节

- > SeasonName

- > SeasonDetail

关系是:

- >每个季节都可以有多个视频,但每个视频只能与一个季节相关联。

- >每个视频可以有一个或多个游戏

- >每个视频可以有一个或多个Performer

- >每个游戏都可以与一个或多个视频相关联

- >每个游戏都可以与一个或多个表演者相关联

- >每个演员都可以在一个或多个视频中

- >每个表演者可以与一个或多个游戏相关联。

这意味着数据之间存在多对多关系。

如果有人可以帮助我直接思考Parse如何处理关系数据库/信息,我会很感激。我已经阅读了关系数据文档,但我还没有完全理解它如何应用于我的数据。

我希望能够将数据导出数据库并将其导入Parse。我对将这些数据导入Parse并维持关系的任何建议持开放态度。

我需要这些关系,因为该应用程序将会提取以下查询:

- >检索执行者= x

的所有视频

- >检索所有表演者= x

的游戏

- >检索game = x

的所有表演者

- >检索season = x

的所有视频

根据需要加上其他人。

我希望有人可以提供帮助。如果您可以根据我上面提供的信息提供具体的示例,那将是非常好的! : - )

1 个答案:

答案 0 :(得分:3)

Parse以多种方式支持关系:

  • 指针(想想外键ID)
  • 指针数组(想想连接表,但只有当你总是希望得到所有这些时)
  • 关系(想想连接表,您要查询子集的位置)

您使用的内容在很大程度上取决于您的查询。在你的情况下,我会建议如下:

视频:

  • 姓名(字符串)
  • 网址(字符串)
  • 季节(指针)
  • 游戏(数组,假设这是一个简短列表)
  • 表演者(阵列)

表演者:

  • 姓名(字符串)
  • Bio(字符串,可能带有HTML或其他标记)

游戏:

  • 姓名(字符串)
  • 详情(字符串)
  • 表演者(阵列)

季节:

  • 姓名(字符串)
  • 详情(字符串)

对于您的查询(在JavaScript中,因为您没有指定语言):

// setup bits
var Video = Parse.Object.extend("Video");
var Performer = Parse.Object.extend("Performer");
var Game = Parse.Object.extend("Game");
var Season = Parse.Object.extend("Season");

// All videos where performer = x
var videosForPerformerQuery = new Parse.Query(Video);
// assumes performerX has been retrieved or initialised with an ID
// equalTo in this case will find records where performerX is in the array of performers
videosForPerformerQuery.equalTo('performers', performerX);
// if you need to output the full list of performers:
videosForPerformerQuery.include('performers');
// if you need the full season object:
videosForPerformerQuery.include('season');
videosForPerformerQuery.find({
    success: function(results) {
        // TODO: handle array of video objects in results
    },
    error: function(error) {
        // TODO: handle error
    }
});

// All games where performer = x
var gamesForPerformerQuery = new Parse.Query(Game);
// .. identical to above ..

// All performers where game = x
var gameQuery = new Parse.Query(Game);
gameQuery.include('performers');
// gameObjectID is a string key, e.g. "xWMyZ4YEGZ"
gameQuery.get(gameObjectId, {
    success: function(game) {
        // TODO: game.performers array should be populated, use it
    },
    // .. error handler too ..
});

// All videos where season = x
var videosForSeason = new Parse.Query(Video);
videosForSeason.equalTo('season', seasonX);
// .. find same as above examples ..

有时你会想要双向连接。您可以在每一端手动填充数组/关系,也可以使用新对象来保存关系(特别是如果关系包含额外信息)。例如:

GamePerformers:

  • 游戏(指针)
  • 表演者(指针)
  • 角色(字符串)

根据需要查询和include游戏/表演者:

var GamePerformers = Parse.Object.extend("GamePerformers");
var performersForGameQuery = new Parse.Query(GamePerformers);
performersForGameQuery.equalTo('game', gameX);
performersForGameQuery.include('performer');
performersForGameQuery.find({
    success: function(results) {
        for (var i = 0; i < results.length; i++) { 
            var object = results[i];
            console.log('Performer: ' 
                + object.get('performer').get('name') 
                + ' played role: ' 
                + object.get('role'));
        }
    }
});