Eu geralmente uso IDs de incremento automático como Chaves Primárias em bancos de dados. Estou tentando aprender os benefícios do uso de GUIDs. Eu li este artigo: https://betterexplained.com/articles/the-quick-guide-to-guids/
Percebo que esses GUIDs são usados para identificar objetos no nível do aplicativo. Eles também são armazenados como a chave primária no nível do banco de dados. Por exemplo, digamos que eu tenha a seguinte classe:
public class Person
{
public GUID ID;
public string Name;
..
//Person Methods follow
}
Digamos que eu queira criar uma nova pessoa na memória e, em seguida, insira a Pessoa em um banco de dados. Posso apenas fazer isso:
Person p1 = new Person();
p1.ID=GUID.NewGUID();
PersonRepository.Insert(p1);
Digamos que eu tivesse um banco de dados contendo milhões e milhões de linhas com um GUID como Chave Primária. Isso sempre será único? Estou entendendo GUIDs corretamente?
Li este artigo anteriormente: http://enterprisecraftsmanship.com/2014/11/15/cqs-with-database-generated-ids/ . Isso me confunde um pouco, pois parece recomendar um meio termo entre GUIDs e números inteiros como Chaves Primárias.
Editar 11/06/18
Eu acredito que os Guids são mais adequados do que ints para minhas necessidades. Atualmente, estou usando mais o CQRS e os GUIDs se encaixam melhor.
Percebo que alguns desenvolvedores modelam os GUIDs como seqüências de caracteres no modelo de domínio, por exemplo, aqui: https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/ Buyer.cs - neste caso: IdentityGuid é um GUID modelado como uma sequência. Existe algum motivo para fazer isso além do indicado aqui: Use um objeto de valor personalizado ou um Guid como identificador de entidade em um sistema distribuído? . É "normal" modelar o GUID como uma string ou devo modelá-lo como um GUID no modelo e no banco de dados?