リストや他のモデルの表現である複数の値を持つ多くの属性を持つモデルがあります。私の研究により、私はEntity-Attribute-Value designをそのように表現することができましたが、私は推奨よりも知識の豊かな人々からもっと落胆しています。複数の属性を持つモデルのEAVデータベース設計(他のモデル)
私にこだわっ一つは、このコメントである:一言で言えば
属性のリストが頻繁に成長している場合、またはそれがあれば、ほとんどの行は、ほとんどがNULLで埋め込まれることを非常に大きくだされている場合、EAVに便利ですすべての属性を列にしました。その文脈の外で使用されると、アンチパターンになります。
基本的に私のモデルはstudent_report
です。これは、実際のフォームに基づいて、次の属性があります。
- ID
- クリエーター
- 改訂履歴
- 部門
- 参照
- 資金(オプション、変数/固定されていない)
- コメント
- 目的(段落)
- スコープ(段落)
creator
、revision history
、department
、references
、funding
とcomments
このフォームはに依存しているであろう他のモデルです。
私の当初の計画は唯一以下でstudent_report
を作成することです:他人ながら
- ID 作成者の
- ID
- 目的
- 他の段落スタイルのコンテンツ
:revision history
,department
,references
,funding
およびcomments
には、外部キーstudent_report_id
があります。例えばreferences
とfunding
として可変/固定されていないモデルについて
、Iは、DBを正規化するために、これらの「リスト」にstudent_form
を接続するメディエータ・テーブルを使用する計画:
student_report
| id | name | |----|-----------------| | 1 | Abraham Smith | | 2 | Betty Gladstone | | 3 | Chen Hong |
references
| id | name | |----|--------------| | 1 | Reference 1 | | 2 | Reference 2 | | 10 | Reference 10 |
report_references
| user_id | reference_id | |---------|--------------| | 1 | 2 | | 1 | 3 | | 2 | 10 |
は私の提案された解決策は十分ですか?これは小規模のプロジェクトになり、1日に数百回の使用が必要になるとは思えません。
私が提案した解決策は、最初は設計上EAVであると考えられたため、私は疑念を抱いていました。あなたの知識を共有していただきありがとうございます。はい、私の目標は、あなたが言及したように、クエリをバックエンドでストレスの少ないものにするためにテーブルを正規化することです。 –
1NFを使用すると、適切なインデックスを使用してクエリをより簡単に作成して実行することができます。 2NF以降ではクエリが簡単になりません。特定の更新異常を防止します。非常に慎重なプログラミングでこれらの異常を防ぐこともできますが、最初に正規化して予防する方がよい場合があります。 –