作为一个整体,我在mySQL中是一个初学者,但是我在使用mySQL查看/理解外键和关系时遇到了特殊的问题。mySQL中的关系(外键)
我正在玩的数据库基于大学。有关于学生,工作人员,课程,注册,房间和校园信息的表格。最终,我想要做的是创建一个视图,使我能够看到学生缺少什么课程,但为了做到这一点,我认为我首先需要创建一个临时表,将Student表和Register表连接起来一起。在这张临时表中,我将会有学生的姓名,课程名称和注册信息缺席,存在等)。
我的导师告诉我,因为关系是双向流动的,并且可以通过与其他表格的关系进行访问,所以我需要警惕将过多的外键添加到混合中。这里是我当前的表结构:
表:
CREATE TABLE IF NOT EXISTS `campus` (
`CampusID` int(8) NOT NULL AUTO_INCREMENT,
`CampusName` varchar(255) NOT NULL,
`CampusCourses` int(8) NOT NULL,
PRIMARY KEY (`CampusID`),
KEY `CampusCourses` (`CampusCourses`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Holds attributes relating to the campuses within the college' AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS `course` (
`CourseID` int(8) NOT NULL AUTO_INCREMENT,
`CourseName` varchar(255) NOT NULL,
`CourseType` varchar(10) NOT NULL,
PRIMARY KEY (`CourseID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Holds attributes relating to the courses offered by the college' AUTO_INCREMENT=21 ;
CREATE TABLE IF NOT EXISTS `register` (
`RegisterID` int(8) NOT NULL AUTO_INCREMENT,
`RegisterType` enum('Present','Absent','Late','Reason','Left Early') NOT NULL,
`RoomLocation` int(8) NOT NULL,
`CourseAssociated` int(8) NOT NULL,
PRIMARY KEY (`RegisterID`),
KEY `CourseAssociated` (`CourseAssociated`),
KEY `RoomLocation` (`RoomLocation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Holds attributes relating to the Student Register' AUTO_INCREMENT=10 ;
CREATE TABLE IF NOT EXISTS `room` (
`RoomID` int(8) NOT NULL AUTO_INCREMENT,
`RoomType` varchar(255) NOT NULL,
`RoomNumber` varchar(6) NOT NULL,
`RegisterValue` int(8) NOT NULL,
PRIMARY KEY (`RoomID`),
KEY `RegisterValue` (`RegisterValue`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Holds attributes relating to the rooms available at the college' AUTO_INCREMENT=23 ;
CREATE TABLE IF NOT EXISTS `staff` (
`StaffID` int(8) NOT NULL AUTO_INCREMENT,
`StaffFirstName` varchar(255) NOT NULL,
`StaffLastName` varchar(255) NOT NULL,
`StaffGender` varchar(30) NOT NULL,
`StaffPhone` varchar(11) NOT NULL,
`StaffAddress` varchar(510) NOT NULL,
`CourseTaught` int(8) NOT NULL,
PRIMARY KEY (`StaffID`),
KEY `CourseTaught` (`CourseTaught`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Holds attributes relating to staff members at the college' AUTO_INCREMENT=30 ;
CREATE TABLE IF NOT EXISTS `student` (
`StudentID` int(8) NOT NULL AUTO_INCREMENT,
`StudentFirstName` varchar(255) NOT NULL,
`StudentLastName` varchar(255) NOT NULL,
`StudentGender` varchar(30) NOT NULL,
`StudentPhone` varchar(11) NOT NULL,
`StudentAddress` varchar(510) NOT NULL,
`CourseTaken` int(8) NOT NULL,
PRIMARY KEY (`StudentID`),
KEY `CourseTaken` (`CourseTaken`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Holds attributes relating to students at the college' AUTO_INCREMENT=21 ;
约束:
ALTER TABLE `campus`
ADD CONSTRAINT `campus_ibfk_1` FOREIGN KEY (`CampusCourses`) REFERENCES `course` (`CourseID`) ON DELETE NO ACTION ON UPDATE CASCADE;
ALTER TABLE `register`
ADD CONSTRAINT `register_course_fk` FOREIGN KEY (`CourseAssociated`) REFERENCES `course` (`CourseID`) ON DELETE NO ACTION ON UPDATE CASCADE,
ADD CONSTRAINT `register_room_fk` FOREIGN KEY (`RoomLocation`) REFERENCES `room` (`RoomID`) ON DELETE NO ACTION ON UPDATE CASCADE;
ALTER TABLE `room`
ADD CONSTRAINT `room_register_fk` FOREIGN KEY (`RegisterValue`) REFERENCES `register` (`RegisterID`) ON DELETE NO ACTION ON UPDATE CASCADE;
ALTER TABLE `staff`
ADD CONSTRAINT `staff_course_fk` FOREIGN KEY (`CourseTaught`) REFERENCES `course` (`CourseID`) ON DELETE NO ACTION ON UPDATE CASCADE;
ALTER TABLE `student`
ADD CONSTRAINT `student_course_fk` FOREIGN KEY (`CourseTaken`) REFERENCES `course` (`CourseID`) ON DELETE NO ACTION ON UPDATE CASCADE;
我的问题是,如何建立从student.FirstName, student.LastName, course.CourseName, register.RegisterType
收集列在一起,一个临时表,并建立一个在附近查看?我觉得我错过了一些外键来建立表格之间的关系,但是我的老师告诉我不然。
感谢您提供任何帮助或提示。
“双向流动的关系”是什么意思?除非“关系”被视为“关系”或“关联”,否则我无法理解它,但是您也将“关系”用于“外键”。 – philipxy