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

猜你喜欢

转载自blog.csdn.net/weixin_54174102/article/details/131529344