この質問は実際にはどの言語にも当てはまります。これに似ていますが、まったく同じではありません。
データベースからのデータを表示するWebサイトアプリケーションがあります。3つのDBテーブル:
tblProfessor(Id,FirstName,LastName)
tblStudent(Id,FirstName,LastName)
tblProfessorStudent(Id,StudentId,ProfessorId)
ですから、学生と教授がいます。学生は複数の教授によって教えることができ、教授は複数の学生を教えることができます。
データをクエリする2つの方法:
- 3つのテーブルすべての結合を返します。この場合、いくつかの重複データを転送します。
- テーブルごとに3セットを返します。Webアプリケーションからの1回の呼び出しで複数のデータセットを返すことができることを知っています。その呼び出しの仕組みについてはよくわかりませんが、DBへの1つの接続にすぎないと思います(上記の同様の質問とは対照的です)。
最初のケースのクエリ:
select
ProfessoirId = p.Id
,ProfessorFirstName = p.FirstName
,ProfessorLastName = p.LastName
,StudentId = s.Id
,StudentFirstName = s.FirstName
,StudentLastName = s.LastName
from tblProfessorStudent ps
inner join tblProfessor p
on p.id = ps.ProfessorId
inner join tblStudent s
on s.id = ps.StudentId
私が話している重複は、各行ごとに学生と教授の名前と名前を返すことです。「学生は教授によって教えられます」と「教授は学生に教えられます」の組み合わせです。複製により、DBからアプリに転送する必要のある余分な量のkbが発生します。
2番目のケースのクエリは、次のように単純になります。
select <columns> from tblProfessor
select <columns> from tblStudent
select <columns> from tblProfessorStudent
パフォーマンスの観点から、アプリのデータのクエリにどのようにアプローチする必要がありますか?