つまり、4つのテーブルがあります。
tbl_users
tbl_college
tbl_courses
tbl_sections
tbl_users
もちろん含まれていますusername
、password
次のような特定のユーザーに関するすべての情報を取得したい場合はどうすればよいでしょうか。
彼/彼女が所属している大学は何ですか (例:工学部または経営学部)
彼/彼女が取っているコースは何ですか (例:土木工学の理学士またはマーケティングの理学士)
彼/彼女はどのセクションに所属していますか (例: CBCまたはITED )
次のようtbl_courses
に設定されている場合:
tbl_courses (id, course_name, college_id)
college_id
を指す場所tbl_college.id
そして tbl_sections は次のように設定されています:
tbl_sections(id, section_name, course_id)
course_id
を指す場所tbl_course.id
ユーザーに関連するすべての情報を選択するusername
にはどうすればよいですか。この場合は、、、、、password
college
course
section
私が念頭に置いているのは、次tbl_user_section
のように: という別のテーブルを作成できるということです。
CREATE TABLE tbl_user_section (user_id INTEGER NOT NULL, section_id INTEGER NOT NULL,
FOREIGN KEY user_id REFERENCES users(id),
FOREIGN KEY section_id REFERENCES sections(id))
そのため、誰がどのセクションにいるかを保持するテーブルを作成できます。また、私の意見では、そのようにすることで、結合を簡単に実行して関連情報を取得できます。
SELECT tbl_users.username, tbl_sections.section_name FROM tbl_users
INNER JOIN tbl_user_section ON tbl_users.id = tbl_user_section.user_id
INNER JOIN tbl_sections ON tbl_sections.id = tbl_user_section.section_id
この種のセットアップで最近発生した問題は、ユーザーがまだセクションにいない場合、上記のコードですべてのユーザーを照会しようとすると、そのユーザーが選択されないか、表示されないことです。
また、この種のセットアップでは、おそらくこれを行うことができます
SELECT tbl_users.username, tbl_sections.section_name,
tbl_courses.course_name, tbl_colleges.college_name FROM tbl_users
INNER JOIN tbl_user_section ON tbl_users.id = tbl_user_section.user_id
INNER JOIN tbl_sections ON tbl_sections.id = tbl_user_section.section_id
INNER JOIN tbl_courses ON tbl_courses.id = tbl_sections.course_id
INNER JOIN tbl_colleges ON tbl_college.id = tbl_courses.college_id
クエリに含まれるこれらの情報を取得します。
私が作成したセットアップから他にどのような問題が見られると思いますか?
section_id
私が行ったように別のテーブルを作成するのではなく、`tbl_users にフィールドを含める方が賢明ですか?
ユーザーのタイプがある場合、同じことを行う必要がありますか (ユーザーの種類ごとにテーブルを分けます) tbl_user_type
、同じテーブルにそれらを持っているか、単に持っている必要がありますtbl_users
これが大きなプロジェクトだとしたら、何を選びますか?