MySQL:创建一个由不同表中其他三列的值组成的列

时间:2013-06-02 18:04:13

标签: mysql

我想知道是否可以创建一个包含引用其他三列值的列的表。示例如下:

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:完整脚本。本练习的目的是创建一个包含学生,科目和考试时间表的数据库。

1 个答案:

答案 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如何适应。似乎更像是派生表,即它不应该作为模式的一部分存在。