我试图围绕数据库规范化。这是我第一次尝试创建一个工作数据库,所以请原谅我的无知。我正在尝试为类项目创建一个自动化的grad Check系统。下表记录了一定数量的目录年份的主要选项。表格如下
PID Title Dept Courses Must_have
某些选项可让用户从列出的总数中选择一组数量的类(因此Must_have
属性)。完成的行看起来像这样:
PID Title Dept Courses Must_have
--------------------------------------------
1 bis acct 201|202 NULL
Title
是主要附带的选项的名称。如果bis
(业务信息系统)可以选择类,那么只有一行Must_have
中的一行只有一行。
我的问题是我应该将此表拆分为两个不同的表吗?我知道我现在拥有的方式似乎有点......错了。任何帮助将不胜感激。
答案 0 :(得分:5)
我会把它分成三个表。第一个是majors
,包含PID, Title, Dept
,第二个是courses
,包含课程ID,课程名称和任何其他信息,最后一个是专业和课程(可能名为courses_majors
)。 courses_majors
表将包含专业的ID,课程的ID和标志,以显示该专业是否需要专业。
(假设一门课程可用于多个专业)
答案 1 :(得分:5)
我会将dept打破到一个单独的表中并将其与数字ID相关联。然后将“课程”字段分成“连接表”。像这样:
<强>专业强>
Id Title DepartmentID
<强> major_courses 强>
Id MajorId CourseId MustHave
<强>部门强>
Id Title
所以,你可能有一个像:
这样的专业1 bis 1
主要课程如:
1 1 201 0
1 1 202 0
1 1 203 1 -- must have 203
然后是部门:
1 bis
现在,要获得第一个专业的课程列表,您可以这样做:
SELECT major_courses.CourseId, major_courses.MustHave, departments.Title
FROM majors
RIGHT JOIN major_courses ON major_courses.CourseId = majors.Id
INNER JOIN departments ON departments.Id = majors.DepartmendID
WHERE major.id = 1