Дизайн таблицы для «проверки посещаемости» в БД NoSQL - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь использовать распознавание AWS, чтобы передать «Посещаемость» и вставить запись (Дата и время) в таблицу DynamoDB на каждый день, когда ребенок появляется в школе, проблема в том, что я не знаком с NoSQL иМне интересно, каков наилучший способ создать таблицу с учетом этого.

Вот некоторые из используемых мной атрибутов:

  • Номер регистрации (PartionKey)
  • Имя
  • Фамилия

, поскольку дата / посещаемость будет «динамическим атрибутом» (независимо от того, идет ли ребенок в школу или нет), Я не уверен, должен ли я:

  1. Создать новую таблицу на каждый день / неделю или месяц и иметь только номер регистрации в качестве атрибута и иметь лямбда-триггерпоставить отметку времени, когда ребенок будет замечен, что означает, что ребенок посещал занятия (это будет много ... много таблиц, разрушающих цель dynameDB, я полагаю)

  2. Вв ту же таблицу вставьте посещаемость в качестве атрибута и в качестве listтип (который может быть массивом для вставки метки времени каждый день, когда ребенок замечен) ... эта опция сделает элемент / таблицу в весе DynamoDB больше, чем следует?вызывая его замедление ??

Есть идеи о возможном способе подойти к этому?Есть ли другой способ, который более затратно и оптимизирован для памяти?

Я не упоминаю о триггерах, лямбда-функциях, распознавании AWS для этого, так как это выходит за рамки этого поста

1 Ответ

0 голосов
/ 28 сентября 2019

Самое простое решение - иметь одну таблицу для всех записей посещаемости, используя enrollmentID в качестве ключа раздела и day (строка даты ISO 8601, например, «2019-09-27») в качестве ключа диапазона.

Это упрощает добавление посещаемости - просто вставьте в таблицу пару enrollmentID-date.Это просто сделать запрос, когда ученик посещал, используя различные ключевые выражения условий.

  • Вся посещаемость для ученика 123: enrollmentID = 123
  • Вся посещаемость для ученика 123 в данном году: enrollmentID = 123 and begins_with(day, “2019”)
  • Вся посещаемость для ученика 123 вданный месяц: enrollmentID = 123 and begins_with(day, “2019-09”)

В качестве бонуса вы также можете найти всех студентов, которые посещали данный день, создав GSI с day в качестве ключа раздела.

Любые дополнительные данные (такие как имя, фамилия и т. Д.) Могут помещаться в отдельную таблицу, если вам нравится, или в той же таблице с чем-то вроде «info» в качестве значения ключа сортировки вместо реальной даты.,


Вы также можете использовать список логических значений для представления года посещаемости.Вы можете использовать enrollmentID и year в качестве ключей разделения и сортировки.

{
    enrollmentID: 123,
    year: 2019,
    attendance: [ 0, 1, 1, 1, 0, 1... ],
    firstName: “John”,
    lastName: “Smith”
}

Это более эффективное использование хранилища, но оно ограничивает параметры запроса и позволяет случайно испортить ваши данные с ошибкой "один за другим" при индексации в списке посещаемости.

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