SQL: несколько столбцов INT в качестве первичного ключа или VARCHAR? - PullRequest
0 голосов
/ 02 октября 2019

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

Комбинация этих 3 INT всегда будет создавать уникальный идентификатор, таким образом, мой первичный ключ. Должен ли я назначить все три столбца первичному ключу?

col1  |  col2  |  col3
1        50       1540
2        50       1540
1        50       1541
1        51       1540

Разумнее было бы просто создать первичный ключ из одного столбца в виде CHAR(N) или VARCHAR, как показано ниже?

50_1540_1
50_1540_2
50_1541_1
51_1540_1

Я рассматриваю проблемы с производительностью, поскольку таблица может превышать 100 миллионов строк

1 Ответ

0 голосов
/ 02 октября 2019

Что умнее? Для этого конкретного случая назначьте все три столбца в качестве первичного ключа. Вот три причины:

  • Зачем дублировать пространство для столбцов?
  • Возможно, вы хотите сохранить исходные столбцы, потому что они - предположительно - что-то значат.
  • Связи внешнего ключа должны ссылаться на все три столбца, и если у вас есть новый объединенный столбец, вам необходимо объединить значения во всех ссылочных таблицах.

Тем не менее, я не фанатсоставных первичных ключей. Я бы порекомендовал вам объявить три с ограничением unique (или индексом). Затем используйте автоинкрементный ключ в качестве первичного ключа для таблицы.

...