Навеяло топиком
Заблуждения программистов об именах и размышлениями о том, что у усера может быть несколько имен в разных системах (под системой можно понимать хоть фейсбук, хоть паспортный стол — пофиг).
Основная идея — что у нашего усера в нашей системе (табличка user) может быть логин в любой системе (табличка ext_login_system). Каждая система, которая умеет логинить усера, реализуется в виде некого класса, в базе храним то, как вызывать систему (ну чтоб мы могли забить нужную инфу для усера — логин-пароль или там что надо — сама система должна это знать и рисовать нужные скрины), а в базе — только названия методов, которые дергать. Далее, поскольку каждая система имеет свой сецифичный набор данных — она хранит их в своей табличке (в примере — ext_login_system_facebook и ext_login_system_mail_yandex). Далее, связываем все это воедино через табличку ext_logins.