作爲一個整體,我在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