我应该将这张桌子分成两张吗?

1 sql normalization

我试图围绕数据库规范化.这是我第一次尝试创建一个工作数据库,所以请原谅我的无知.我正在尝试为类项目创建一个自动化的grad Check系统.下表记录了一定数量的目录年份的主要选项.该表如下

PID    Title    Dept    Courses    Must_have
Run Code Online (Sandbox Code Playgroud)

一些选项使用户可以从列出的总数中选择一组数量的类(因此Must_have属性).完成的行看起来像这样:

PID    Title    Dept    Courses    Must_have
--------------------------------------------
 1      bis     acct    201|202      NULL
Run Code Online (Sandbox Code Playgroud)

Title是主要版本可以附带的选项的名称.如果bis(业务信息系统)可以选择类,则一行只有一行中有一个数字Must_have.

我的问题是我应该将这个表分成两个不同的表吗?我知道我现在拥有的方式似乎有点......错了.任何帮助将不胜感激.

nic*_*ckf 5

我会把它分成三个表.第一个将是majors并且将包含PID, Title, Dept,第二个将courses包含课程ID,课程名称和任何其他信息,最后一个将是专业和课程之间的映射(可能是名称courses_majors).该courses_majors表将包含专业的ID,课程的ID和标志,以显示该专业是否需要.

(这假设一门课程可用于多个专业)


小智 5

我会将dept分成一个单独的表并将其与数字ID相关联.然后将"课程"字段分成"连接表".像这样的东西:

专业

Id   Title       DepartmentID
Run Code Online (Sandbox Code Playgroud)

major_courses

Id   MajorId     CourseId      MustHave
Run Code Online (Sandbox Code Playgroud)

部门

Id   Title
Run Code Online (Sandbox Code Playgroud)

所以,你可能有一个像这样的专业:

1    bis          1
Run Code Online (Sandbox Code Playgroud)

像一个主要的课程:

1    1           201            0
1    1           202            0
1    1           203            1 -- must have 203
Run Code Online (Sandbox Code Playgroud)

部门喜欢:

1    bis
Run Code Online (Sandbox Code Playgroud)

现在,要获得第一个专业的课程列表,您可以这样做:

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
Run Code Online (Sandbox Code Playgroud)