1

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

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

用户

  • 身份证(PK)
  • 电子邮件
  • 密码(等等...)

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

  • 身份证(PK)
  • 字段标签
  • is_optional
  • value_type(枚举:文本、文本区域、列表、下拉列表、复选框、单选)
  • is_multiple_allowed(仅对列表有效,真的)

ProfileFields_Presets (这将存储任何给定 ProfileFields 条目的预设可选值,仅当value_type为列表、下拉列表、复选框或单选时才会有条目)

  • 身份证(PK)
  • guid(用于 HTML 元素 ID 等)
  • profile_field_id (FK: ProfileFields)
  • 排序
  • field_preset(例如“男性”、“女性”代表性别)

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

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

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

基本上,我只是想知道这是否足够。这样做是否会出现任何问题?

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

4

1 回答 1

1

我会保持原样。我会分开到 user_value_id,然后是 user_value_text。以 User_value_id 为键

于 2012-07-19T21:59:05.587 回答