Зазвичай я використовую ідентифікатори автоматичного збільшення як основні ключі в базах даних. Я намагаюся дізнатися переваги використання 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 та цілими числами як первинні ключі.
Редагувати 11.06.18
Я повірив, що Посібники для моїх вимог більше підходять, ніж ints. Цього дня я більше використовую CQRS, і GUID-файли більше вписуються.
Я помічаю, що деякі розробники моделюють GUID як рядки в доменній моделі, наприклад тут: https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/ Buyer.cs - в цьому випадку: IdentityGuid - це GUID, який моделюється як рядок. Чи є якась причина для цього, крім зазначеного тут: Використовувати спеціальний об'єкт значення або Посібник як ідентифікатор сутності в розподіленій системі? . Чи "нормально" моделювати GUID як рядок чи я повинен моделювати його як GUID у моделі та базі даних?