これらは2つの完全に異なるアプローチであるため、データをどのように処理するかによって完全に異なります。パフォーマンスが問題になるのは、データへのアクセス方法がうまく機能しないモデルを選択した場合のみです。
最初のオプションは、すべての学生がすべてまたはほとんどの属性を使用し、属性の固定セットがある場合の自然なアプローチです。
2番目のオプションは、学生が異なる属性のセットを持っていて、属性のセットを拡張する可能性が高い場合に役立ちます。
最初のアプローチでは、通常、さまざまな属性を処理するためにさまざまなクエリを記述します。たとえば、学生のリストを取得して、いくつかの属性を返すのは簡単です。例:
select StudentId, Name, Age, Class, Grade
from Students
order by Age desc
2番目のアプローチでは、通常、基本的な学生情報と学生属性を別々に取得します。いくつかの属性を持つ学生のリストを取得することはより複雑であり、取得したいより多くの属性を構築します。例:
select s.StudentId, Name = a1.Value, Age = a2.Value, Class = a3.Value, Grade = a4.Value
from Students s
inner join Attributes a1 on a1.StudentId = s.StudentId
inner join Attributes a2 on a2.StudentId = s.StudentId
inner join Attributes a2 on a3.StudentId = s.StudentId
inner join Attributes a3 on a4.StudentId = s.StudentId
order by cast(a.Value as int) desc