Я всегда считаю, что таблицу следует упорядочивать по наиболее распространенным запросам или показателям производительности, поэтому кластеризованный индекс таблицы должен соответствовать наиболее сложному или общему запросу.
Первичный ключ не обязательно должен быть кластеризованным индексом, поэтому я знаю, что вам может быть интересно, куда я иду с этим, но я больше беспокоюсь о кластеризованном индексе, чем о первичном ключе (и давайте будем честными, они обычно следуют каждому прочее).
Итак, первоначальный вопрос для меня: «Должен ли я иметь суррогатный первичный ключ в таблице фактов?» но больше похоже на "должен ли я иметь кластерный индекс в таблице фактов?" Я думаю, что ответ «да», у вас должен быть один (и да, на этом сайте есть другие посты, посвященные этому вопросу, но я все же думаю, что здесь стоит упомянуть на тот случай, если этот вопрос действительно задают люди, несмотря на неправильную формулировку)
Временами вам нужен суррогатный ключ, но я бы искренне рекомендовал, чтобы суррогат НЕ был кластеризованным индексом таблицы. Это позволит упорядочить таблицу в соответствии с бессмысленным суррогатным ключом. (Часто люди добавляют столбец суррогатной идентификации в таблицу и делают его первичным ключом, а также кластерным индексом по умолчанию)
Итак, на какие столбцы кластеризовать индекс? Лично мне нравится дата для таблиц фактов, и к этому вы можете добавить FK другого измерения для уникальности, но это увеличит размер и, возможно, не даст никакой выгоды, так как для того, чтобы индекс был полезен, на соответствующие измерения нужно ссылаться (в порядок важности, с которым был сгенерирован ключ).
Чтобы обойти это (и причину, по которой я отвечаю здесь), я думаю, что вы ДОЛЖНЫ добавить суррогат, а затем создать кластеризованный индекс для ключа даты, а затем суррогат (в таком порядке). Я делаю это, потому что сама дата не собирается делать уникальную строку, но добавление суррогатной воли. Это сохраняет данные, упорядоченные по дате, что помогает всем другим некластеризованным индексам, а также сохраняет разумный размер кластеризованного индекса.
Кроме того, по мере роста данных вы можете разделить их, и в этом случае вам понадобится ключ раздела, который неизменно будет датой. Построение кластерного индекса с датой в качестве основной части ключа облегчает эту задачу. С разделением вы можете теперь использовать технику скользящего окна для архивации старых данных или при загрузке.