【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,非空约束,针对某个字段设置其 ...
随机推荐
- html获取摄像头和相册
<input type="file" accept="video/*";capture="camcorder"> <inp ...
- java.lang.ClassNotFoundException: org.apache.jsp.login_jsp
<span style="font-family: Simsun; background-color: rgb(255, 255, 255);">想必大家在用Eclip ...
- Centos下载安装grafana
grafana的官网下载:https://grafana.com/grafana/download 一.安装服务端图像呈现组件 # yum install -y fontconfig freetype ...
- 第04课:GDB常用命令详解(上)
本课的核心内容如下: run命令 continue命令 break命令 backtrace与frame命令 info break.enable.disable和delete命令 list命令 prin ...
- MySQL数据库安装和启动
目录 一.数据库介绍 二.数据库的分类 1. 关系型数据库系统 2. 当下的关系型数据库系统 3. 当下的非关系型数据库系统 4. 关系型和非关系型数据库系统的区别 三.MySQL的架构 四.MySQ ...
- web开发常见的几大安全问题
一.SQL注入 SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击.SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求 ...
- python 面向对象_1
self #self 是相当于c++的 this指针 class Ball: def setName(self,name): self.name = name def kick(self): prin ...
- 如何查看 mysql 的视图?
1.查询表(包括view) mysql> use iips; Database changed mysql> show tables; +------------------------- ...
- AJAX - 向服务器发送请求请求
AJAX - 向服务器发送请求请求 XMLHttpRequest 对象用于和服务器交换数据.直线电机生产厂家 向服务器发送请求 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 ...
- 实战build-react(一)
https://www.jianshu.com/p/34468f13263c(copy) 目录结构 一.安装 npm install -g create-react-app 二.创建react应用 ...