Я использую bigint для хранения идентификатора facebook, потому что это то, что есть.
но для внутренних и внешних ключей таблиц я использую smallint, потому что он меньше. Но также потому, что если bigint когда-либо должен был стать строкой (чтобы найти пользователей по имени пользователя вместо id), я могу легко изменить его.
поэтому у меня есть таблица, которая выглядит так:
profile
- profile_key smallint primary key
- profile_name varchar
- fb_profile_id bigint
и тот, который выглядит так
something_else
- profile_key smallint primary key
- something_else_key smallint primary key
- something_else_name varchar
и мои запросы для отдельной страницы могут выглядеть примерно так:
select profile_key, profile_name
from profile
where fb_profile_id = ?
теперь я беру ключ profile_ и использую его в следующем запросе
select something_else_key, something_else_name
from something_else
where profile_key = ?
таблица профилей почти всегда запрашивается практически для любого запроса, поэтому я не считаю это дополнительным шагом.
И, конечно, кешировать первый запрос также довольно просто для некоторой дополнительной производительности.