[Golang实战] sql建表,不用外键,多个表之间如何建立起联系?

news2024/10/6 2:25:26

问题描述

下面是我的建表语句,在其中我并没有使用到外键,去关联三个表,但是我发现三个表中具有隐式的关联关系

create database library;
use library;
DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`(
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `username` varchar(255) NOT NULL  COMMENT '用户名',
    `password` varchar(255) NOT NULL COMMENT '密码',
    `email` varchar(255) NOT NULL  COMMENT '邮箱',
    `phone` int(40)  NOT NULL  COMMENT '手机号',
    `age`  int(20) NOT NULL COMMENT '年龄',
    `sex`  varchar(20) NOT NULL COMMENT '性别',
    `identity` varchar(20) DEFAULT '普通用户' COMMENT '身份',
    PRIMARY KEY (`id`),
    UNIQUE KEY `id_username`(`username`) USING BTREE,
    UNIQUE KEY `id_password`(`password`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;

DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`(
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `book_name` varchar(255) NOT NULL COMMENT '图书名字',
    `book_author` varchar(255) NOT NULL COMMENT '图书作者',
    `book_number` int(20) NOT NULL COMMENT '图书数量',
    `book_kind` varchar(255) NOT NULL COMMENT '图书种类',
    `book_brief` varchar(255) NOT NULL COMMENT  '图书简介',
     PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;


DROP TABLE IF EXISTS `user_book`;
CREATE TABLE `user_book`(
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `user_id` bigint(20) NOT NULL COMMENT '用户id',
    `book_id` bigint(20) NOT NULL COMMENT '图书id',
    `is_return` varchar(20) NOT NULL COMMENT '是否归还',
    `start_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '借阅时间',
    `end_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '归还时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `id_user` (`user_id`) USING BTREE,
    UNIQUE KEY `id_book` (`book_id`) USING BTREE
) ENGINE = InnoDB DEFAULT  CHARSET = utf8mb4 COLLATE =utf8mb4_general_ci;

视图结果:
在这里插入图片描述

原因分析

为什么会有这种效果呢,原来是共享字段之间的隐式关系。

什么是共享字段?

  1. 字段名一致,如果两个或者多个表中存在具有相同命名的字段,则这些字段可以用于关联
  2. 数据类型和约束一致性:通过观察观察字段的数据类型和约束,如果两个或者多个表中的字段具有相同的数据类型和约束,可能用于关联的共享字段
  3. 业务逻辑一致性:根据具体的业务需求和数据模型设计,观察哪些字段在不同的表之间扮演着关联角色。例如,根据图书借阅场景,用户ID和图书ID通常会在关联表中用于关联用户和图书

在示例中,user_book 表中的 user_id 字段和 book_id 字段分别与 user 表和 book 表中的主键 id 相对应。这样,这两个字段就成为了隐含的关联字段,用于建立 user_book 表和父表之间的关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础-多线程JUC-线程池和自定义线程池

1. 线程池 主要核心原理 不推荐Executors创建没有上线的线程池,建议使用自定义的线程池; Java工具类创建线程池; public class demo16 {public static void main(String[] args) {/*** public static ExecutorService newCachedThreadPoo1() …

一款打击感超强的动作游戏《流星蝴蝶剑》

文章目录 玩法介绍1.介绍2.按键操作3.流星蝴蝶剑各种武器招式秘籍 游戏优点游戏缺点游戏停服的原因游戏后续发展常见的的游戏道具1.四种水晶2.四种包子3.多种属性加成道具 《流星蝴蝶剑》的游戏打击感分析1.什么是游戏打击感2.影响游戏打击感的经典要素3.几个体现打击感的镜头动…

国产自研GPT大语言模型|实在智能TARS

目录 前言 TARS名字由来 实在智能 TARS 应用演示 大模型RPA 大模型IDP 最后 前言 Chat-GPT问世以来,国内外知名公司纷纷加入到大模型的研发行列中,2023年无疑成为大模型发展元年。百度、谷歌等科技巨头百家争鸣,新锐科技公司也不甘…

成为自动化测试的7种技能

目录 前言: 1.自动化测试员技能——编程语言 设计框架 2.自动化测试员技能–出色的手动测试技能 人眼就是一切 某些测试只能手动完成 自动化测试可能包含漏洞 某些方案不适用于自动化测试 您对整个问题都有个想法 3.自动化测试员技能–自动化工具专业知识…

【教你做直播产品】线上K歌软件开发技术选型

摘要 在线K歌软件的开发有许多技术难点,需考虑到音频录制和处理、实时音频传输和同步、音频压缩和解压缩、设备兼容性问题等技术难点外,此外,开发者还应关注音乐版权问题,确保开发的应用合规合法。 前言 前面写了几期关于直播 …

中小企业如何应用大数据?_光点科技

随着信息技术的快速发展,大数据已经成为当今商业世界中的热门话题。大数据不仅对大型企业有益,对中小企业同样具有巨大潜力。然而,很多中小企业对于如何应用大数据感到困惑。 首先,中小企业可以利用大数据来优化营销策略。大数据分…

AidLux+无人机——AI电力巡检新模式

近年来,航空、遥感、以及信息处理等技术迅速发展,使得无人机在电力巡检上逐渐应用开来。 无人机电力巡检作为新型电力巡检方式,不受地形地貌限制、便携易用且高效,能够极大程度降低传统巡检工作的风险和失误,提升工作…

<QT开发> QT开发工具-之-QT应用程序打包

<QT开发> QT开发工具-之-QT应用程序打包 一 前言 笔者为什么会写这篇文章呢?这是因为,笔者使用windows QT开发了一个测试工具。目的是通过TCP/IP测试其它应用程序。首先这个QT程序是笔者自己开发的,所以笔者的电脑当…

如何写出一份还OK的英文简历

大家好,其实对于SAP这个全球超过80%都会用的ERP软件,对于我们顾问而言,永远都有成长空间。 当你技术达到一定水平的时候,你会发现受语言限制更多。 比如国内项目做得差不多了,想尝试国外global项目;或是遇…

关于使用Ajax技术无法获取本地数据的问题

今天在学习Ajax技术时,在按照课程学习的过程中,发现在浏览器中无法获取显示本地文件中的数据。在网上搜索一番后发现,是因为直接在默认浏览器中直接打开HTML文件,而不是通过web服务器访问,会出现跨域请求会受到浏览器的…

C-Free 的最佳替代品 初学者的C/C++ IDE利器 小熊猫C++

IDE选择之困 对于一个C/C的初学者来说,一个好用的IDE会让你快速入门、爱上编程;相反,一个难用的IDE则会让人还没入门就放弃。不要跟我说vimmake,初学者哪里懂这个,windows都不一定玩的溜,玩linux会让人更…

《水经注地图服务》发布的影像数据在水经微图中调用

古人云:“工欲善其事,必先利其器。”意思是说:工匠想要使他的工作做好,一定要先让工具锋利,比如要做好一件事,准备工作非常重要。 语出《论语卫灵公》:子贡问为仁。子曰:“工欲善其…

【AJAX】使用JQ发送AJAX发送请求

首先要引入JQ <script crossorigin"anonymous" src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>服务端代码 // 服务端准备 // 1、引入express const express require(express); // 2、创建应用对象 const app expr…

SpringBoot+JWT实现单点登录解决方案

一、什么是单点登录? 单点登录是一种统一认证和授权机制&#xff0c;指在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的系统&#xff0c;不需要重新登录验证。 单点登录一般用于互相授信的系统&#xff0c;实现单一位置登录&#xff0c;其他信任的…

【nav_msgs/Path.h发布路径】

#include <nav_msgs/Path.h> 是一个 ROS (Robot Operating System) 中的包含文件。它是用于包含 nav_msgs/Path 消息类型的头文件,这是一个标准的 ROS 消息类型。 nav_msgs/Path 消息类型常用于机器人导航系统中,以表示路径。这种路径通常由一系列的位置点组成,这些点…

Spirngboot读取html文件到字符串

一、引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.5</version></dependency> 二、直接读取返回 public String getContent(String path){try {File file ResourceUt…

如何限定IP访问服务器端口(只允许指定IP访问数据库服务器的1433端口)

1、找到“控制面板”->“Windows防火墙”->“高级设置”->“入站规则” 2、选中左侧的"入站规则"&#xff0c;并点击右侧的"新建规则" 3、选择"端口"&#xff0c;点击"下一步" 4、输入要限定访问的端口&#xff0c;这里是要…

瑞吉外卖-Day02

title: 瑞吉外卖-Day02 abbrlink: ‘1’ date: 2023-04-1 19:30:00 瑞吉外卖-Day02 课程内容 完善登录功能新增员工员工信息分页查询启用/禁用员工账号编辑员工信息 分析前端页面效果是如何实现的 为什么点击左边 右边会根着变化 [外链图片转存失败,源站可能有防盗链机制…

【js】JS实现根据两点经纬度位置获取距离:

文章目录 一、JS实现根据两点经纬度位置获取距离&#xff1a;二、效果&#xff1a; 一、JS实现根据两点经纬度位置获取距离&#xff1a; // 根据经纬度计算距离&#xff0c;参数分别为第一点的纬度&#xff0c;经度&#xff1b;第二点的纬度&#xff0c;经度 function getDist…

环二肽试剂128857-77-2,Cyclo(-Gly-Arg-Gly-Asp-Ser-Pro-Ala),定制含D型与L型,S与R构型的氨基酸

规格单位&#xff1a;g |货期&#xff1a;按照具体的库存进行提供 | 纯度&#xff1a;95%试剂描述&#xff1a; 西安凯新生物科技有限公司供应的​Cyclo(-Gly-Arg-Gly-Asp-Ser-Pro-Ala)&#xff08;CAS号&#xff1a;128857-77-2&#xff09;环二肽试剂&#xff0c;是由两…