【问题标题】:How can I make a schedule table for instructor from tables created如何从创建的表中为讲师制作日程表
【发布时间】:2017-02-08 16:58:48
【问题描述】:

问题

我需要为培训中心的讲师制定时间表。

我创建了表,但我无法创建关系。

instructor_course 表 class 表和 section 表之间有什么关系? (我必须有一个来自表类和表部分的外键吗?我必须将表类的 ClassID FK 和表部分的 SectionID 添加到表 Inst_Courses 表吗?)

表格详情

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

例如周日凌晨 2 点到 4 点,讲师 Michel 在 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]

【问题讨论】:

  • 太宽泛了。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
  • 你能发布数据库模式和一些示例数据吗?以及您期望的结果
  • 请解释什么是(学生?)小组,什么是(班级?)部分以及您的图片表格告诉我们什么。写得好像我们不了解事物的组织方式,因为我们不了解。请为尽可能多的表提供 DDL。 PS你关于米歇尔的那句话不符合表格。
  • 你不清楚。请尽可能多地展示您的餐桌。请描述你想做什么。是什么阻止你设计桌子?你的意思是你想设计一个看起来像图像的report?还是包含该信息的table? PS“我创建了表,但关系做不到。”不清楚。什么是“关系”?你是说“桌子”吗?你是说“关系”吗?这通常但错误地用于“外键”。你的意思是“外键”吗?

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


【解决方案1】:

此报告的表格

此报告仅在“米歇尔”指定一位讲师时有效。否则,您需要针对一个工作日时间段交叉点的多个子报告,或者您需要多个报告。

报告的行和列中的每个非空白子报告都会告诉您:instructor Michel teaches courseCin classroomCRto section Sfor departmentD.

因此,报告告诉您总体上与包含以下行的表格相同的内容:instructor Michel teaches courseCin classroomCRto sectionSfor departmentDin timeslotTSon weekdayWD。请注意,我们如何获取这样的多维报表的每一列和每一行,并在它们相交的每个多维子报表的表中为其添加一列。

您可能想要一个表格告诉您与所有讲师的所有报告相同的内容:instructorIteaches courseCin classroomCRto sectionSfor departmentDin timeslotTS@987654353 @WD。请注意我们如何在标题中获取一个参数并将其添加到表格中。

(现在我们不必担心 Michel 是否会确定一位讲师。)

本报告的第一个设计

教师姓名可能不是唯一的或非永久性的。因此,将 ID 添加到名称和报告标题中。您可能有更多关于教师、课程和部门的数据。所以有他们的桌子。显然,节号仅在一门课程中是唯一的。

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

您的设计细节会有所不同。也许课程和/或部门有唯一的代码。然后您可以将它们用作 FK。然后添加一个表。显然,无论这意味着什么,一个部分都可以处于活动状态。

CK 和规范化

给定的讲师、时间段和工作日只能有每周一次的讲座。但其中没有更小的子集。所以我们有Weekly_Lecture CK(I_id, TS_name, WD_name)。给定的课程、部分、时间段和工作日只能有一个每周讲座。但其中没有更小的子集。所以我们有Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)。一个给定的教室、时间段和工作日只能有一个每周讲座。但其中没有更小的子集。所以我们有Weekly_Lecture CK(CR_name, TS_name, WD_name)

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

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2022-10-09
    • 1970-01-01
    相关资源
    最近更新 更多