Поиск оптимальной структуры и схемы MongoDB для приложения бронирования отелей - PullRequest
0 голосов
/ 15 марта 2019

Я строю приложение бронирования отелей. Информация, необходимая для создания очень простого приложения: гостиница, номера, принадлежащие каждой гостинице, и бронирование номеров, принадлежащих каждой комнате.

В качестве примера можно посмотреть (не обращайте внимания на то, что некоторые _id не уникальны, это была просто быстрая демонстрация):

{"_id":"5c8639a856be210634dfcf16",
"hotelName":"Hotel A",
"hotelDescription":"The best hotel ever",

"rooms":{
         {"_id":"1235e56be210634dfcf13",
         "roomNumber":"1",
         "bookable: True",

         "reservations":{
                         {"_id":"5c86365e56be21a634dfasdf",
                         "from":"2019-01-01",
                         "to": "2019-01-06"},

                         {"_id":"5c86365e56be21a634dfasdf",
                         "from":"2019-01-06",
                         "to": "2019-01-10"},

                         {"_id":"123455e56be21a634dfasdf",
                         "from":"2019-01-15",
                         "to": "2019-01-20"},

                        }
         },


         {"_id":"1235e56be210634dfcf13",
         "roomNumber":"2",
         "bookable: True",

         "reservations":{
                         {"_id":"5c86365e56be21a634dfasdf",
                         "from":"2019-01-01",
                         "to": "2019-01-06"},

                         {"_id":"5c86365e56be21a634dfasdf",
                         "from":"2019-01-06",
                         "to": "2019-01-10"},

                         {"_id":"123455e56be21a634dfasdf",
                         "from":"2019-01-15",
                         "to": "2019-01-20"},

                        }
         }

}

Как видите, номера вложены в отель, а резервирование вложено в номер. Это никогда не будет глубже. Средний отель может иметь 400 номеров и в среднем 50 бронирований в год.

Тем не менее. Мне интересно, я должен денормализовать это?

Так просто: (Все _id автоматически сгенерированы Mongodb)

Hotels
    Hotel _id:1,
    Hotel _id:2,
    Hotel _id:3,

Rooms
    Hotel _id:1 
        Room _id:1,
        Room _id:2,
        Room _id:3,
    Hotel _id:2
        Room _id:4,
        Room _id:5,
        Room _id:6,

Reservations:
    Room _id:1
        Reservation _id:1,
        Reservation _id:2,
        Reservation _id:3,
    Room _id:2
        Reservation _id:4,
        Reservation _id:5,
        Reservation _id:6

1 Ответ

0 голосов
/ 15 марта 2019

приведенная ниже схема может помочь вам выполнить ваши требования,

/* 1 */
{
    "_id" : 1.0,
    "hotelname" : "hotel1",
    "rooms" : [ 
        {
            "roomno" : "room11",
            "reservations" : [ 
                {
                    "reservationid" : "reservation111",
                    "startDate" : "2019-03-18",
                    "endDate" : "2019-03-20"
                }, 
                {
                    "reservationid" : "reservation112",
                    "startDate" : "2019-03-21",
                    "endDate" : "2019-03-25"
                }
            ]
        }, 
        {
            "roomno" : "room12",
            "reservations" : [ 
                {
                    "reservationid" : "reservation121",
                    "startDate" : "2019-03-15",
                    "endDate" : "2019-03-18"
                }, 
                {
                    "reservationid" : "reservation122",
                    "startDate" : "2019-03-19",
                    "endDate" : "2019-03-21"
                }
            ]
        }
    ]
}

/* 2 */
{
    "_id" : 2.0,
    "hotelname" : "hotel2",
    "rooms" : [ 
        {
            "roomno" : "room21",
            "reservations" : [ 
                {
                    "reservationid" : "reservation211",
                    "startDate" : "2019-03-18",
                    "endDate" : "2019-03-20"
                }, 
                {
                    "reservationid" : "reservation212",
                    "startDate" : "2019-03-21",
                    "endDate" : "2019-03-25"
                }
            ]
        }, 
        {
            "roomno" : "room22",
            "reservations" : [ 
                {
                    "reservationid" : "reservation221",
                    "startDate" : "2019-03-15",
                    "endDate" : "2019-03-18"
                }, 
                {
                    "reservationid" : "reservation222",
                    "startDate" : "2019-03-19",
                    "endDate" : "2019-03-21"
                }
            ]
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...