我如何计算Angular 2 / Ionic 2应用程序的数据模型

时间:2016-06-30 17:51:52

标签: arrays ionic-framework angular couchdb pouchdb

我正在使用Typescript处理Angular 2 / Ionic 2中的旅行应用程序。我需要弄清楚如何建模我的服务/对象。这个应用程序将有用户。

每个用户都可以创建一个整体旅行。你可以将它命名为#34; Europe 2016。"然后你可以添加多天。他们可能会旅行14天。他们每天都可以计划当天的活动,包括活动时间,活动地点等等。他们还可以查看天气,添加酒店信息等等。

大致可能看起来像(对不起,这很难看)

Trip: {
  "name": "Europe 2016",
   "tripPlans": [
    {"day1": [{plan1: do something, time: 01000}, {plan2: do something else, time: 01000}}], "time": "0800", "date":"09/01"2016, hotel, weather},
    {"day2": [{plan1: do something, plan2: do something}], "time": "0800", "date":"09/01"2016, hotel info, weather info}
    ]
}

还需要知道旅行的第一个和最后一个日期。

我也可能想回去查询用户群体的热门内容,例如" Gotham中最常见的活动"

这是我花了100个小时学习编码后的第一个主要应用程序,我的个人项目让我兴奋不已。它解决了我的个人问题。我已经到了这样的地步,我很难找到好的例子/资源来帮助我解决这个问题。

我已经花了很多时间参与框架选择,所以我想坚持下去。到目前为止,我已尝试使用PouchDB / CouchDB。我目前只在Ionic中构建移动版本。

任何建议都会受到赞赏,即使它的github计划要查看,你已经保存过的教程等等。

1 个答案:

答案 0 :(得分:1)

我主要使用CouchDB,但我也开始使用PouchDB / CouchDB开发Ionic应用程序。首先,你需要知道当你有很多嵌套文档时NoSQL是好的,但有时候你不能选择做关系"。

首先,我重新设计了一下你的数据模型:

{
    "name": "Europe 2016",
    "type": "trip",
    "tripPlans": [{
        "name": "This is the first plan",
        "days": {
            "day1": [{
                "registeredActivityId": null,
                "plan": "do something",
                "time": 1000
            }, {
                "registeredActivityId": "activty_goToTheMoon",
                "plan": "Go to the moon and the previous activity",
                "time": 1000
            }],
            "time": "0800",
            "date": "09/01/2016",
            "hotel": "Hotel name",
            "weather": "Sunny"
        }
    }]
}

现在,您没有多少选择:

  1. 您可以在嵌套的活动中构建一个视图,例如

     function(doc) {
    if (doc.type == "trip" && doc.tripPlans && doc.tripPlans.join)
        for (var i = 0; i < doc.tripPlans.length; i++) {
            var plan = doc.tripPlans[i];
            if (plan.days)
                for (var n in plan.days)
                    if (plan.days.hasOwnProperty(n)) {
                        var day = plan.days[n];
                        //We emit the activity id for a better tracking.
                        //If it's not available, we emit the description(not recommanded)
                        emit(day.registeredActivityId ? day.registeredActivityId : day.plan);
                    }
        }
    

    }

  2. 您可以在文件之间建立关系

  3. 如果经常计算视图,则使用嵌套方法可以加快查询速度。否则,&#34;关系方法&#34;使链接更容易&#34;预定义的活动&#34;例如。如果您需要更多信息,可以私下与我联系。