我想知道是否可以创建一个包含引用其他三列值的列的表。示例如下:
CREATE TABLE Students
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Student_Name VARCHAR(25),
Course_Name VARCHAR(25),
First_Mark VARCHAR(25),
Second_Mark VARCHAR(25),
Third_Mark VARCHAR(25)
);
CREATE TABLE Course
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Student_Course_Name VARCHAR(25),
First_Subject VARCHAR(25), <------|*************************************************
Second_Subject VARCHAR(25), <-----| I want to connect values from these columns... *
Third_Subject VARCHAR(25), <------|*************************************************
FOREIGN KEY (Students_Course_Name) references Students (Course_Name)
);
CREATE TABLE Timetable
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Subject_List VARCHAR(25), <-------| *** ...with this column. In other words, I want mentioned columns to be related.
Date DATETIME DEFAULT NULL,
Avarage_Mark INTEGER,
);
这就是我想要的:
http://i.stack.imgur.com/zB0AV.png
编辑2:完整脚本。本练习的目的是创建一个包含学生,科目和考试时间表的数据库。
答案 0 :(得分:4)
关系数据库实践不如“First_Subject”等编号列,除非你可以保证行只会有那么多主题,但不能更多(也许不会少)。即便如此,我也会犹豫不决。
相反,你可以拥有一个带有主题的Subject
表,然后是一个Subject-Courses
表,可以根据需要将课程链接到多个或几个主题。然后,您还可以将时间表行链接到Subject
行。
一个示例模式(我确定你可以找出DDL)给出你的问题:
Students (stuID, name)
StudentCourses (scID, couID, stuID, enrollmentDate)
StudentCourseMarks (scID, mark, markDate)
Courses (couID, name)
Subjects (subID, subject)
CourseSubjects (couID, subID)
我不确定Timetable
如何适应。似乎更像是派生表,即它不应该作为模式的一部分存在。