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

问题描述

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

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 表和父表之间的关系。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物皆可der

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值