Mongodb схема для построения системы бронирования встреч - PullRequest
1 голос
/ 27 февраля 2020

У нас есть два разных подхода к системе планирования встреч с использованием mongodb.

1-й подход:

appointments:
    {
        resourceId: "string",
        resourceType: "doc"/"nut"...,
        userId: "string",
        userName: "string",
        startDate: "2020-05-18T16:00:00Z",
        endDate: 2020-05-18T17:00:00Z
        title: "string",
        description: "string",
        type: "string"/"off"
    },
    {
        resourceId: "string",
        resourceType: "doc"/"nut"...,
        userId: "string",
        userName: "string",
        startDate: "2020-05-21T12:00:00Z",
        endDate: 2020-05-21T12:30:00Z,
        title: "string",
        description: "string",
        type: "string"/"off"
    },
    ...

resources:
    {
        resourceId: "string",
        resourceName: "string"
        resourceType: "doc"/"nut"/"room",
        autoApprove: true/false,
        constantDaysOff: [sunnday]
    },
    {
        resourceId: "string",
        resourceName: "string"
        resourceType: "doc"/"nut"/"room",
        autoApprove: true/false,
        constantDaysOff: [sunnday]
    },
    {
        resourceId: "string",
        resourceName: "string"
        resourceType: "doc"/"nut"/"room",
        autoApprove: true/false,
        constantDaysOff: [sunnday]
    }

Здесь appointments и resources - это разные коллекции, с образцами документов в каждой коллекции.

2-й подход:

resources:
    {
        resourceId: "string",
        resourceName: "string",
        resourceType: "doc"/"nut"...,
        constantDaysOff: [sunday],
        2020-05-21: [
            {
                startDate: "2020-05-21T12:00:00Z",
                endDate: 2020-05-21T12:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }, 
            {
                startDate: "2020-05-21T14:00:00Z",
                endDate: 2020-05-21T14:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }
        ],
        2020-05-22: [
            {
                startDate: "2020-05-22T12:00:00Z",
                endDate: 2020-05-22T12:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }, 
            {
                startDate: "2020-05-22T14:00:00Z",
                endDate: 2020-05-22T14:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }
        ]
        ...
    }

Здесь у нас только одна коллекция, и даты встреч являются ключевыми в коллекции. Каждый ключ даты будет содержать несколько json объектов, представляющих разные встречи в один и тот же день.

ПРИМЕЧАНИЕ:

Нет встреч более 1 дня, по этой причине startDate и endDate - это расчет продолжительности встречи, времени ее начала и окончания.

Нам необходимо иметь возможность наиболее эффективно выполнять запросы в соответствии с:

  • get все встречи для указанного c идентификатора ресурса
  • получение встреч для ресурса между двумя разными датами
  • получение встреч для пользователя между разными датами
  • отмена / удаление встреч

Ресурсом может быть что угодно, например, врач, тренер, комната ...

Итак, мой вопрос, какой из них будет более эффективным / выполнимым, когда речь идет о запросах mongodb?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...