0

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

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

4

1 回答 1

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

于 2013-06-02T18:09:00.840 回答