(Jeg arbejder på Heroku Postgres)
Vi bruger UUID'er som primære nøgler på nogle få systemer, og det fungerer godt.
Jeg anbefaler, at du bruger uuid-ossp
udvidelse, og endda få postgres til at generere UUID'er til dig:
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)
EDIT ydeevne implikationer
Det vil altid afhænger af din arbejdsbyrde.
Heltals primærnøglen har fordelen af lokalitet, hvor lignende-data sidder tættere sammen. Dette kan være nyttigt for f.eks.:områdetypeforespørgsler såsom WHERE id between 1 and 10000
selvom låsestrid er værre.
Hvis din læsebelastning er fuldstændig tilfældig, idet du altid foretager primære nøgleopslag, bør der ikke være nogen målbar ydeevneforringelse:du betaler kun for den større datatype.
Skriver du meget til denne tabel, og er denne tabel meget stor? Det er muligt, selvom jeg ikke har målt dette, at der er implikationer i at opretholde det indeks. For mange datasæt er UUID'er dog fint, og at bruge UUID'er som identifikatorer har nogle gode egenskaber.
Endelig er jeg måske ikke den mest kvalificerede til at diskutere eller rådgive om dette, da jeg aldrig har kørt et bord stort nok med en UUID PK, hvor det er blevet et problem. YMMV. (Når det er sagt, ville jeg elske at høre om folk, der løber ind i problemer med tilgangen!)