问题
我需要为培训中心的讲师制定日程安排。
我创建了表格,但我不能这样做。
我在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表之间的关系。
预期结果
数据库架构
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]
答案 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(候选键)。然后规范化使用这些可能建议基表的“更好”选择。