Можете ли вы использовать GUID для столбца, если столбец не является первичным ключом? - PullRequest
0 голосов
/ 06 января 2012

У меня есть две колонки в базе данных.Оба идентификаторы.Я делаю одно числовое авто приращение.Это то, что я выбрал в качестве первичного ключа. Но другой столбец также должен содержать уникальные автоматически генерируемые идентификаторы.Должны отличаться от идентификаторов первичного ключа (т. Е. Числовой столбец автоинкремента).Таким образом, я думал об использовании GUID для этого столбца.НО:

Можно ли использовать GUID для столбца, если столбец не является первичным ключом?Это хорошая практика?

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Очевидно, что столбец GUID будет уникальным, но он довольно большой для присоединения.Таким образом, может быть желательно использовать числовой столбец в базе данных для соединений внешнего ключа (объединение в 4-байтовые или 8-байтовые целые числа), а не 16-байтовый столбец GUID (если вы не сохраните его как строку, в этом случае он имеет32 шестнадцатеричные цифры плюс 4 тире).Индексы будут меньше для числового столбца;ссылочные таблицы будут меньше;Сравнение соединений будет быстрее.

Таким образом, вполне могут быть веские причины иметь и то и другое и иметь GUID в качестве вторичного (альтернативного) уникального ключа в таблице, а не в качестве первичного ключа.

2 голосов
/ 06 января 2012

Это возможно и, похоже, не проблема, за исключением размера данных и некоторого снижения производительности.

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

1 голос
/ 06 января 2012

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

Просто убедитесь, что вы этого не делаетесоздайте кластерный индекс для этого столбца!

...