Рекомендуется случай A.
Случай B часто используется, когда вам нужно перенести длинный составной ключ в другую таблицу.Например, скажем, нам нужно создать отношение «многие ко многим» (T3) между таблицами T1 и T2.
Case A (natural keys):
table T1(pk1, pk2, pk3, pk4, someValue)
table T2(pka, pkb, pkc, pkd, otherValue)
table T3(pk1, pk2, pk3, pk4, pka, pkb, pkc, pkd, create_date)
Требуются три уникальных индекса (по одному в каждой таблице).Запрос T3 легко выполнить.
Case B (surrogate keys):
table T1(t1_id, pk1, pk2, pk3, pk4, someValue)
table T2(t2_id, pka, pkb, pkc, pkd, otherValue)
table T3(t1_id, t2_id, create_date)
Требуются пять уникальных индексов.Те же три, что и в случае А, плюс один для каждого суррогатного ключа.T3 теперь становится намного меньше, но за счет того, что он больше не может запрашивать отношения M: M, не присоединяясь ни к T1, ни к T2.Это может или не может иметь большого значения для любого типичного приложения.
Я думаю, что это в значительной степени подводит итог.