Я обычно использую идентификаторы автоинкремента как первичные ключи в базах данных. Я пытаюсь узнать о преимуществах использования GUID. Я прочитал эту статью: https://betterexplained.com/articles/the-quick-guide-to-guids/
Я понимаю, что эти GUID используются для идентификации объектов на уровне приложения. Они также хранятся в качестве первичного ключа на уровне базы данных. Например, скажем, у меня был следующий класс:
public class Person
{
public GUID ID;
public string Name;
..
//Person Methods follow
}
Скажем, я хотел создать нового человека в памяти, а затем вставить человека в базу данных. Могу ли я просто сделать это:
Person p1 = new Person();
p1.ID=GUID.NewGUID();
PersonRepository.Insert(p1);
Скажем, у меня была база данных, содержащая миллионы и миллионы строк с GUID в качестве первичного ключа. Это всегда будет уникальным? Я правильно понимаю GUID?
Я читал эту статью ранее: http://enterprisecraftsmanship.com/2014/11/15/cqs-with-database-generated-ids/ . Меня это немного смущает, так как кажется, что я рекомендую счастливую среду между GUID и целыми числами в качестве первичных ключей.
Изменить 06/06/18
Я пришел к выводу, что направляющие больше подходят для моих требований, чем целые. Я использую CQRS больше в эти дни, и GUID лучше вписываются.
Я заметил, что некоторые разработчики моделируют GUID как строки в модели домена, например, здесь: https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/ Buyer.cs - в данном случае: IdentityGuid - это GUID, смоделированный как строка. Есть ли причина делать это иначе, чем указано здесь: Использовать объект пользовательского значения или Guid в качестве идентификатора объекта в распределенной системе? , Является ли "нормальным" моделирование GUID в виде строки или я должен моделировать его как GUID в модели и базе данных?