Întotdeauna am preferat să folosesc numere întregi ca chei primare în baze de date, pentru simplitate și viteză (presupusă). Dar, atunci când folosiți o schemă de adrese URL REST sau similară cu Rails pentru instanțe de obiecte, aș fi terminat cu adrese URL ca acesta:
http://example.com/user/783
Iar presupunerea este că există și utilizatori cu ID-uri de 782, 781, ..., 2 și 1. Dacă presupunem că aplicația web în cauză este suficient de sigură pentru a împiedica persoanele care intră în alte numere să vadă alți utilizatori fără autorizație, simpla cheie secundară atribuită secvențial, de asemenea, "scurge" numărul total de instanțe (mai vechi decât acesta), în acest caz utilizatori, care ar putea fi informații privilegiate. (De exemplu, eu sunt utilizator # 726 în stackoverflow.)
Ar fi o soluție mai bună UUID / GUID? Apoi aș putea configura astfel de adrese URL:
http://example.com/user/035a46e0-6550-11dd-ad8b-0800200c9a66
Nu este exact succint, dar sunt mai puține informații implicite despre utilizatorii expuși. Sigur, se simte "siguranța prin obscuritate", care nu reprezintă un substitut pentru o securitate adecvată, dar pare puțin puțin mai sigură.
Este avantajul care merită costul și complexitatea implementării UUID-urilor pentru instanțele de obiecte adresabile web? Cred că aș vrea să folosesc în continuare coloane întregi ca PK-uri de baze de date doar pentru a accelera conexiunile.
Există, de asemenea, problema reprezentării în baza de date a UUID-urilor. Știu că MySQL le stochează ca șiruri de caractere de 36 de caractere. Postgres pare să aibă o reprezentare internă mai eficientă (128 de biți?), Dar nu am încercat-o eu însumi. Oricine are vreo experiență în acest sens?
Actualizare: pentru cei care au întrebat despre utilizarea doar a numelui de utilizator în adresa URL (de exemplu, http://example.com/user / yukondude ), care funcționează bine pentru instanțe de obiecte cu nume care sunt unice, dar ce zici de zilioanele obiectelor de aplicații web care pot fi identificate numai prin număr? Comenzi, tranzacții, facturi, nume duplicate, stackoverflow, ...