如何从创建的表中为教师创建计划表

时间:2016-11-25 18:22:02

标签: database sql-server-2008 database-design relational-database erd

问题

我需要为培训中心的讲师制定日程安排。

我创建了表格,但我不能这样做。

我在instructor_course表类表和节表之间建立了什么关系? (我必须有来自表类和表部分的外键吗?我必须从表类和部分ID中将ClassID FK从表部分添加到表Inst_Courses表中吗?)

表格详情

我需要在周日到周四的一周内显示讲师课程的时间表。

E.g。 周日2 - 4时钟教练Michel在ClassRoom A中进行C#课程 B节

所以我创建了以下表格:

Courses (like c#,access,SQL)
Instructor(Teacher)
Int_Courses
Class( Lab or class room)
Section(group of student take courses classified to a,b,c,c2)

我已经在第三个表Inst_Courses表中多次创建了Instructor表和Courses表之间的关系。

预期结果

enter image description here

数据库架构

CREATE TABLE [dbo].[Courses](
    [CourseID] [int] IDENTITY(1,1) NOT NULL,
    [CourseName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_dbo.Courses] PRIMARY KEY CLUSTERED 
(
    [CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[Class](
    [ClassID] [int] IDENTITY(1,1) NOT NULL,
    [ClassName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_dbo.Class] PRIMARY KEY CLUSTERED 
(
    [ClassID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[Instructor](
    [InstructorID] [int] IDENTITY(1,1) NOT NULL,
    [IstructorName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_dbo.Instructor] PRIMARY KEY CLUSTERED 
(
    [InstructorID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[InstructorCourses](
    [CourseID] [int] NOT NULL,
    [InstructorID] [int] NOT NULL,
 CONSTRAINT [PK_dbo.InstructorCourses] PRIMARY KEY CLUSTERED 
(
    [CourseID] ASC,
    [InstructorID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[Section](
    [SecID] [int] IDENTITY(1,1) NOT NULL,
    [SecName] [nvarchar](50) NOT NULL,
    [Active] [bit] NOT NULL,
 CONSTRAINT [PK_dbo.Section] PRIMARY KEY CLUSTERED 
(
    [SecID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[Instructor_Class](
    [ClassID] [int] NOT NULL,
    [InstructorID] [int] NOT NULL,
 CONSTRAINT [PK_dbo.Instructor_Class] PRIMARY KEY CLUSTERED 
(
    [ClassID] ASC,
    [InstructorID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

1 个答案:

答案 0 :(得分:0)

此报告的表格

此报告仅在“Michel”识别出一名教师时才有效。否则,您需要在一个工作日 - 时间段交叉点上使用多个子报告,或者您需要多个报告。

报告行和列的每个非空白子报告都会告诉您:instructor Michel teaches course C in classroom {{1} } CR to section S for department

因此,报告总体上告诉您与包含行的表格相同的内容:D instructor Michel teaches course C in classroom CR to section S for department D {{1} } in timeslot TS 的。请注意我们如何获取这样的多维报告的每个列和行,并为它们相交的每个多维子报告向表中添加一列。

您可能想要一张表格,告诉您与所有教师的所有报告相同的内容:on weekday WD instructor I teaches course C in classroom CR to section {{1} } S for department D in timeslot 的。请注意我们如何在标题中获取参数并将其添加到表中。

(现在我们不需要担心Michel是否识别出一名教师。)

此报告的第一个设计

讲师姓名可能是非独特的或非永久性的。因此,为名称和报告标题添加ID。您可能有更多关于教师,课程和部门的数据。所以有他们的表格。显然,节编号在课程中是唯一的。

TS

您的设计细节会有所不同。也许课程和/或部门有唯一的代码。然后你可以将它们用作FK。然后添加一个表。无论如何,显然一个部分可以是活跃的。

CKs和正常化

给定的讲师,时间段和平日每周只能进行一次讲座。但是没有更小的子集。所以我们有on weekday。给定的课程,部分,时间段和平日每周只能进行一次讲座。但是没有更小的子集。所以我们有WD。给定的教室,时间段和时间平日每周只能进行一次讲座。但是没有更小的子集。我们有-- instructor ID is named NAME and ... Instructor(id, name, ...) CK(id) -- course NAME ... Course(name, ...) CK (name) -- department NAME ... Department(name, ...) CK (name) -- course C_NAME has section S_NUMBER Course_Has_Section(C_name, S_number) CK (C_name, S_number) FK(C_name) to Course -- instructor I_id teaches course C_NAME in classroom CR_NAME to section S_NUMBER -- for department D_NAME in timeslot TS_NAME on weekday WD_NAME Weekly_Lecture(I_id, C_name, CR_name, S_number, D_name, TS_name, WD_name) FK(I_id) to Instructor FK(C_name, S_number) to Course_Has_Section FK(D_name) to Department

也许某个部门只能教授某门课程?也许给定的部分编号只能由给定的教师讲授?通过识别所有FD(功能依赖性),我们确定所有CK(候选键)。然后规范化使用这些可能建议基表的“更好”选择。