Generalmente uso gli ID di incremento automatico come chiavi primarie nei database. Sto cercando di scoprire i vantaggi dell'utilizzo di GUID. Ho letto questo articolo: link
Mi rendo conto che questi GUID sono utilizzati per identificare gli oggetti a livello di applicazione. Sono anche memorizzati come chiave primaria a livello di database. Ad esempio, supponiamo di avere la seguente classe:
public class Person
{
public GUID ID;
public string Name;
..
//Person Methods follow
}
Dire che volevo creare una nuova persona in memoria e quindi inserire la persona in un database. Posso solo fare questo:
Person p1 = new Person();
p1.ID=GUID.NewGUID();
PersonRepository.Insert(p1);
Supponiamo di avere un database contenente milioni e milioni di righe con un GUID come chiave primaria. Sarà sempre unico? Sto persino capendo correttamente i GUID?
Ho letto questo articolo in precedenza: link . Mi confonde un po 'perché sembra raccomandare un mezzo felice tra GUID e interi come chiavi primarie.
Modifica 11/06/18
Sono arrivato a credere che i Guids siano più adatti di quelli per le mie esigenze. Sto usando CQRS di più in questi giorni e GUID si adattano in modo più gradevole.
Ho notato che alcuni sviluppatori modellano i GUID come stringhe nel modello di dominio, ad es. qui: link - in questo caso: IdentityGuid è un GUID modellato come una stringa. C'è qualche ragione per farlo a parte ciò che è affermato qui: Utilizzare un oggetto valore personalizzato o un Guid come identificatore di entità in un sistema distribuito? . È "normale" modellare il GUID come stringa o dovrei modellarlo come GUID nel modello e nel database?