1

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

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

表 1:视频

-> 视频名称

-> 网址

表 2:表演者

-> 表演者姓名

-> 生物

表 3:游戏

-> 游戏名称

-> 游戏详情

表 4:季节

-> 季节名称

-> 季节详情

关系是:

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

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

-> 每个视频可以有一个或多个表演者

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

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

-> 每个表演者可以在一个或多个视频中

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

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

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

我希望能够从我的数据库中导出数据并将其导入 Parse。我愿意接受任何关于将这些数据导入 Parse 并维护关系的建议。

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

-> 检索所有执行者 = x 的视频

-> 检索所有执行者 = x 的游戏

-> 检索所有游戏 = x 的表演者

-> 检索所有季节 = x 的视频

根据需要加上其他人。

我希望有人能帮帮忙。如果您可以根据我上面的信息提供具体示例,那就太好了!:-)

4

1 回答 1

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 ..

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

游戏表演者:

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

根据需要查询它和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'));
        }
    }
});
于 2013-08-21T00:43:33.933 回答