Я недавно видел GUID в качестве первичных ключей, и я думаю, что это ужасная идея. GUID расшифровывается как «Глобально уникальный идентификатор», то есть это идентификатор, чей шанс повторного бинга повторяется, если он неправильно цитирует Брокмейера в его книге OLE «так же, как группа атомов, спешащих вместе в пустом пространстве, образуя маленький орех ».
Существуют веские причины для использования идентификаторов GUID, если вам действительно нужно что-то глобально уникальное, но большинство ключей базы данных должны быть уникальными только относительно рассматриваемой базы данных. В этом случае последовательного сгенерированного целочисленного ключа часто достаточно, и он потребляет намного меньше ресурсов. На самом деле, ни идентификаторы последовательности, ни GUID не имеют никакого внутреннего значения, поэтому действительно лучше, если вы можете использовать элементы, которые действительно идентифицируют рассматриваемый объект как первичный ключ, если вы можете (хотя существует школа, которая говорит, что все элементы должен иметь независимый от содержимого ключ, такой как sequence или даже GUID).
Битовые поля имеют несколько обязательств в качестве первичных ключей. Как уже упоминалось, вы можете решить, что вам нужны дополнительные биты. Вы можете столкнуться с столкновениями. Базы данных, как правило, имеют плохую побитовую функциональность и даже не являются переносимыми. И, наконец, алгоритмы индексирования для выбранной вами базы данных могут быть не в состоянии хорошо оптимизировать битовые ключи.