Должен ли я использовать составной первичный ключ (кластерный индекс) или суррогатный ключ и вторичный индекс? - PullRequest
0 голосов
/ 27 ноября 2018

Постановка проблемы

У меня есть следующий ключ-кандидат

{Student Id, Entity Id, Action Id......}

И я пытаюсь решить, должен ли я использовать составной первичный ключ или суррогат(автоинкрементное целое число или метка времени или guid) ключ.

Исследования и анализ

Я посмотрел пару вопросов и обсуждений по переполнению стека, но не получил ясногонаправление, специфичное для моего сценария.

Если составной ключ является первичным ключом

Составной первичный ключ или первичный суррогатный ключ

Вот шаблоны доступа к таблице

Операции записи

Данные сохраняются в этой таблице в ответ на действия Студента в веб-приложении;то есть мы можем рассматривать это как данные временного ряда, фиксирующие действия пользователя над различными объектами.Я ожидаю, что через некоторое время число одновременных студентов, вошедших в веб-приложение, будет очень высоким (в зависимости от принятия продукта группой студентов!).Таким образом, я ожидаю большого количества одновременных записей и большого размера таблицы с течением времени.

Операции чтения

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

Запланированный подход

Принимая во внимание схемы доступа, предполагаемый размер таблицы и времяПоследовательность (события!) данных, я больше склоняюсь к использованию уникального суррогатного ключа (целочисленного автоинкремента) и составного вторичного ключа для получения наилучшего баланса производительности записи и чтения.Другой альтернативой является создание составного первичного ключа и отказ от суррогатного ключа.

Можете ли вы проверить мой подход или дать свои предложения об альтернативах или уточнениях моего подхода?

1 Ответ

0 голосов
/ 28 ноября 2018

Технически, вам лучше использовать составной ключ.Единственным недостатком является то, что он не подходит для сущностей.

Я имею в виду, что M:N может со временем стать сущностью.Он получит столбцы, и его отдельные строки будут обрабатываться и ссылаться, что сложно с помощью составных ключей.

Простая таблица M:N на другой стороне должна иметь уникальный ключ для ссылки на столбцы, поэтому использованиеэто как первичный ключ имеет большой смысл.Вы избавляетесь от лишнего ID столбца, последовательности и дополнительного индекса.

...