В SQL Server 2005 мы определили некоторые UDT (определяемые пользователем типы данных), в частности, SK (для суррогатного ключа). Они были определены как 32-битные int. И, следовательно, размер был 4 байта.
В SQL Server 2008 UDT для целочисленных типов данных использует другой механизм хранения в зависимости от точности:
Хранение
Отображает максимальный размер хранилища для UDT. Максимальные размеры хранилища зависят от точности.
Precision (цифры) ..... хранения (байт)
1 - 9 ........................ 5
10 - 19 .................... 9
20 - 28 ................... 13
29 - 38 ................... 17
Одним из следствий этого является то, что UDT, основанные на обоих значениях int и bigint, будут занимать 9 байтов!
ПРИМЕЧАНИЕ: нативные типы данных int и bigint по-прежнему занимают 4 и 8 байтов соответственно!
9 байт кажется довольно тяжелым для UDT с суррогатным ключом!
Может кто-нибудь объяснить, почему это так (в частности, каково было обоснование дизайна для этого)? Почему произошло это несоответствие между UDT и нативными типами данных?
Есть ли альтернативные подходы, кроме того, чтобы НЕ использовать UDT?