Quando volete utilizzare i GUID come chiavi primarie? [duplicare]
-
23-08-2019 - |
Domanda
Eventuali duplicati:
chiavi di database / UUID GUID
Ci sono circostanze in cui è indispensabile utilizzare i GUID come chiavi primarie in uno SQL Server 2005/8 DB. Ad esempio, fa l'uso della forza MS Sync Framework questo, o la replica dei dati?
Soluzione
Si potrebbe utilizzare GUID come chiave se si ha bisogno di più database sincronizzazione attraverso la replica.
Un altro motivo per usare GUID è se si voleva creare righe su alcuni client remoto ad esempio un'applicazione WinForms e poi le sottopone al server tramite servizi Web, ecc.
Se si esegue questa operazione Vorrei suggerire che è assicurarsi di specificare il proprio indice cluster sulla base di un'incrementazione int auto che non è unica. Può essere notevolmente costoso inserimento di righe in una tabella in cui l'indice cluster è un GUID.
Aggiornamento: Ecco un esempio di come impostare una tabella come questa:
CREATE TABLE [dbo].[myTable](
[intId] [int] IDENTITY(1,1) NOT NULL,
[realGuidId] [uniqueidentifier] NOT NULL,
[someData] [varchar](50) NULL,
CONSTRAINT [PK_myTable] UNIQUE NONCLUSTERED
(
[realGuidId] ASC
)
)
CREATE CLUSTERED INDEX [IX_myTable] ON [dbo].[myTable]
(
[intId] ASC
)
Si potrebbe inserire nella tabella come per esempio normale:.
INSERT INTO myTable VALUES(NEWID(), 'Some useful data goes here')
Aggiornamento: ho ascoltato davvero un buon episodio dotnetrocks che parla di questo suo valore un ascolto - Show # 447
Altri suggerimenti
Sto usando GUID come chiavi primarie, perché io non voglio avere le chiavi primarie composite quando sto costruendo applicazioni con database distribuiti e un database centrale che è sincronizzato con i dati provenienti da tutti quelli distribuiti. Con GUID Sono sicuro che (quasi *) non avrò un conflitto (violazione di un vincolo) quando tiro dati provenienti da tutti i DB in quella centrale.
* è altamente improbabile che hanno lo stesso GUID generato in due posti diversi, ma non impossibile.
Quando il database non è centralizzata o parte della collezione viene eseguita in remoto.