数据库——书籍+内容0.1版本

背景:将一本书,存入我们的数据库中,并可以查出来

采用:第三范式(3NF)设计模式

设计数据库模板
  1. 第一范式(1NF):确保表的每一列都是不可分割的原子数据项。

  2. 第二范式(2NF):在满足第一范式的基础上,非主键列必须完全依赖于整个主键,而不是主键的一部分。

  3. 第三范式(3NF):在满足第二范式的基础上,非主键列之间不存在传递依赖关系,即一个非主键列不能依赖于另一个非主键列。

我们通过迭代,一步一步完成到第三范式

第一步:分析书籍是由什么组成的,这样我们才能更好的完成第一范式。

身边有书就拿起书,没书咱们就感谢前辈的努力(crrl+左键)PS:文字作者的休闲时刻奇妙幻想

第一眼,我们可以看见一个叫封面

第二眼,我们可以看见一个叫书名

第三眼,我们可以看见作者的名字

第四眼,侧边有一个出版社(实体书)

第五眼,侧边话还有一个时间

第六眼,书的背面有大佬点评(实体书)

第七眼,我们可以看见字数总和

第八眼,我们可以看见浏览量

第一层组成:封面,书名,作者,出版社,时间,点评,字数,浏览量(我拿三本书看到的信息)

翻开一页,利用上面的那个网站作为例子的,直接看下面就好(点个赞!)

又来了,

第一眼,我们可以看见作者的介绍(目前不涉及)

第二眼,作者写这本书的目的,也就是前言

第二层组成:介绍,前言

再翻几页,我们发现就是那密密麻麻的章节了,没有的按开始提供的网页进行参考

第一眼,我们可以看见加粗的h1标签的章节(凭感觉应该可以看出这个明细是h1打印出来的)

第二眼,每一篇的小标题

第三眼,页数

第三层组成:总章节,每一篇的小标题

第四层就是我们最熟悉的小标题+内容了 

这样我们的第一步就完成了,将四层组合一如下

第一层组成:封面,书名,作者,出版社,时间,点评,字数,浏览量

第二层组成:介绍,前言

第三层组成:总章节,每一篇的小标题

第四层组成:小标题,内容

第二步:在第一步的基础上,完成1nf的分析,不可分割的原子数据项。

第一层:封面,书名,作者,出版社,时间,点评,字数,浏览量,已经完成条件不可分割

第二层:介绍,前言,同上

第三层,第四层一样

第一层1nf代码如下,

CREATE TABLE ak47 (  id INT AUTO_INCREMENT PRIMARY KEY,  cover VARCHAR(255) NOT NULL COMMENT '封面图片路径',  title VARCHAR(255) NOT NULL COMMENT '书名',  author VARCHAR(255) NOT NULL COMMENT '作者',  publisher VARCHAR(255) NOT NULL COMMENT '出版社',  publish_date DATE NOT NULL COMMENT '出版时间',  review TEXT COMMENT '点评',  word_count INT NOT NULL COMMENT '字数',  view_count INT DEFAULT 0 COMMENT '浏览量',  introduction TEXT COMMENT '介绍',  preface TEXT COMMENT '前言',  chapter_number INT COMMENT '章节序号',  subtitle VARCHAR(255) COMMENT '小标题',  content TEXT COMMENT '内容'  
);

第三步:将其化为2nf

在满足第一范式的基础上,非主键列必须完全依赖于整个主键,而不是主键的一部分。

分析一下这句话,核心是必须完全依赖于整个主键

拆出来:必须完全整个主键

整个主键:一整个表只能有一个主键,那么前面这句一整个表好理解,主键是什么呢?

主键:具有代表整个表的关键词(编号,身份证,表单的身份证)

一山不容二虎,除非他是子表

根据这个内容,我们的1nf范式,去进行一个拆解

我们可以分为三大类:第一类:书籍基本信息

                                    第二类:书籍章节

                                    第三类:书籍评价

这一个表就被拆成如下:

第一类:(主键)书籍编号,封面,书名,作者,出版社,出版时间

第二类:书籍编号(父表),书籍章节(主键),章节标题,章节内容,浏览量,字数

第三类:书籍编号(父表),评论ID(主键),评论内容,评论时间

为什么这么拆:封面,书名,作者,出版社,出版时间这些只能通过书籍编号获取,非主键列必须完全依赖于整个主键,

完全依赖,就是指,书名只能通过一个东西去获得,不能通过其他的去得到

第一个原则:重复性,当一个元素能重复时,他就不具有做主键的代表性

所以在选择主键的时候,考虑他可能重复吗?这里我们又可以进行拆一次

第一类:(主键)书籍编号,封面,书名,出版社,出版时间

第二类:作者(主键),作者名字,作者账号,作者简介,作品(父表)

第三类:书籍编号(父表),书籍章节(主键),章节标题,章节内容,浏览量,字数

第四类:书籍编号(父表),评论ID(主键),评论内容,评论时间

这时,作品又可以分类讨论了:一个本书没问题,两本书难不成像文章一样吗,

用《第一本》,《第二本吗》,放在同一个列中吗,很显然不可能

这样看着是不是怪怪的

再分就成五类了

第一类作者信息:作者账号(主键),作者名字,作者简介

第二类书籍信息:(主键)书籍编号,封面,书名,出版社,出版时间

第三类章节信息:书籍编号(父表),书籍章节(主键),章节标题,章节内容,浏览量,字数

第四类评论信息:书籍编号(父表),评论ID(主键),评论内容,评论时间

第五类作者作品:作者编号(父表),书籍编号(父表)

为什么第五类这么拆,我们可以根据查询语句,直接查出父表的内容,说人话就是

父表的内容可以直接被查出来,这样设计就有一点MVC模式了

类拆好了,那么该实现代码了

CREATE TABLE authors (  -- 作者账号,作为主键,具有唯一性  author_account VARCHAR(255) PRIMARY KEY UNIQUE,  -- 作者名字  author_name VARCHAR(255) NOT NULL,  -- 作者简介  author_bio TEXT  
);

第二类

CREATE TABLE books (  -- 书籍编号,作为主键,具有唯一性  book_id INT PRIMARY KEY UNIQUE,  -- 封面  cover VARCHAR(255),  -- 书名  title VARCHAR(255) NOT NULL,  -- 出版社  publisher VARCHAR(255),  -- 出版时间  publication_date DATE  
);

第三大类

CREATE TABLE chapters (  -- 书籍编号,作为父表引用书籍信息表  book_id INT,  -- 书籍章节编号,与书籍编号组合作为复合主键,具有唯一性  chapter_number INT,  -- 章节标题  chapter_title VARCHAR(255) NOT NULL,  -- 章节内容  chapter_content TEXT,  -- 浏览量  view_count INT DEFAULT 0,  -- 字数  word_count INT,  -- 设置复合主键  PRIMARY KEY (book_id, chapter_number),  -- 设置父表约束  FOREIGN KEY (book_id) REFERENCES books(book_id)  
);

第四类:

CREATE TABLE comments (  -- 评论ID,作为主键,具有唯一性  comment_id INT PRIMARY KEY UNIQUE,  -- 书籍编号,作为父表引用书籍信息表  book_id INT,  -- 评论内容  comment_content TEXT NOT NULL,  -- 评论时间,默认为当前时间戳  comment_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 设置父表约束  FOREIGN KEY (book_id) REFERENCES books(book_id)  
);

第五类

CREATE TABLE author_works (  -- 作者账号,作为父表引用作者信息表,具有唯一性(与书籍编号组合)  author_account VARCHAR(255),  -- 书籍编号,作为父表引用书籍信息表,具有唯一性(与作者账号组合)  book_id INT,  -- 设置复合主键,确保作者与书籍的关联唯一  PRIMARY KEY (author_account, book_id),  -- 设置父表约束  FOREIGN KEY (author_account) REFERENCES authors(author_account),  FOREIGN KEY (book_id) REFERENCES books(book_id)  
);

总结2nf的一个原则,不可重复性,当出现了重复性,那么我们就要将其分出来

进入第四步,将其化为3nf

第三范式(3NF):在满足第二范式的基础上,非主键列之间不存在传递依赖关系,即一个非主键列不能依赖于另一个非主键列。

说人话就是,除了主键和父键以外的列,他们是独立存在的,互不影响,就和国家与国家一样,

第一类作者信息:作者账号(主键),作者名字,作者简介

第二类书籍信息:(主键)书籍编号,封面,书名,出版社,出版时间

第三类章节信息:书籍编号(父表),书籍章节(主键),章节标题,章节内容,浏览量,字数

第四类评论信息:书籍编号(父表),评论ID(主键),评论内容,评论时间

第五类作者作品:作者编号(父表),书籍编号(父表)

来来看看父表和主键之外的内容有没有联系

能通过作者名字去确定一个作者的简介吗?很显然不能,因为名字可重复,但是账号不可重复

除非你把账号和作者的名字改一下

A和B之间没有直接的关系,独立,互不影响,但是硬要深挖他们就是属于书的一部分

总结一下:三段范式,是属于叠加态,简称父子关系,而他们的父亲

具体关系如下,1nf是父,2nf是儿,3nf就是孙子

每一代都继承了父代的优势

1nf是原子性,即本质性

2nf是具有原子性,诞生了不可重复性

3nf是具有原子性,不可重复性,独立互不影响性

第一步:拆解,拆解成1

例子:12,就拆成12个1

第二步:确定唯一主键和父键,如果有需求可以再来一个义父键

例子:A,B,C

A是父键,B是主键,C是列

他们直接的联系就是,A是连接B的,B是用来连接C的

第三步:看除主键父键以外的内容,是否是独立互不影响性

0.1版本,2024/3/16数据库3nf范式模板

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

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

相关文章

软件测试-------Web(性能测试 / 界面测试 / 兼容性测试 / 安全性测试)

Web(性能测试 / 界面测试 / 兼容性测试 / 安全性测试) 一、Web性能测试:(压力测试、负载测试、连接速度测试)1、压力测试:      并发测试 (如500人同时登录邮箱) 2、负载测试…

上位机图像处理和嵌入式模块部署(qmacvisual结束判断)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在qmacvisual软件当中,这个判断结束很容易会给大家造成误会,因为它会让大家认为,这和是判断语句一起使用的。但…

PaaS家族的中坚力量——aPaaS

aPaaS是什么?接下来无雀科技为大家介绍一下。aPaaS作为一种先进的云服务模式,为用户提供了无缝的应用程序和部署环境。以SDK、API以及构建的组件为基础,通过零代码或低代码的方式大大地降低了软件开发的技术门槛,使得业务人员不需…

智慧能源管理系统在大学校园的应用-安科瑞 蒋静

1 背景 为贯彻落实《中共中央国务院关于完整准确全面贯彻新发展理念做好碳达峰碳中和工作的意见》和《国务院关于印发2030年前碳达峰行动方案的通知》要求,把绿色低碳发展纳入国民教育体系。 2 传统模式的痛点 传统项目模式下的系统方案缺乏整体的能源监测和管控…

信息系统项目管理(第四版)(高级项目管理)考试重点整理 第14章 项目沟通管理(四)

博主2023年11月通过了信息系统项目管理的考试,考试过程中发现考试的内容全部是教材中的内容,非常符合我学习的思路,因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家,希望更多的人能够通过考试&a…

Java面试题合集-史上最全

3月4月又到了一年一度的跳槽黄金期,无论几年经验,也无论技术能力如何,跳槽前都离不开面试准备,其中刷面试题是重中之重。 刷面试题的时候一大痛点就是太分散了,需要自己根据知识点一项一项的去搜,容易遗漏…

MySQL语法分类 DQL(5)分组查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

全网最详细的自动化测试(Jenkins 篇)

学习 Jenkins 自动化测试的系列文章 Robot Framework 概念Robot Framework 安装Pycharm Robot Framework 环境搭建Robot Framework 介绍Jenkins 自动化测试 1. Robot Framework 概念 Robot Framework是一个基于Python的,可扩展的关键字驱动的自动化测试框架。 …

git:码云仓库提交以及Spring项目创建

git:码云仓库提交 1 前言 码云访问稳定性优于github,首先准备好码云的账户: 官网下载GIT,打开git bash: 查看当前用户的所有GIT仓库,需要查看全局的配置信息,使用如下命令: git …

力扣L13--- 409.最长回文串(JAVA版)-2024年3月1日

1.题目描述 2.知识点 注1:向下取整是将一个数值向下舍入到最接近的整数,但不超过这个数值的整数。具体规则如下: 对于正数,向下取整后得到的整数是不大于原数值的最大整数; 对于负数,向下取整后得到的整数…

深入浅出 Spring:核心概念和基本用法详解

个人主页:17_Kevin-CSDN博客 收录专栏;《Java》 一、引言 在 Java 企业级应用开发中,Spring 框架已经成为了事实上的标准。它提供了一种轻量级的解决方案,使得开发者能够更轻松地构建灵活、可扩展的应用程序。在本文中&#xff0c…

基于springboot+vue实现艺术水平考级报名系统【项目源码+论文说明】计算机毕业设计

基于springbootvue实现艺术水平考级报名系统演示 摘要 本次毕业设计基于SpringBoot框架开发了一款艺术水平考级报名管理系统。该系统为考生提供了线上报名、准考证管理等核心功能,并为系统管理员提供了在线发布考试信息、对报名考生进行审核等管理功能。通过该系统…

每日OJ题_简单多问题dp⑥_力扣714. 买卖股票的最佳时机含手续费

目录 力扣714. 买卖股票的最佳时机含手续费 状态机分析 解析代码 力扣714. 买卖股票的最佳时机含手续费 714. 买卖股票的最佳时机含手续费 难度 中等 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续…

ffmpeg6.0从demux_decode.c源码探索解封装流程

前言 在播放器的播放视频、音视频媒体文件的推流等实际应用中,解封装(demux)这个操作是不可避免的,也是最基础的操作。 拿播放器播放MP4来说,如果想实现播放器视频画面的播放和音频声音的播放都需要经过这个解封装的步骤。因为MP4是一种媒体文件格式,是一种封装格式,M…

快速高效地数据分析处理:QtiPlot for Mac中文直装版 兼容M

QtiPlot 是一个用于数据分析和可视化的跨平台科学应用程序。由于其多语言支持,QtiPlot 被积极用于世界各地学术机构的教学。许多研究科学家信任 QtiPlot 来分析他们的数据并发布他们的工作结果。来自各个科学领域和行业的数千名注册用户已经选择了 QtiPlot 来帮助他…

一文全面了解向量数据库

1. 什么是向量数据库?** 首先,我们需要理解什么是向量? 向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“…

C/C++火柴棍等式

有n根(n<24)火柴棍&#xff0c;你可以拼出多少个形如“ABC"的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零&#xff0c;则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 依次需要用到的火柴棍数目为6 2 5 5 4 5 6 3 7 6 。 如果是初学者可能会这么写。 …

数据结构:基于数组实现简单的数据缓存区(简单队列)

1 前言 在我们使用CAN或者以太网调试时&#xff0c;经常需要缓存最近n次收到的数据&#xff0c;以便于我们对数据进行分析。 实现这一想法我们很容易就会想到队列&#xff0c;队列就是一种先进先出的数据结构&#xff0c;之前在《数据结构&#xff1a;基于数组的环形队列&…

最新最全智能科学与技术专业毕业设计选题精华汇总-持续更新中

文章目录 0 简介1 如何选题2 最新智能科学与技术毕设选题3 最后 0 简介 Hi&#xff0c;大家好&#xff0c;随着毕业季的临近&#xff0c;许多同学开始向学长咨询关于选题和开题的问题。在这里&#xff0c;学长分享一些关于智能科学与技术专业毕业设计选题的内容。 以下为学长…

人大金仓大小写敏感处理

人大金仓安装的时候&#xff0c;不管是否选择大小写敏感&#xff1b;查询的时候加和不加双引号&#xff0c;查询出来的都是小写 针对人大金仓大小写&#xff0c;我们实际引用全是大写的情况&#xff0c;解决方案如下 添加配置&#xff0c;将查询结果全都转成大写 1、本地打开…