私は20万人の学生の記録を持つデータベースを持っており、各学生は拡張可能なプロファイルを持っています。
Students
主キーテーブルです。
StudentProfiles
プロファイル要素を格納します。
[ProfileID],[StudentID],[PropertyDefinitionID],[PropertyValue]
各プロファイルには約120のプロパティが含まれているため、StudentProfiles
私には20万人の学生がいます*120のプロファイルプロパティ=2400万行。
Count(StudentSiblings)
のようないくつかの重要なプロファイル要素GuardianEmail
は、多くの外部操作で使用されますが、他のプロファイル要素はめったに使用されません。
パフォーマンスを向上させるために、この3つまたは4つのプロファイルプロパティもマスターStudents
テーブルの列として保存した場合、問題はありますか?
これは単なる例です。また、テーブルの集計関数の結果を別のテーブルに保存して、学生の支払いの合計を列として学生テーブルに保存するなど、より簡単かつ迅速にアクセスしたい場合もあります。この種の非正規化は、DBの設計基準に違反します。