Я задал этот вопрос на http://dba.stackexchange.com,, но он был закрыт примечанием, что я должен задать его здесь, поскольку это касается дизайна, а не администрирования.
I 'Я строю сайт ( «Сайт» ), и я подумываю, как разработать для него схему БД.
У меня есть несколько сценариев, которые повлияют на результат:
- Пользователь может выбрать регистрацию собственной учетной записи на сайте , что позволит ему использовать эту учетную запись для входа в свою учетную запись на сайте в будущем..
- Пользователь может выбрать вход через другой сайт ( "внешний сайт" ) (например, facebook connect, google, foursquare и т. Д.), Который заставит его использовать его длявойдите в свою учетную запись на сайте в будущем.
- Не имеет значения, какой метод входа он выбрал (собственная учетная запись или внешняя учетная запись сайта), пользователь сможет аутентифицироватьсяего аккаунт на сайте с внешними сайтами (такими как фейсбук, твиттер,instagram и т. д.) за использование данных, которые он имеет на внешнем сайте (например, его твиты из твиттера, его фотографии с flickr и т. д.), на сайте .
Как мне разработать схему БД?
Для первых двух сценариев я подумал о том, чтобы иметь таблицу с именем Users
, которая имеет id
, иtype
поля.Тип ссылается на другую таблицу, такую как FacebookUsers
или GoogleUsers
, каждая из которых имеет поле user_id
- которое имеет внешнее отношение к полю Users.id
- и другие поля, такие как first_name
, profile_picture
и т. д.
Но этот подход не поддерживает третий сценарий.Поэтому я подумал о следующем:
Имея базовую таблицу с именем Users
и таблицу для каждого внешнего сайта Я хочу разрешить пользователю подключаться к моему сайту (который является сайтом *).1053 *).
Таблица Users
будет содержать основную информацию о пользователе (например, first name, last name, username, password, email
- все необязательно) со столбцом с именем accounts
, в котором будут храниться такие значения, как native|facebook|twitter
, или сериализованным массивом.этих значений.
В таблицах внешний сайт s (например, FlickrUsers
) будут храниться соответствующие данные для этого внешнего сайта , относящиеся к пользователю, и ссылка на Users
table 'user_id
field.
Когда пользователь соединяет свою учетную запись с внешним сайтом (таким как flickr, instagram), я заполняю этот внешний сайт таблицу (например, FlickrUsers
) с соответствующими данными для этого внешнего сайта и добавьте имя этого внешнего сайта в качестве другого значения в поле accounts
в Users
table.
Я задаю этот вопрос как общий передовой опыт, fили сайт, который использует логин с несколькими учетными записями.
С учетом вышесказанного, я не уверен, что вышесказанное является хорошим подходом / дизайном для сайта , который я описал выше.Я полностью осознаю, что нет только одного правильного ответа, но я знаю, что есть лучшие решения и не очень идеальные решения.Я надеюсь найти лучшие решения.
Ради этого обсуждения моя СУБД - это mysql, а мой язык - php.