以可伸缩和可扩展的方式存储用户配置文件字段和信息

时间:2012-07-19 20:08:53

标签: mysql sql database-design schema database-schema

我正在一个专注于特定利基的社交网站上工作,我对存储用户个人资料信息有疑问。虽然我希望用户能够存储性别,职业,喜欢,不喜欢等信息,但我也希望这样做,如果我想在将来添加任何更多的个人资料字段,我可以做很容易,甚至可能通过管理界面。

这是我到目前为止构建的数据库模式:

用户

  • id(PK)
  • 电子邮件
  • 密码(等......)

ProfileFields (这会存储“性别”,“职业”等字段,以及期望的输入类型:文本,列表,复选框,单选按钮等。)

  • id(PK)
  • FIELD_LABEL
  • is_optional
  • value_type(enum:text,textarea,list,dropdown,checkbox,radio)
  • is_multiple_allowed(仅对列表有效),

ProfileFields_Presets (这将存储任何给定的ProfileFields条目的预设可选值,仅当 value_type 为list,dropdown,checkbox或radio时才会有条目)

  • id(PK)
  • guid(用于HTML元素ID等)
  • profile_field_id(FK:ProfileFields)
  • SORT_ORDER
  • field_preset(例如“男性”,“女性”代表性别)

User_ProfileFields (这将存储各种ProfileFields条目的用户输入)

  • user_id(PK,FK:用户)
  • profile_field_id(PK,FK:ProfileFields)
  • user_value(无论用户输入什么;这将是FK:ProfileFields_Values或用户输入的文本)

“性别”等配置文件字段(具有用户可以选择的预设值)将实现ProfileFields_Values数据库(用于存储预设值),而“职业”等字段(通常是开放式的)将会不

基本上,我只是想知道这是否足够。通过这种方式可能会出现任何问题吗?

另外,哪个在上面的Users_ProfileFields表中效率更高?只有一个* user_value *字段,可以存储外键ID或自定义输入?或者将它们分成* user_value_id *和* user_value_text *,其中两个中的一个总是为空,而另一个用数据填充?

1 个答案:

答案 0 :(得分:1)

我会保持原样。我将分离到user_value_id然后分离user_value_text。 User_value_id是一个键