【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_idrun_result表中的id值(主键)应当是多对一的关系。

 

run_detail表与testcase表一对一关系

run_detail表通过字段testcase_idtestcase表产生关系。

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;

 

原文地址:https://www.cnblogs.com/kaerxifa/p/11640749.html