Постановка проблемы
У меня есть следующий ключ-кандидат
{Student Id, Entity Id, Action Id......}
И я пытаюсь решить, должен ли я использовать составной первичный ключ или суррогат(автоинкрементное целое число или метка времени или guid) ключ.
Исследования и анализ
Я посмотрел пару вопросов и обсуждений по переполнению стека, но не получил ясногонаправление, специфичное для моего сценария.
Если составной ключ является первичным ключом
Составной первичный ключ или первичный суррогатный ключ
Вот шаблоны доступа к таблице
Операции записи
Данные сохраняются в этой таблице в ответ на действия Студента в веб-приложении;то есть мы можем рассматривать это как данные временного ряда, фиксирующие действия пользователя над различными объектами.Я ожидаю, что через некоторое время число одновременных студентов, вошедших в веб-приложение, будет очень высоким (в зависимости от принятия продукта группой студентов!).Таким образом, я ожидаю большого количества одновременных записей и большого размера таблицы с течением времени.
Операции чтения
Доступ к таблице должен осуществляться для каждого учащегося, когда он регистрируетсяв систему, чтобы показать ему общую сводку своих прошлых действий.
Запланированный подход
Принимая во внимание схемы доступа, предполагаемый размер таблицы и времяПоследовательность (события!) данных, я больше склоняюсь к использованию уникального суррогатного ключа (целочисленного автоинкремента) и составного вторичного ключа для получения наилучшего баланса производительности записи и чтения.Другой альтернативой является создание составного первичного ключа и отказ от суррогатного ключа.
Можете ли вы проверить мой подход или дать свои предложения об альтернативах или уточнениях моего подхода?