Как правильно хранить записи логинов сторонних систем?

Существует множество пользователей.
У каждого пользователя может быть один или несколько логинов в других системах.
Список систем заранее не определен.
Как правильно хранить эти логины?

На ум приходят следующие пути:

1. Одна таблица, где есть 2 поля: ID пользователя и поле вроде TEXT, где через запятую указаны login_a@system1, login_b@system2, login_c@system3

+------+-------------------------------------------------------------+
|  1   | login_a@syatem1, login_b@system2, login_c@system3           |
+------+-------------------------------------------------------------+
|  2   | login_af@syatem12, login_sb@system22, login_cd@system3      |
+------+-------------------------------------------------------------+


2. Две таблицы:
Первая с ID пользователя и e-mail напимер,
Вторая — ID пользователя из первой таблицы (не уникальное поле) и логин в сторонней системе.

+------+-----------------------+
|  1   | login@mail.ru         |
+------+-----------------------+
|  2   | login_af@yandex.ru    |
+------+-----------------------+

+------+-------------------------+
|  1   | login_a@syatem1         |
+------+-------------------------+
|  2   | login_af@syatem12       |
+------+-------------------------+
|  1   | login_b@system2         |
+------+-------------------------+
|  2   |  login_sb@system22      |
+------+-------------------------+
|  2   |  login_cd@system3       |
+------+-------------------------+
|  1   |  login_c@system3        |
+------+-------------------------+


Вопросы:
1. Является ли один из этих двух способов правильным? Если да, то какой?
2. Если есть способ лучше — опишите его пожалуйста.

  • Вопрос задан
  • 2450 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
Самое простое:

users:
id, email

user_linked_accounts
id, user_id, sn_id

social_networks
id, title

one to many throught user_linked_accounts.

Или я Вас неправильно понял?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
BupycNet
@BupycNet
Основатель PushAll
Лучше думаю второй вариант. Плюс надо дать уникальное поле. Это будет полезно если информация будет привязана например к одному из аккаунтов, тогда вы будете указывать там id аккаунта в сети и работать со второй таблицой. Иначе вам надо будет записывать логины в той таблице с данными и потом каждый раз надо будет брать поле резать его и искать по названию. Да еще и представьте удаление, надо вырезать логин (то есть вы везде будете работать не с айди логина и его данных а с тексом) да и представьте что в двух системах у него одинаковые логины… там уже доп поле надо во второй базе, чтобы отличить поле. Налеюсь уйдет ответ… а то карму слили и не пускает писать вообще.
Ответ написан
eaa
@eaa


Навеяло топиком Заблуждения программистов об именах и размышлениями о том, что у усера может быть несколько имен в разных системах (под системой можно понимать хоть фейсбук, хоть паспортный стол — пофиг).

Основная идея — что у нашего усера в нашей системе (табличка user) может быть логин в любой системе (табличка ext_login_system). Каждая система, которая умеет логинить усера, реализуется в виде некого класса, в базе храним то, как вызывать систему (ну чтоб мы могли забить нужную инфу для усера — логин-пароль или там что надо — сама система должна это знать и рисовать нужные скрины), а в базе — только названия методов, которые дергать. Далее, поскольку каждая система имеет свой сецифичный набор данных — она хранит их в своей табличке (в примере — ext_login_system_facebook и ext_login_system_mail_yandex). Далее, связываем все это воедино через табличку ext_logins.
Ответ написан
rbugaev
@rbugaev
ID пользователя как ключ, дальше ID внешней системы + User Name и Password в отдельных столбцах. Связь один ко многим. Вторая таблица с описание внешних систем (если необходимо)
Ответ написан
Комментировать
@ToSHiC
Вопрос ответившим: зачем добавлять уникальный фейковый айди, если логин@система — это уже уникальный идентификатор?
Ответ написан
@ToSHiC
С чего бы это неверное то? user@facebook.com не может быть неуникальным — иначе непонятно, кто пришёл. И оно должно быть привязано ровно к 1 строчке в таблице user. А вот уже в ней, пожалуйста, генерируйте в системе для таблицы user айдишники — там они как раз нужны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы