Проектирование базы данных: объединение пользователей из разных систем журналирования (Google, Facebook, OpenID ...) - PullRequest
0 голосов
/ 26 августа 2009

Алло, Мне нужно объединить пользователей из нескольких источников, например, Facebook, Google, Plaxo ... В настоящее время у меня есть эта структура в моей базе данных:

USERS_MYSITE

mysite_user_id        | parameter | value
------------------------------------------
223                   | firstname | Tom
223                   | lastname  | N.
223                   | birthdate | 1985-01-30

USERS_FACEBOOK

mysite_user_id        | facebook_user_id | parameter | value
-------------------------------------------------------------
223                   | 456353453        | fname     | Tom
223                   | 456353453        | lname     | N.
223                   | 456353453        | birth     | 1985-01-30

USERS_GOOGLE

mysite_user_id        | google_user_id | parameter | value
-----------------------------------------------------------
223                   | tomtom22       | fn        | Tom
223                   | tomtom22       | ln        | N.
223                   | tomtom22       | brt       | 1985 JUN 30

USERS_VIEW

    mysite_user_id        | remote_user_id | site_name | parameter | value
    ---------------------------------------------------------------------------
    223                   | 223            | mysite    | firstname | Tom
    223                   | 223            | mysite    | lastname  | N.
    223                   | 223            | mysite    | birthdate | 1985-01-30
    223                   | tomtom22       | google    | fn        | Tom
    223                   | tomtom22       | google    | ln        | N.
    223                   | tomtom22       | google    | brt       | 1985-01-30
    223                   | 456353453      | facebook  | fname     | Tom
    223                   | 456353453      | facebook  | lname     | N.
    223                   | 456353453      | facebook  | birth     | 1985 JUN 30

Затем ВЫБЕРИТЕ ИЗ USERS_VIEW, ГДЕ mysite_user_id = '223', и я получил всю информацию о пользователе. После этого я могу использовать несколько массивов транспорта, чтобы преобразовать все удаленные данные в мой формат

Array ("firstname" => Array ("fn", "fname"), "birthdate" => Array ("brt", "birth"), ...)

то же самое относится и к значениям. Далее, в зависимости от того, какой пользователь выбрал в качестве своих основных данных, я могу показать его.

Проблема в том, что я никогда не делал этого раньше, поэтому, возможно, кто-то знает, как сделать это лучше. Пожалуйста, поделитесь своими идеями.

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

Идея состояла в том, чтобы создать движок, который мог бы объединить множество учетных записей от разных «владельцев учетных записей», с возможностью добавления новых, если это необходимо. Плюс, дать возможность пользователю настроить данные своего аккаунта; взять имя из одного источника, фамилию из другого и добавить из формы профиля. Я беспокоился о скорости запросов, потому что каждый раз для каждого пользователя, показанного на экране, было бы рискованно делать такой медленный запрос. Также мы получаем большой трафик, около 1 миллиона в день, это 20 миллионов просмотров страниц и около 100 000 000 запросов. Это большой счет.

Да, проблема уже решена. Я только что создал другую таблицу с дублированными данными :(. Каждый раз, когда пользователь изменяет некоторые из своих настроек, новая таблица обновляется из приведенной выше структуры. Затем мы берем данные только из этой новой таблицы, и этот метод работает нормально. Уже добавлены ссылки и твиттер в список источников. Сейчас думаю экспортировать этот движок и сделать его открытым исходным кодом. :)

0 голосов
/ 04 февраля 2010

Вы, вероятно, уже решили свою проблему к настоящему времени - но если вам все еще нужна помощь, я с радостью помогу. Это та проблема, которая мне нравится.

Но чтобы помочь, можете ли вы сказать мне, какой конечный результат вы на самом деле хотите? У вас есть решение, которое должно работать, и я не уверен, что вы говорите, что хотите, чтобы оно дало другой результат или вы хотите, чтобы оно дало текущий результат, но более эффективно?

Если вы можете уточнить это, мы можем разобраться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...