【问题标题】:User profile database design用户资料数据库设计
【发布时间】:2011-06-28 08:08:31
【问题描述】:

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

  1. 用户帐户表(电子邮件、用户名、密码和一堆其他字段)
  2. 用户个人资料表。

在我看来,有两种方法可以对用户个人资料表进行建模:

  1. 将所有字段放在一个表中 [用户资料表]

    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。如果我希望它是另一种类型(intfloatdate、另一个表的列表框的 FK 等...)怎么办?

【问题讨论】:

    标签: database-schema extensibility user-profile


    【解决方案1】:

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

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

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

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

    来到第一个选项,

    1)如果将所有字段放在一个表中,可能会导致很多混乱,并且如果有任何需求发生变化,以后扩展的可行性就会降低

    2) 也会有很多冗余。

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多