Какой эффективный способ поместить несколько типов пользователей в БД - PullRequest
1 голос
/ 08 марта 2012

Я создаю веб-сайт, на котором пользователи будут входить на сайт из нескольких источников, включая Facebook и Google+, и я хочу иметь возможность хранить некоторую базовую информацию о каждом пользователе в моей базе данных, чтобы я мог отслеживатьсоздание таких вещей, как комментарии и сообщения.Как мне эффективно сделать это в базе данных SQL.Создать новую таблицу для каждого типа пользователей?

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Вам просто нужны две таблицы, таблица пользователя и таблица типа пользователя.В пользовательской таблице будет столбец для типа, который будет ссылаться на таблицу пользовательских типов и сообщать вам тип.Я хотел бы что-то простое, например:

User (
  Id Int NOT NULL PRIMARY KEY,
  UserName VarChar(50) NOT NULL,
  EmailAddress VarChar(100),
  {... More fields generally used by all account types ...}
  UserTypeId Int NOT NULL
)

UserType (
  Id Int NOT NULL PRIMARY KEY,
  Type VarChar(50) NOT NULL
)

Если у вас есть информация, относящаяся к каждому типу входа, например, Google+ или Facebook, вы можете создать таблицу для каждого конкретного типа входа.Однако реальность такова, что вы, вероятно, получите один и тот же набор базовых информационных полей для всех возможных типов, поэтому не о чем беспокоиться.

3 голосов
/ 08 марта 2012

Обычный подход:

  • A USER таблица с общими данными
  • Таблица FACEBOOK_USER (которая имеет свой собственный PK и USER FK) со специфическими данными Facebook
  • A GOOGLE_USER таблица ...

При загрузке пользователя вы можете объединить все эти таблицы, или вы можете создать представление, содержащее объединение, или, если у вас много специальных типов, вы можете загрузить пользователя и затем прочитать других по отдельности (возможно, сохранить IS_x_USER в таблице USER, чтобы ускорить это).

...