Дизайн базы данных профиля пользователя - PullRequest
3 голосов
/ 28 июня 2011

Мне нужно спроектировать учетную запись пользователя / профильные таблицы для университетского проекта.Основная идея, которую я имею, заключается в следующем:

  1. таблица для учетной записи пользователя (электронная почта, имя пользователя, pwd и множество других полей)
  2. таблица профиля пользователя.

Мне кажется, что существует два способа моделирования таблицы профиля пользователя:

  1. поместить все поля в таблицу [UserProfileTable]

    UserAccountID (FK)
    UserProfileID (PK)
    DOB            Date
    Gender         (the id of another table wich lists the possible gender)
    Hobby          varchar(200)
    SmallBio       varchar(200)
    Interests      varchar(200)
    

    ...

  2. Поместите общие поля в таблицу и создайте таблицу ProfileFieldName, в которой будут перечислены все нужные нам поля.Например:

    [ProfileFieldNameTable]
    
    ProfileFieldID int (PK)  
    Name           varchar 
    

Имя будет «хобби», «биография», «интересы» и т. Д. ... Наконец, у нас будет таблица, которая будет связывать профили с полями профиля.:

[ProfileFieldTalbe]
ProfileFieldID   int (PK)
UserProfileID    FK    FK
FieldContent     varchar

'FieldContent' будет хранить небольшой текст о хобби, биографии пользователя, его интересах и т. Д.

Этот способ расширяемый, то есть добавление таким образомбольше полей соответствует INSERT.

Что вы думаете об этой схеме?

Один недостаток заключается в том, что теперь для сбора всей информации профиля одного пользователя мне нужно выполнить объединение.

Вторым недостатком является то, что поле 'FieldContent' имеет тип varchar.Что, если я хочу, чтобы он был другого типа (int, float, date, FK для другой таблицы для списков и т. Д ...)?

1 Ответ

2 голосов
/ 28 июня 2011

Я предлагаю 2-й вариант будет лучше. Упомянутые вами недостатки не являются реальными недостатками,

Использование JOINS - это один из способов извлечения данных из 1 или более таблиц,

2) «FieldContent» относится к типу varchar: я понимаю, что вы собираетесь создать только «FieldContent» для всех остальных ваших полей

В этом случае я предлагаю вам иметьFieldContent 'для каждого соответствующего поля, так что вы можете указать любой тип данных, какой пожелаете.

Переходя к первому варианту,

1) Если вы поставитевсе поля в одной таблице могут привести к путанице и обеспечить меньшую возможность расширения позже, если какие-либо требования изменятся

2) Также будет много избыточности.

...