3

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

  1. 用户帐户表(电子邮件、用户名、密码和一堆其他字段)
  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, a date, FK 到另一个表的列表框等...)怎么办?

4

1 回答 1

2

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

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

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

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

来到第一个选项,

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

2)也会有很多冗余。

于 2011-06-28T08:19:33.273 回答