通過外來鍵連線多個表
阿新 • • 發佈:2020-05-04
## 背景
**背景一:**
當我們建立一個表格,其中的一項內容可以有多種選擇,可以利用外來鍵的方式繫結一個表。如下圖比如我們需要建立一個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層,需要必要的配置: