0

我有4张桌子,即:

tbl_users
tbl_college
tbl_courses
tbl_sections

tbl_users当然包含username,,password

如果我想获取有关某个用户的所有信息,包括:

  1. 他/她属于哪个学院(例如工程学院或工商管理学院

  2. 他/她正在修读什么课程(例如土木工程理学士或市场营销理学士

  3. 他/她在哪个部门(例如CBCITED

如果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

假设这是一个大项目,你会选择什么?

4

1 回答 1

2

如果由于一个或多个表中缺少用户而无法显示用户,则可以使用 anOUTER JOIN让它们显示,在来自这些表的列中使用 NULL 值。因此,没有部分的学生的 section_name 的值为 NULL,但所有其他信息仍然完好无损。

于 2012-11-11T06:06:00.560 回答