У меня есть модель Entity Framework с таблицей, которая, как ожидается, будет содержать много данных. Меня беспокоит использование первичного ключа int, потому что я ожидаю, что он станет больше. Я рассматриваю возможность использования Int64, чтобы обойти эту проблему.
Вот настоящий кикер - я использую таблицу для наследования типов для рассматриваемой таблицы. Поэтому, если я выберу Int64, будет несколько других таблиц (на самом деле произвольное количество таблиц, так как я буду добавлять больше), которые должны использовать первичный ключ Int64, даже если вероятность их роста за пределами int довольно стройны. Похоже на неэффективное решение. Мысли?
Я думал о том, чтобы использовать составной ключ, состоящий из идентификатора int и дискриминатора подтипа, возможно, символа. Меня интересует влияние этого подхода на производительность. Я всегда предпочитал суррогатные ключи, если только это не простая ассоциативная сущность. Есть ли лучший подход, чем любой из этих? Какой из этих маршрутов предпочтительнее?
ОБНОВЛЕНИЕ:
Я хочу уточнить, что составной ключ, который я рассматриваю, не является естественным составным ключом. Он содержит только идентификатор и дискриминатор подтипа. Мне интересно использовать его как способ избежать ограничений размера первичного ключа int. Мои основные опасения:
1) Есть ли проблемы с производительностью при использовании первичных ключей Int64? Особенно в таблице для наследования типов, где это необходимо только для родительской таблицы, но также должно использоваться в дочерних таблицах.
2) Предоставляет ли использование составного ключа (неестественного) для достижения большего диапазона, чем первичный ключ int, какие-либо преимущества в производительности по сравнению с использованием ключа Int64 для выполнения той же задачи?
bigint
решением. Базы данных могут довольно эффективно обрабатывать целочисленные значения, и я был бы удивлен, если бы это стало вашей первой серьезной проблемой. - person Adam Houldsworth   schedule 05.09.2013