【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,非空约束,针对某个字段设置其 ...
随机推荐
- php强大的filter过滤用户输入
<?php $filters = array //定义过滤的数组 ( "name" => array ( "filter"=>FILTER_S ...
- laravel-admin Field type [editor] does not exist.
把App/admin中的bootstrap.php 里边的Encore\Admin\Form::forget(['map', 'editor']);注释掉就行了 解决网址:http://tieba.b ...
- 【转】linux下 如何切换到root用户
转自:https://www.cnblogs.com/xinjie10001/p/6295020.html 默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命 ...
- Java线程与Linux内核线程的映射关系(转)
Java线程与Linux内核线程的映射关系 Java线程与Linux内核线程的映射关系Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程 ...
- HelloWorld的解析
public class HelloWorld { public static void main(String[] args) { System.out.println("你好,世界!&q ...
- spring+mybatis事务配置(转载)
原文地址:http://blog.csdn.net/wgh1015398431/article/details/52861048 申明式事务配置步骤 .xml文件头部需要添加spring的相关支持: ...
- while循环练习:
输入姑娘的年龄后,进行以下判断: 如果姑娘小于18岁,打印"不接受未成年" 如果姑娘大于18岁小于25岁,打印"心动表白" 如果姑娘大于25岁小于45岁,打印& ...
- MyBatis:Parameter Maps collection does not contain value for 的问题解决
Result Maps collection does not contain value for frontpreviewprofitManage.cdata 出现上述错误 主要是因为你的sel ...
- xmlns, xmlns:xsi, xsi:schemaLocation 解释
xmlns, xmlns:xsi, xsi:schemaLocation 解释 xmlnsxsischemaLocation 我们在写 xml 文件时,尤其是 spring .mybatis 的配置文 ...
- 微信小程序-饮食日志_开发记录01
今天主要了解微信小程序的框架结构以及环境部署等. 小程序的框架主要分为: js.json.wxss.wxml等 和java web的内容相似,主要了解内部代码的使用情况和语言方式. 主要写了页面的框架 ...