我有一个数据库,我想将其导入Parse.com,但是无法解决数据应该如何存储在Parse中并保持这些数据之间的关系。
这是我目前的数据及其关系。
表1:视频
- > VideoName
- > URL
表2:表演者
- > PerformerName
- >生物
表3:游戏
- > GameName
- > GameDetail
表4:季节
- > SeasonName
- > SeasonDetail
关系是:
- >每个季节都可以有多个视频,但每个视频只能与一个季节相关联。
- >每个视频可以有一个或多个游戏
- >每个视频可以有一个或多个Performer
- >每个游戏都可以与一个或多个视频相关联
- >每个游戏都可以与一个或多个表演者相关联
- >每个演员都可以在一个或多个视频中
- >每个表演者可以与一个或多个游戏相关联。
这意味着数据之间存在多对多关系。
如果有人可以帮助我直接思考Parse如何处理关系数据库/信息,我会很感激。我已经阅读了关系数据文档,但我还没有完全理解它如何应用于我的数据。
我希望能够将数据导出数据库并将其导入Parse。我对将这些数据导入Parse并维持关系的任何建议持开放态度。
我需要这些关系,因为该应用程序将会提取以下查询:
- >检索执行者= x
的所有视频- >检索所有表演者= x
的游戏- >检索game = x
的所有表演者- >检索season = x
的所有视频根据需要加上其他人。
我希望有人可以提供帮助。如果您可以根据我上面提供的信息提供具体的示例,那将是非常好的! : - )
答案 0 :(得分:3)
Parse以多种方式支持关系:
您使用的内容在很大程度上取决于您的查询。在你的情况下,我会建议如下:
视频:
表演者:
游戏:
季节:
对于您的查询(在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'));
}
}
});