我必须为大学项目设计一个用户帐户/个人资料表。我的基本想法如下:
在我看来,有两种方法可以为用户配置文件表建模:
将所有字段放在表格中 [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)
...
将公共字段放在表中并设计将列出的ProfileFieldName表 我们想要的所有领域。例如:
[ProfileFieldNameTable]
ProfileFieldID int (PK)
Name varchar
名称将是'业余爱好','生物','兴趣'等...最后,我们将有一个表格,将个人资料与个人资料字段相关联:
[ProfileFieldTalbe]
ProfileFieldID int (PK)
UserProfileID FK FK
FieldContent varchar
'FieldContent'将存储关于爱好的小文本,用户的生物,他的兴趣等等。
这种方式是可扩展的,这意味着以这种方式添加更多字段对应于INSERT
。
您对此架构有何看法?
一个缺点是,为了收集单个用户的所有个人资料信息,我现在必须进行联接。
第二个缺点是字段'FieldContent'的类型为varchar
。如果我希望它是另一种类型(int
,float
,date
,另一个列表框的FK等等,该怎么办?)
答案 0 :(得分:2)
我建议第二个选项会更好, 你提到的缺点不是真正的缺点,
使用JOINS是从一个或多个表中检索数据的方法之一,
2)'FieldContent'的类型为varchar:我知道您将为所有其他字段仅创建'FieldContent'
在这种情况下,我建议你可以为每个相应的字段设置'FieldContent',这样你就可以提供任何你想要的数据类型。
来到第一个选项,
1)如果将所有字段放在一个表中可能会引起很多混淆,并且如果需要更改,则提供以后扩展的可行性会降低
2)也会有很多冗余。