当前位置: 首页 > news >正文

找谁做网站网站建设与运营培训班

找谁做网站,网站建设与运营培训班,施工企业平台,番禺做网站设计背景: 模拟一个简单版计算器,两位操作数运算,运算符号包括-*/,目前是把这些数据存储到了MySQL数据库中,库为cal,表名为success,如图: CREATE TABLE success (id INT AUTO_INCREMEN…

背景:

模拟一个简单版计算器,两位操作数运算,运算符号包括+-*/,目前是把这些数据存储到了MySQL数据库中,库为cal,表名为success,如图:

CREATE TABLE success (id INT AUTO_INCREMENT PRIMARY KEY,nums VARCHAR(255) NOT NULL COMMENT '用户输入的运算表达式,如1+1',result DOUBLE NOT NULL COMMENT '运算结果',spend_time BIGINT NOT NULL COMMENT '计算耗时(毫秒)',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

输入关键字history可以进行查询操作:

 

问题分析:

  1. 这种“22+78”的nums存储是非结构化的 ,存储的是表达式字符串
  2. 还有耗时这一块,应该直接存储7即可,不要存一串描述文字
  3. 不符合三范式(3NF),表达式和结果之间存在函数依赖(result = function(nums))
  4. 扩展性差

改进方案:

使用数据库三范式设计,步骤如下:

一、首先先理解三大范式:

  1. 第一范式(1NF):每个字段都是不可分割的原子值

  2. 第二范式(2NF):满足1NF,且非主键字段完全依赖主键(针对联合主键)

  3. 第三范式(3NF):满足2NF,且消除传递依赖(非主键字段间不能有依赖)

二、从需求出发设计:

分析需求:
  • 需要记录的有:id,操作数1,运算符,操作数2,结果,耗时,创建时间

  • 主实体

    • 计算记录(cal):id、耗时、结果、创建时间

  • 子实体

    • 操作数(operand):值、位置(即第几个数)

    • 运算符(operator):符号类型(比如+-*/)

三、表设计:

场景模拟:

现在要保存「3 + 5」的运算记录:

  1. 先创建「计算记录」主表条目(生成cal_id=1)

  2. 接着要在operands表插入两条记录:

    • (cal_id=1, position=1, value=3)

    • (cal_id=1, position=2, value=5)

  3. 最后在operators表插入:

    • (cal_id=1, operator='+')

总结:三表设计方案,分别是cal、operands、operators三张表

四、三表设计(完全范式化)代码:

-- 运算记录主表
CREATE TABLE cal (id INT AUTO_INCREMENT PRIMARY KEY,spend_time BIGINT NOT NULL COMMENT '计算耗时(毫秒)',result DOUBLE NOT NULL COMMENT '计算结果',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 运算数表
CREATE TABLE operands (id INT AUTO_INCREMENT PRIMARY KEY,cal_id INT NOT NULL COMMENT '关联计算记录',position INT NOT NULL COMMENT '操作数位置(1,2,...)',param DOUBLE NOT NULL COMMENT '操作数值',FOREIGN KEY (cal_id) REFERENCES cal(id)
);-- 运算符表
CREATE TABLE operators (id INT AUTO_INCREMENT PRIMARY KEY,cal_id INT NOT NULL COMMENT '关联计算记录',operator CHAR(2) NOT NULL COMMENT '运算符,如+,-,*,/',FOREIGN KEY (cal_id) REFERENCES cal(id)
);

界面化展示三张表结构:

 

 

为什么满足三范式?
  1. 满足1NF:所有字段都是原子值

  2. 满足2NF

    • 单列主键不存在部分依赖问题

    • 外键关系完整

  3. 满足3NF

    • 消除了传递依赖(如原设计result依赖nums)

    • 各表非主键字段只依赖主键

但是这种三表设计复杂度比较高(需要多表join查询),但同时灵活性也很高(支持任意数量操作数)

这里我们虽然只是一个简单计算器没必要这么麻烦,但是主要是为了学习三范式数据库表设计,所以还是用三表设计!配合下面的时序图来理解三张表的关系!

修改之后: 

注意细节:

cal表的created_at:


下一篇再讲讲三表查询SQL怎么写!^_^

http://www.dtcms.com/a/618096.html

相关文章:

  • 智能制造与工业4.0:5G与物联网的深度融合
  • GSV1201S(2201S)#ACP@支持 DisplayPort 1.2 到 HDMI 1.4 转换且集成嵌入式 MCU
  • Linux SPI 驱动实验
  • 【开题答辩全过程】以 基于Java的水族馆销售与经营管理系统的设计与实现为例,包含答辩的问题和答案
  • 网站响应是什么问题吗最近国际时事
  • 从拟南芥到线虫:我的生物信息学多组学实操笔记
  • 指尖革命!2025输入法生态位深度测评:智能,远不止于输入!
  • 如何在Windows系统上安装和配置Node.js及Node版本管理器(nvm)
  • 网站开发 保证书旅游网站制作分析
  • Docker实战深度解析:从Nginx部署到私有镜像仓库管理
  • 读书笔记|算法的破坏性影响
  • 网站制作需要平台企业网站的切片怎么做
  • 数据结构与算法工程笔记:决策树/sstable与性能优化
  • Linux 服务器配置 rootless docker Quick Start
  • LTE/5G L3 RRC层技术介绍
  • C语言进阶知识--文件操作
  • 网站建设需要哪些资料扶贫网站建设方案
  • C++标准模板库(STL)——list的模拟实现
  • 幽冥大陆(二十二)dark语言智慧农业电子秤读取——东方仙盟炼气期
  • 5.驱动led灯
  • RTL8367RB的国产P2P替代方案用JL6107-PC的可行性及实现方法
  • <MySQL——L1>
  • 有没有网站做字体变形自学软装设计该怎么入手
  • 做网站咸阳贵州省建设厅城乡建设网站
  • 分布式监控Skywalking安装及使用教程(保姆级教程)
  • 可信数据空间的分布式数字凭证和分布式数字身份
  • 分布式WEB应用中会话管理的变迁之路
  • 徐州市建设局招投标网站河南网站建站推广
  • 第44节:物理引擎进阶:Bullet.js集成与高级物理模拟
  • C++ Qt程序限制多开