私はSQLデータベース(まだかなり新しい)を使用しており、「一対一」またはサブテーブルのスーパーテーブル関係を作成しようとしました。私は C# と LINQ-to-Entities を使用しています。
一般的な例として、3 つのテーブルがあります。
Person:
PersonId, Age, p1, p2, ..., pn
Student:
PersonId, Grade, GPA, s1, s2, ...., sn
Teacher:
PersonId, PrimarySubject, YearsAtSchool, IsCoach, ....
私ができるようにしたいのは、Person に基づいてクエリを実行し、関連するサブタイプ データも取得することです。関係を確実にするために、関連する TypeId テーブルがあります。
Person にクエリを実行し、その人が学生だったとします。取得したいのは次のとおりです。
QueriedResult
PersonId, Age, p1, ..., pn, Grade, GPA, s1, ..., Sn
残念ながら、私の場合はサブテーブルと要素が多すぎるため、select new {p.PersonID, etc} を実行することはできません。
コードを使用するたびに、2 つの別々のテーブルの IEnumerable を取得します。私が提供するサンプル コードは、関連付けられた学生がいない場合は null を返し、その人物が学生の場合は 2 番目の列にテーブルを返します。
var query = (from p in Persons.AsEnumerable()
join s in Students on p.PersonId equals s.PersonId
select new {p, s});
「フラット化」について多くの話を聞いたことがありますが、提案されたすべての方法では、 p と s が同じテーブルタイプである必要があるようです。
ありがとう、