(Работя върху Heroku Postgres)
Използваме UUID като първични ключове на няколко системи и работи чудесно.
Препоръчвам ви да използвате uuid-ossp
разширение и дори Postgres да генерира UUID за вас:
heroku pg:psql
psql (9.1.4, server 9.1.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
dcvgo3fvfmbl44=> CREATE EXTENSION "uuid-ossp";
CREATE EXTENSION
dcvgo3fvfmbl44=> CREATE TABLE test (id uuid primary key default uuid_generate_v4(), name text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
dcvgo3fvfmbl44=> \d test
Table "public.test"
Column | Type | Modifiers
--------+------+-------------------------------------
id | uuid | not null default uuid_generate_v4() name | text |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
dcvgo3fvfmbl44=> insert into test (name) values ('hgmnz');
INSERT 0 1
dcvgo3fvfmbl44=> select * from test;
id | name
--------------------------------------+-------
e535d271-91be-4291-832f-f7883a2d374f | hgmnz
(1 row)
РЕДАКТИРАНЕ на последиците за производителността
Ще винаги зависи от натовареността ви.
Целочисленият първичен ключ има предимството на локалността, където подобни данни се намират по-близо един до друг. Това може да бъде полезно за например:заявки от тип диапазон, като WHERE id between 1 and 10000
въпреки че спорът за заключване е по-лош.
Ако работното ви натоварване при четене е напълно произволно, тъй като винаги извършвате търсене на първичен ключ, не би трябвало да има никакво измеримо влошаване на производителността:вие плащате само за по-големия тип данни.
Пишете ли много на тази маса и тази маса много ли е голяма? Възможно е, въпреки че не съм измервал това, да има последици от поддържането на този индекс. Въпреки това за много набори от данни UUID са добре и използването на UUID като идентификатори има някои хубави свойства.
И накрая, може да не съм най-квалифицираният човек за обсъждане или съвет по този въпрос, тъй като никога не съм управлявал достатъчно голяма маса с UUID PK, където това се е превърнало в проблем. YMMV. (Като казах това, бих се радвал да чуя за хора, които срещат проблеми с подхода!)