这里给出一道MySQL的练习题,能够熟练掌握后对外键的使用和理解有很大帮助
假如左表代表了一个公司的员工信息统计表,而右表代表了公司拥有的主机列表,每个员工可以分配多个主机,而每台主机也可以交给多个用户使用,那么要怎样表示这种关系呢?
可以像这样表示某个用户被分配了哪些主机,但是如果我们想要查找某台主机正在被哪个用户使用时,这个过程就会变得比较困难
解决方法
其实很简单,只要再建一张表把用户和主机的关系进行记录就好了
这里给出笔者的解答方法:
Table: t3 -- 用户表
Create Table: CREATE TABLE `t3` (
`id` int NOT NULL AUTO_INCREMENT,
`name` char(10) DEFAULT NULL,
`gender` enum('1','2','3') DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Table: t4 -- 主机表
Create Table: CREATE TABLE `t4` (
`id` int NOT NULL AUTO_INCREMENT,
`主机名` char(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Table: t5 -- 关系表
Create Table: CREATE TABLE `t5` (
`id` int NOT NULL AUTO_INCREMENT,
`uid` int NOT NULL,
`hostid` int NOT NULL,
PRIMARY KEY (`id`),
KEY `u_c` (`uid`),
KEY `c_c` (`hostid`),
CONSTRAINT `c_c` FOREIGN KEY (`hostid`) REFERENCES `t4` (`id`),
CONSTRAINT `u_c` FOREIGN KEY (`uid`) REFERENCES `t3` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci