Самое простое решение - иметь одну таблицу для всех записей посещаемости, используя 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”
}
Это более эффективное использование хранилища, но оно ограничивает параметры запроса и позволяет случайно испортить ваши данные с ошибкой "один за другим" при индексации в списке посещаемости.