1. 程式人生 > >通過外來鍵連線多個表

通過外來鍵連線多個表

## 背景 **背景一:** 當我們建立一個表格,其中的一項內容可以有多種選擇,可以利用外來鍵的方式繫結一個表。如下圖比如我們需要建立一個employee表,其中包含很多資訊,其中有一項民族可以以外來鍵的方式繫結。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200504171808760.png) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200504171846919.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxOTAwNDk3,size_16,color_FFFFFF,t_70) 接著來看一看sql語句 ```sql CREATE TABLE `employee` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '員工編號', `name` varchar(10) DEFAULT NULL COMMENT '員工姓名', `gender` char(4) DEFAULT NULL COMMENT '性別', `birthday` date DEFAULT NULL COMMENT '出生日期', `idCard` char(18) DEFAULT NULL COMMENT '身份證號', `wedlock` enum('已婚','未婚','離異') DEFAULT NULL COMMENT '婚姻狀況', `nationId` int(8) DEFAULT NULL COMMENT '民族', `nativePlace` varchar(20) DEFAULT NULL COMMENT '籍貫', `politicId` int(8) DEFAULT NULL COMMENT '政治面貌', `email` varchar(20) DEFAULT NULL COMMENT '郵箱', `phone` varchar(11) DEFAULT NULL COMMENT '電話號碼', `address` varchar(64) DEFAULT NULL COMMENT '聯絡地址', `departmentId` int(11) DEFAULT NULL COMMENT '所屬部門', `jobLevelId` int(11) DEFAULT NULL COMMENT '職稱ID', `posId` int(11) DEFAULT NULL COMMENT '職位ID', `engageForm` varchar(8) DEFAULT NULL COMMENT '聘用形式', `tiptopDegree` enum('博士','碩士','本科','大專','高中','初中','小學','其他') DEFAULT NULL COMMENT '最高學歷', `specialty` varchar(32) DEFAULT NULL COMMENT '所屬專業', `school` varchar(32) DEFAULT NULL COMMENT '畢業院校', `beginDate` date DEFAULT NULL COMMENT '入職日期', `workState` enum('在職','離職') DEFAULT '在職' COMMENT '在職狀態', `workID` char(8) DEFAULT NULL COMMENT '工號', `contractTerm` double DEFAULT NULL COMMENT '合同期限', `conversionTime` date DEFAULT NULL COMMENT '轉正日期', `notWorkDate` date DEFAULT NULL COMMENT '離職日期', `beginContract` date DEFAULT NULL COMMENT '合同起始日期', `endContract` date DEFAULT NULL COMMENT '合同終止日期', `workAge` int(11) DEFAULT NULL COMMENT '工齡', PRIMARY KEY (`id`), KEY `departmentId` (`departmentId`), KEY `jobId` (`jobLevelId`), KEY `dutyId` (`posId`), KEY `nationId` (`nationId`), KEY `politicId` (`politicId`), KEY `workID_key` (`workID`), CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`departmentId`) REFERENCES `department` (`id`), CONSTRAINT `employee_ibfk_2` FOREIGN KEY (`jobLevelId`) REFERENCES `joblevel` (`id`), CONSTRAINT `employee_ibfk_3` FOREIGN KEY (`posId`) REFERENCES `position` (`id`), CONSTRAINT `employee_ibfk_4` FOREIGN KEY (`nationId`) REFERENCES `nation` (`id`), CONSTRAINT `employee_ibfk_5` FOREIGN KEY (`politicId`) REFERENCES `politicsstatus` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1942 DEFAULT CHARSET=utf8; ``` 其中較難理解的是: ```sql CONSTRAINT 'employee_ibfk_4' FOREIGN KEY ('departmentId') REFERENCES 'nation' ('id'), ``` 這句程式碼的意思是對整個employee表進行外來鍵約束,其中employee_ibfk_4是外來鍵的名稱(命名方式:表名\_ibfk_數字,ibfk(InnoDB Foreign Key))。nationId是employee表的一個屬性,nation是通過外來鍵連結的新表,並且利用id進行索引。 在mapper層,需要必要的配置: