Possiamo usare Guid come chiave primaria nel database Sqlite

È ansible utilizzare GUID come chiavi primarie nel database SQLITE? Se ansible quale tipo di dati può essere utilizzato?

SQLite stesso non supporta GUID come tipo interno.

Tranne quello, lo fa! (una specie di). Ricorda che in SQLite qualsiasi stringa può essere utilizzata come nome del tipo e che include GUID o UUID (maggiori informazioni sui tipi di dati SQLite ).

Secondo tali regole, il tipo GUID ha affinità NONE , che è lo stesso dei campi BLOB . Con questo in mente, puoi creare una colonna di tipo GUID e utilizzare le seguenti regole per accedervi:

  • Memorizzalo come stringa come X'01020304050607080910111213141516' (la notazione X viene utilizzata per rappresentare il valore BLOB a 16 byte). Per inserire, utilizzare:

     INSERT INTO mytable (uuid) VALUES (X'01020304050607080910111213141516'); 
  • Leggilo come BLOB 16 byte. quote(uuid) può essere usato per formattare l’output usando la notazione X:

     SELECT quote(uuid) FROM mytable 

Tale colonna può essere utilizzata anche come chiave primaria. Sfortunatamente, non esiste alcuna funzionalità AUTOINCREMENT come esiste per le chiavi primarie intere: dovrai gestirle tu stesso. Puoi usare qualcosa di semplice come randomblob(16) per quello, ma non è del tutto UUID come definito dallo standard .

Confusamente, puoi anche memorizzare la rappresentazione del testo dell’UUID nello stesso campo (SQLite non ti impedirà di farlo), ma richiederà almeno 2 volte più spazio: BLOB è 16 byte, UUID come testo è di almeno 32 byte.

sqlite3 non ha un formato UUID nativo a 128 bit, di per sé.

Tuttavia, i GUID possono essere usati come chiavi in ​​SQLite come TEXT o come rappresentazione binaria BLOB .

In base ai numeri prestazionali pubblicati in risposta a una domanda simile, sia gli UUID binari che quelli stringa possono essere efficienti in SQLite per Crea e Query quando vengono indicizzati .

vedere la tabella in: https://stackoverflow.com/a/11337522/3103448

SQLite può generare URIID BLOB o TEXT con randomblob(16) e hex(X) Ad esempio: lower(hex(randomblob(16)))

Con prestazioni di indice simili, un compromesso significativo diventa se una stringa leggibile dall’uomo è preferita alla dimensione dei dati binari più piccola .