用户档案数据库设计

时间:2011-06-28 08:08:31

标签: database-schema extensibility user-profile

我必须为大学项目设计一个用户帐户/个人资料表。我的基本想法如下:

  1. 用户帐户的表格(电子邮件,用户名,密码和其他一些字段)
  2. 用户个人资料表。
  3. 在我看来,有两种方法可以为用户配置文件表建模:

    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 
      
    3. 名称将是'业余爱好','生物','兴趣'等...最后,我们将有一个表格,将个人资料与个人资料字段相关联:

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

      'FieldContent'将存储关于爱好的小文本,用户的生物,他的兴趣等等。

      这种方式是可扩展的,这意味着以这种方式添加更多字段对应于INSERT

      您对此架构有何看法?

      一个缺点是,为了收集单个用户的所有个人资料信息,我现在必须进行联接。

      第二个缺点是字段'FieldContent'的类型为varchar。如果我希望它是另一种类型(intfloatdate,另一个列表框的FK等等,该怎么办?)

1 个答案:

答案 0 :(得分:2)

我建议第二个选项会更好, 你提到的缺点不是真正的缺点,

使用JOINS是从一个或多个表中检索数据的方法之一,

2)'FieldContent'的类型为varchar:我知道您将为所有其他字段仅创建'FieldContent'

在这种情况下,我建议你可以为每个相应的字段设置'FieldContent',这样你就可以提供任何你想要的数据类型。

来到第一个选项,

1)如果将所有字段放在一个表中可能会引起很多混淆,并且如果需要更改,则提供以后扩展的可行性会降低

2)也会有很多冗余。