【问题标题】:Designing NoSql database for smart device management system为智能设备管理系统设计NoSql数据库
【发布时间】:2016-11-18 10:25:37
【问题描述】:

我正在尝试为智能供暖设备唐楼监控系统设计无 sql 数据库。该建筑有一个主要的供暖系统,通过跟踪公寓内的温度为每间公寓供暖。出于这个原因,每间公寓都有一个温度计,它不断地向主系统发送温度。这个想法是让一名管理员可以跟踪来自主系统的所有报告,还可以分别查看每间公寓的温度。租户只能看到他自己的公寓温度。 管理员可以管理许多建筑物,而一栋建筑物可以有许多公寓,并且只有一个主要的智能供暖系统。现在我假设一间公寓只能有一个温度计。我可以用 sql 设计数据库,但我必须使用 NoSql,而且我没有太多设计复杂的 nosql 数据库的经验。 我试图设计建筑系列,但我认为这是完全错误的。我是否应该为管理员和租户分开收藏,然后为建筑物和公寓收藏,如果是,那么如何加入?也许有人知道一些例子,我可以看看并有一些想法? `{ 建筑:1, address: '这里的地址', 公寓: [ { 没有:'1',楼层:'0'},
{没有:'2',楼层:'1'}, { 没有:'3',楼层:'2'}

],
thermometer : [
    { id : ObjectID('AAAA'), apartmentNo: '3'},         
    { id: ObjectID('F17C'), apartmentNo: '2'}, 
    { id: ObjectID('D2AA'), apartmentNo: '1'}

],
mainHeatingSys: [
    { thermId : ObjectID('AAAA')},         
    { thermId: ObjectID('F17C')},
    { thermId: ObjectID('D2AA')
    // etc
]

}`

【问题讨论】:

  • 有很多种方法来设计一个面向文档的数据库,而且很大程度上取决于你的应用程序的查询需求。一个非常广泛的、征求意见的问题,并且与 StackOverflow 无关。仅供参考,您的问题是以文档为中心的;没有“nosql”模式,因为 NoSQL 数据库有很多种:键/值、文档、列、图。
  • 不理解“取决于您应用的查询需求”?我描述了我需要拥有什么以及管理员和租户应该从 db 获得什么。如果我可以按照我定义的规则检索数据(管理员应该获取主系统和每个公寓数据,租户只有他自己的公寓数据)我不在乎我使用哪种方式,除非它使我的应用程序工作更高效。根据我提供的这些信息,您可以轻松创建 mysql 数据库,所以我认为 NoSql 也是如此。

标签: mongodb nosql


【解决方案1】:
    var adminschema = new Schema({
        name: { type: String, required: true },
        email: { type: String, required: true, index: { unique: true }, lowercase: true },
        password: { type: String, required: true }
)}
    var heatingSystemschema = new Schema({
            number: { type: Number, required: true },
            building:[{type: Schema.Types.ObjectId}] //  objectid of building
 )}
    var buildingschema = new Schema({
        number: { type: Number, required: true },
        address: { type: String, required: true},
        appartment:[{type: Schema.Types.ObjectId}] // array of objectid of appartment
)}


    var appartment = new Schema({
        number: { type: Number, required: true },
        floor: { type: Number, required: true},
        thermometer:{type: Schema.Types.ObjectId} // only one thermometer for each appartment so only objectId
)}

 var thermometer = new Schema({
            temprature: { type: string, required: true },

    )}

只是想知道如何进行数据库设计

【讨论】:

  • 这个问题本身就很宽泛,而且是在征求意见,没有正确答案。仅仅发布一个示例模式并没有帮助,尤其是因为您不知道应用程序的详细信息。此外,OP 承认在这方面没有任何熟练程度,并且无法说出您的架构的优点(或不好)。不仅如此:你展示的是代码,而不是一般的文档塑造(把众所周知的推车放在马前)。
  • @DavidMakogon:你说得对,我们无法为他提供适当的帮助,但是,我只是给他关于 NOSQL 数据库模式设计的想法,因为他告诉他他不是使用过 sql 的人。
  • 好的,那么没有 NoSQL 经验的 OP 将如何理解您提出的问题?您的架构如何处理每个恒温器的多个读数?您如何存储密码(甚至不是 OP 问题的一部分)?为什么还要选择文档数据库而不是图形数据库?您引入的 Schema 类是什么,但没有提示它来自哪个库?单集合与多集合呢?我看不出这个答案有什么帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2019-01-20
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多