特定のニッチに焦点を当てたソーシャルネットワーキングWebサイトに取り組んでいますが、ユーザープロファイル情報の保存について質問がありました。ユーザーが性別、職業、好き、嫌いなどの情報を保存できるようにしたいのですが、将来、プロファイルフィールドを追加したい場合は、次のような方法で保存したいと思います。とても簡単に、そしておそらく管理インターフェースを通してさえ。
これまでに作成したデータベーススキーマは次のとおりです。
ユーザー
- id(PK)
- Eメール
- パスワード(など...)
ProfileFields(これには、「性別」、「職業」などのフィールドと、予想される入力のタイプ(テキスト、リスト、チェックボックス、ラジオボタンなど)が格納されます)
- id(PK)
- field_label
- is_optional
- value_type(列挙型:text、textarea、list、dropdown、checkbox、radio)
- is_multiple_allowed(実際にはリストにのみ有効)
ProfileFields_Presets (これにより、任意のProfileFieldsエントリの事前設定された選択可能な値が格納され、 value_typeがリスト、ドロップダウン、チェックボックス、またはラジオの場合にのみエントリがあります)
- 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またはユーザーが入力したテキストになります)
ユーザーが選択できるプリセット値を持つ「Gender」などのプロファイルフィールドは、(プリセット値を格納するための)ProfileFields_Valuesデータベースを実装しますが、「Occupation」などのフィールド(通常は制限がありません)は実装しません。
基本的に、これで十分かどうか疑問に思っています。このようにした結果、問題が発生する可能性はありますか?
また、上記のUsers_ProfileFieldsテーブルでどちらがより効率的でしょうか?外部キーIDまたはカスタム入力のいずれかを格納できる*user_value*フィールドが1つだけありますか?または、それらを*user_value_id*と*user_value_text*に分けます。ここで、2つのうちの一方は常に空になり、もう一方にはデータが入力されますか?