【mysql】如何通过navicat配置表与表的多对一关系,一对一关系?设计外键的效果
背景:
现在要将接口自动化测试结果持久化,当前只是每次运行接口测试,将测试结果通过邮件发送给项目组成员。邮件内容如下:
表设计:
为了呈现这个结果:我设计了2张表run_result和run_detail(testcase表是已经存在的)
- run_detail表:测试结果明细
- run_result表:测试结果
- testcase表:测试用例
表关系:
run_detail表中的多条记录,对应run_result的1条记录(多对一关系)
run_detail表中1条记录,必定是属于testcase表中的某1条case(一对一关系)
分析过程:
run_detail表与run_result表多对一关系
run_detail表通过字段result_id与run_result表产生关系。
run_detail表中的result_id与run_result表中的id值(主键)应当是多对一的关系。
run_detail表与testcase表一对一关系
run_detail表通过字段testcase_id与testcase表产生关系。
run_detail表中的testcase_id与testcase表中的id值(主键)应当是一对一的关系。
所以在run_detail表中要保证testcase_id值是唯一的。
配置方法:【mysql】一对一关系的理解,以及Navicat Premium怎么设置字段的唯一性(UNIQUE)?
要使表与表之间建立 多对一,一对一关系,需要通过外键
run_detail表字段设计:
通过navicat 为run_detail表设计外键:
名字可以随便起
第2列字段取当前表中已经存在的字段
第5列参考字段,取与当前表有关系的表中的字段
设计外键之后的效果:
附上建表SQL语句:
run_result表:
CREATE TABLE `run_result` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `bad_api_num` int(10) NOT NULL COMMENT '异常接口数', `start_time` datetime NOT NULL COMMENT '开始时间', `end_time` datetime NOT NULL COMMENT '结束时间', `run_time` varchar(64) NOT NULL COMMENT '测试用时', `all_case` int(11) NOT NULL COMMENT '全部case', `pass_case` int(11) NOT NULL COMMENT '通过case', `fail_case` int(11) NOT NULL COMMENT '失败case', `jump_case` int(11) NOT NULL COMMENT '未验证case', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
run_detail表:
CREATE TABLE `run_detail` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `result_id` int(11) NOT NULL COMMENT 'run_result表外键 多(detail)对一(result)', `testcase_id` int(11) DEFAULT NULL COMMENT 'case编号 值唯一 testcase表外键 一(run_detail)对一(testcase) ', `code_state` char(8) DEFAULT NULL COMMENT '状态码(自定义2001表示断言失败,其它为测试接口返回真实状态码,如204)', `api_purpose` varchar(50) DEFAULT NULL COMMENT '接口描述', `request_url` varchar(100) DEFAULT NULL COMMENT '接口地址', `response` varchar(255) DEFAULT NULL COMMENT '接口返回值', `creater` varchar(50) DEFAULT NULL COMMENT '创建者', PRIMARY KEY (`id`), UNIQUE KEY `testcase_id` (`testcase_id`) USING BTREE, KEY `detail_result_bfk1` (`result_id`), CONSTRAINT `detail_result_bfk1` FOREIGN KEY (`result_id`) REFERENCES `run_result` (`id`), CONSTRAINT `detail_testcase_bfk2` FOREIGN KEY (`testcase_id`) REFERENCES `testcase` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;