【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;
【mysql】如何通过navicat配置表与表的多对一关系,一对一关系?设计外键的效果的更多相关文章
- MySQL开发——【多表关系、引擎、外键、三范式】
多表关系 一对一关系 一对多或多对一关系 多对多关系 MySQL引擎 所谓的MySQL引擎就是数据的存储方式,常用的数据库引擎有以下几种: Myisam与InnoDB引擎之间的区别(面试) ①批量插入 ...
- python学习之老男孩python全栈第九期_数据库day001知识点总结 —— MySQL操作数据库以及数据表、基本数据类型、基本增删改查、外键定义以及创建
一. 学习SQL语句规则以及外键 1. 操作文件夹 create database db2; 创建文件夹 create database db2 default charset utf8; 创建文件夹 ...
- day03 mysql外键 表的三种关系 单表查询 navicat
day03 mysql navicat 一.完整性约束之 外键 foreign key 一个表(关联表: 是从表)设置了外键字段的值, 对应的是另一个表的一条记录(被关联表: 是主 ...
- python 存储引擎 mysql(库,表, 行) 单表多表操作 (foreign key) sql_mode pymysql模块讲解
##################总结############### mysql 常用数据类型 整型:tinyint int(42亿条左右) bigint 小数:float double dec ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...
- MySQL创建数据表并建立主外键关系
为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引, ...
- MySQL删除表的时候忽略外键约束
删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心.但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情:另外在测试的时候,也有需要重新创建 ...
- MySQL创建表时加入的约束以及外键约束的的意义
1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...
随机推荐
- 数据库(一):suse下MySQL安装
1.准备工作从MySQL官网上分别下载mysql服务器端于客户端包:MySQL-server-5.5.31-1.linux2.6.x86_64.rpmMySQL-client-5.5.31-1.lin ...
- Delphi 变量
- id - 显示真实和有效的 UID 和 GID
总览 (SYNOPSIS) id [OPTION]... [USERNAME] 描述 (DESCRIPTION) 显示 USERNAME 或者 当前 用户 的 信息. -a 忽略, 同 其它 版本 兼 ...
- composer 被墙后镜像设置
这一步主要更改镜像,不从外网直接取,现在改成了中国的一家镜像站.就是下面这个地址. https://packagist.phpcomposer.com#阿里云的composer镜像源composer ...
- memcached和redis的区别
memcache和redis区别 memcach简介 Memcache时一个内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载.它可以应对任意多个连接,使用非阻塞的网络I/O, 工作机制: ...
- Java线程与Linux内核线程的映射关系(转)
Java线程与Linux内核线程的映射关系 Java线程与Linux内核线程的映射关系Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程 ...
- docker 部署springboot项目【转载】
https://www.cnblogs.com/ityouknow/p/8599093.html
- zabbix命令之:zabbix_sender命令
zabbix server除了可以从客户端主动获取数据,客户端也可以主动将数据推送给服务端,客户端通过zabbix_sender指令来实现向服务端主动推送数据. 在zabbix客户端安装 配置yum源 ...
- elasticsearch基本Restful操作
1.添加数据curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/megacorp/emplo ...
- Node.js的url模块简介
什么是URL URL是Uniform Location Resource的缩写,翻译为“统一资源定位符”,也就是描述资源位置的固定表示方法.被URL描述的资源可以位于互联网上,也可以位于本地. URL ...