(Trabajo en Heroku Postgres)
Usamos UUID como claves principales en algunos sistemas y funciona muy bien.
Te recomiendo que uses el uuid-ossp
extensión, e incluso hacer que postgres genere UUID para usted:
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)
EDITAR implicaciones de rendimiento
Será siempre depender de su carga de trabajo.
La clave primaria entera tiene la ventaja de la localidad donde los datos similares se encuentran más juntos. Esto puede ser útil para, por ejemplo:consultas de tipo de rango como WHERE id between 1 and 10000
aunque la contención de bloqueo es peor.
Si su carga de trabajo de lectura es totalmente aleatoria en el sentido de que siempre realiza búsquedas de clave principal, no debería haber ninguna degradación de rendimiento medible:solo paga por el tipo de datos más grande.
¿Escribes mucho en esta mesa, y esta mesa es muy grande? Es posible, aunque no lo he medido, que haya implicaciones en mantener ese índice. Sin embargo, para muchos conjuntos de datos, los UUID están bien, y usar UUID como identificadores tiene algunas buenas propiedades.
Finalmente, es posible que no sea la persona más calificada para discutir o aconsejar sobre esto, ya que nunca he ejecutado una tabla lo suficientemente grande con un UUID PK donde se haya convertido en un problema. YMMV. (Habiendo dicho eso, ¡me encantaría saber de personas que tienen problemas con el enfoque!)