【问题标题】:NoSQL: Document-oriented design/MongoDBNoSQL:面向文档的设计/MongoDB
【发布时间】:2014-10-16 04:10:33
【问题描述】:

我正在尝试使用面向文档的数据库,但我无法正确设计。

主要是,我想要一个可以存储飞机、座位、乘客的数据库,而且非常重要的是 - 乘客在特定飞机上所做的座位更改及其时间戳。

我需要查询飞机上的所有座位、飞机上的所有座位、飞机上的所有乘客、在某个时候选择了特定座位的所有乘客、乘客在某个时间选择的所有座位飞机和最受欢迎的座位。

在关系数据库中,我只会使用 2 或 3 个多对多关系及其关联的联结表,但我不知道如何在面向文档的数据库中执行此操作。现在,这架飞机有一个关于座位和乘客的参考清单;和座位和乘客相互引用。这不起作用,因为我不知道在哪里保存座位更改的时间戳。我想我需要另一个(一种连接)表,但不确定如何正确执行。

有什么建议吗?

【问题讨论】:

标签: mongodb database-design document-oriented-db database nosql


【解决方案1】:

你的架构设计应该是这样的:

{  //Flight Collection, helps query Available and Booked seats
  "Flight_id":"A",
  "FlightName":"CoolAir",
  "AvailableSeats":["A1","A2"],
  "BookedSeats":["A3","A4"]
}
{  //Seats Collection, helps query current/previous passenger
  "SeatId":"A1",
  "Flight_id":"A",
  "AllPreviousPassengers":[{"P2",TimeStamp1},{"P3",TimeStamp2}],
  "CurrentPassenger":{"P1",TimeStamp3}
}
{//Passenger collection, helps query passenger details
  "PassengerId":"P1",
  "PassengerName":"Mr. ABC",
  "SeatId":"A1",
  "Flight_id":"A"
}

对于您的用例,架构大致应该是这样的。代码中需要加入。

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 2011-12-29
    • 2020-03-06
    • 2012-05-07
    • 2020-02-04
    • 2012-10-09
    • 2011-03-31
    • 2021-08-04
    相关资源
    最近更新 更多