J'utilise un bigint pour stocker le facebook id, parce que c'est ce qu'il est.
mais, en interne, pour les primaires et les clés étrangères des tables, j'utilise un smallint, car il est plus petit. Mais aussi parce que si le type bigint ne devrait jamais avoir à devenir une chaîne de caractères (pour trouver des utilisateurs par nom d'utilisateur au lieu de l'id), je peux facilement changer.
donc j'ai une table qui ressemble à ceci:
profile
- profile_key smallint primary key
- profile_name varchar
- fb_profile_id bigint
et celui qui ressemble à ceci
something_else
- profile_key smallint primary key
- something_else_key smallint primary key
- something_else_name varchar
et mes requêtes pour un singe page pourrait être quelque chose comme ceci:
select profile_key, profile_name
from profile
where fb_profile_id = ?
maintenant, je prends le profile_key et de l'utiliser dans la requête suivante
select something_else_key, something_else_name
from something_else
where profile_key = ?
la table de profil presque toujours interrogé pour presque toutes les demandes de toute façon, je ne considère pas cela une étape supplémentaire.
Et bien sûr, il est également très à l'aise pour mettre en cache la première requête pour un peu de performance.