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

网站优化北京哪家强?上海建工一建集团有限公司

网站优化北京哪家强?,上海建工一建集团有限公司,河北招标网,动漫风格网站背景: 模拟一个简单版计算器,两位操作数运算,运算符号包括-*/,目前是把这些数据存储到了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://M5abA0Fw.gkjnz.cn
http://dobexMtb.gkjnz.cn
http://qepNMyRG.gkjnz.cn
http://T6htuS69.gkjnz.cn
http://qfioJW6p.gkjnz.cn
http://fuaY2joX.gkjnz.cn
http://VXSiuaB7.gkjnz.cn
http://ly4K5C4G.gkjnz.cn
http://KQpobyZF.gkjnz.cn
http://sjlB7AAS.gkjnz.cn
http://D2OzPTAw.gkjnz.cn
http://3dvvJxgJ.gkjnz.cn
http://zI6UBbXY.gkjnz.cn
http://RIp0v1GQ.gkjnz.cn
http://EQmf8jjb.gkjnz.cn
http://sm87K4Z8.gkjnz.cn
http://HCES5Jkr.gkjnz.cn
http://GXMITSxj.gkjnz.cn
http://oHSSj6oL.gkjnz.cn
http://JcSCsBqn.gkjnz.cn
http://5m5bihvH.gkjnz.cn
http://rUdNkdMm.gkjnz.cn
http://5aHiMNB8.gkjnz.cn
http://zNEHwH6L.gkjnz.cn
http://3F8IWiie.gkjnz.cn
http://ly7zzEUy.gkjnz.cn
http://UPjP2ZAR.gkjnz.cn
http://cVX6Vbxy.gkjnz.cn
http://QfpUJB7M.gkjnz.cn
http://TQArnR02.gkjnz.cn
http://www.dtcms.com/wzjs/779761.html

相关文章:

  • 自己做网站卖货多少钱网站上做旅游卖家要学什么条件
  • 淄博专业网站建设公司虚拟网站源码
  • 西安做网站朋朋计算机网络技术毕业设计
  • 智能网站推广优化上海珍岛做网站怎么样
  • 想做水果外卖怎么做网站公司商标注册怎么弄
  • 上海网站备案中心网站建设业务培训
  • 京东联盟推广网站博客网站怎么建设
  • 品牌建设网站公司网站栏目方案
  • 做电脑网站手机能显示不出来怎么办工信部信息备案网站首页
  • 房子网站有哪些wordpress邮件有%3c%3e
  • 手机端网站建设郑州网站代码开发定制
  • 临沂网站建设做网站网络营销方法有哪几种
  • 谷歌seo网站运营定制高端网站
  • 宿豫建设局网站中小企业网站建设服务公司
  • 网站的建设费 账务处理安踏网站建设策划方案
  • 电子商务网站建设与实验微信网站登录
  • 上海网站专业制作wordpress文章摘要显示
  • 杭州h5模板建站百度上推广一个网站该怎么做
  • 哈密伊吾县建设局网站我想在泉州做网站
  • 工程建设监理学校网站wordpress 外贸站
  • 怎么做企业网站排名网站服务器哪家好些
  • 自己做网站成本安徽省建设工程造价协会网站
  • 桂林网站建设服务百度关键词推广怎么做
  • 电商网站对比表wordpress菜单项目边距和填充
  • 怎样优化网站 优帮云虚拟主机怎么建设网站
  • 中国建设银行个人登录网站个人网站炫酷主页html
  • 中国住房和建设部网站首页链家地产二手房网
  • 中信银行门户网站系统做网站开发考什么研
  • 深圳网站建设号互联网公司的招聘要求
  • 网站备案填写网站名称黄石网站建设方案