Действительно необходимо держать два отдельных вопроса отдельно:
1) первичный ключ является логической конструкцией - один из ключевых кандидатов, который исключительно и надежно определяет строку в Вашей таблице. Это может быть чем-либо, действительно - INT, GUID, строкой - выбор, что имеет большую часть смысла для Вашего сценария.
2) кластерный ключ (столбец или столбцы, которые определяют "кластерный индекс" на таблице) - это физическое связанная с устройством хранения данных вещь, и здесь, небольшой, стабильный, постоянно увеличивающийся тип данных является Вашим лучшим выбором - INT или BIGINT как Ваша опция по умолчанию.
По умолчанию, первичный ключ на таблице SQL Server также используется в качестве кластерного ключа - но это не должно быть тем путем! Я имею, лично кажется крупным увеличением производительности со временем при разбивании предыдущего основанного на GUID Основного Кластеризованного Ключа в два отдельных ключа - основной (логический) ключ на GUID, и кластеризация (упорядочивание) включает отдельный столбец INT IDENTITY (1,1).
индексная фрагментация была до минимальных уровней, и таким образом индекс ищет, производительность была, возрос - настоятельно рекомендован!
Marc
type
Pointer<T> = record
public type
Ty = ^T;
end;
Теперь можно использовать этот универсальный указатель где угодно
type A = class
procedure<T> DoStuff(tPtr: Pointer<T>.Ty);
end;