@Matt Sheppard:
Скажіть, у вас є таблиця клієнтів. Безумовно, ви не хочете, щоб клієнт існував у таблиці не один раз, інакше у ваших відділах продажів та логістики відбудеться багато плутанини (особливо якщо кілька рядків про клієнта містять різну інформацію).
Таким чином, у вас є ідентифікатор клієнта, який однозначно ідентифікує клієнта, і ви переконайтеся, що ідентифікатор відомий замовником (у рахунках-фактурах), щоб клієнт та люди, що обслуговують клієнтів, мали спільну інформацію про те, якщо їм потрібно спілкуватися. Щоб гарантувати відсутність дублюваних записів клієнтів, ви додаєте унікальність-обмеження в таблицю або через первинний ключ на ідентифікаторі клієнта, або через обмеження NOT NULL + UNIQUE у стовпці ідентифікатора клієнта.
Потім, чомусь (про що я не можу придумати), вас попросять додати стовпчик GUID до таблиці клієнтів і зробити це первинним ключем. Якщо стовпець із ідентифікатором клієнта залишився без гарантії унікальності, ви вимагаєте майбутніх проблем у всій організації, оскільки GUID завжди будуть унікальними.
Деякі "архітектори" можуть сказати вам, що "о, але ми вирішуємо справжнє обмеження унікальності клієнта в нашому рівні додатків!". Правильно. Мода щодо цих мов програмування загального призначення та (особливо) рамок середнього рівня постійно змінюється, і, як правило, ніколи не перетворює вашу базу даних. І є дуже хороший шанс, що вам в якийсь момент вам доведеться отримати доступ до бази даних, не переглядаючи нинішню програму. == Біда. (Але, на щастя, ви і "архітектор" давно пішли, тож ви не будете там, щоб прибирати безлад.) Іншими словами: дотримуйтесь очевидних обмежень у базі даних (і в інших ярусах), також якщо у вас є час).
Іншими словами: Можуть бути вагомі причини для додавання стовпців GUID до таблиць, але, будь ласка, не впадайте у спокусу зробити так, щоб знизити ваші амбіції на узгодженість у реальній (== не GUID) інформації.