彩票网站建设教程/网络营销的三大基础

彩票网站建设教程,网络营销的三大基础,石家庄招聘网最新招聘,龙华网站建设招商在 Oracle 数据库的学习进程中,限制查询与范式三约定是两个极为重要的概念。限制查询帮助我们精准获取特定范围的数据,而范式三约定则为数据库设计提供了科学的指导框架。对于 Java 全栈开发者而言,掌握这些知识不仅有助于高效地从数据库中提…

在 Oracle 数据库的学习进程中,限制查询与范式三约定是两个极为重要的概念。限制查询帮助我们精准获取特定范围的数据,而范式三约定则为数据库设计提供了科学的指导框架。对于 Java 全栈开发者而言,掌握这些知识不仅有助于高效地从数据库中提取数据,更能设计出结构合理、性能优良的数据库,为构建强大的应用系统奠定坚实基础。

目录

一、Oracle 限制查询

(一)与 MySQL 限制查询的对比

(二)伪列的奥秘

(三)限制查询的实际应用

二、范式三约定

(一)范式的重要性

(二)第 1 范式(原子性)

(三)第 2 范式(间接相关性)

(四)第 3 范式(直接相关性)

三.企业工作小技巧


一、Oracle 限制查询

(一)与 MySQL 限制查询的对比

在数据库查询操作中,限制查询是获取部分数据的常用手段。在 MySQL 中,我们使用limit关键字来实现限制查询。而在 Oracle 数据库里,对应的是rownum。理解这两者的差异和rownum的特性,对于在不同数据库环境下进行开发至关重要。

(二)伪列的奥秘

  1. 伪列的概念:伪列并非真实存在于物理表中的列,但它们能为我们提供额外的有用信息。在 Oracle 中,常见的伪列有ROWIDROWNUMSYSDATECURRENT_DATEUSER
    • ROWID代表数据在磁盘中的地址值。通过它,我们可以快速定位到数据在物理存储中的位置,这在一些需要高效访问特定数据块的场景中非常有用。例如,在进行大规模数据迁移时,可以利用ROWID来准确地将数据从一个表移动到另一个表。
    • ROWNUM代表每一行数据的编号。当数据加载到内存中时,数据库会自动为每一行添加对应的行号。这在限制查询和分页操作中扮演着核心角色。
    • SYSDATE代表世界系统时间,CURRENT_DATE代表本地时间(与服务器设置的时区有关),USER则表示当前登录的用户。这些伪列在记录操作时间、跟踪用户行为等方面有着广泛应用。例如,在日志表中记录操作时间时,可以使用SYSDATE;在多用户系统中,根据USER伪列来区分不同用户的操作记录。
  2. 伪列的使用示例
SELECT ROWID, ROWNUM, SYSDATE, CURRENT_DATE, USER, id, EMPLOYEENAME FROM EMPLOYEES;

这条语句将从EMPLOYEES表中查询出员工的idEMPLOYEENAME,同时展示每行数据的ROWIDROWNUM,以及当前的世界系统时间、本地时间和登录用户。

(三)限制查询的实际应用

  1. 获取排名靠前的数据:在许多实际场景中,我们需要获取排名靠前的数据。比如在游戏中,查询战力榜前 200 名、富豪榜前 100 名;在新闻系统中,获取热门新闻前 10 条等。以查询企业职员中工资排名前 3 的职工为例:
SELECT ROWNUM, data.* FROM ( SELECT * FROM EMPLOYEES ORDER BY SALARY DESC ) data WHERE ROWNUM <= 3;

这里先对EMPLOYEES表按照SALARY降序排列,然后在子查询结果中,通过ROWNUM筛选出前 3 条记录。在 Java 全栈开发的企业人事管理系统中,后端开发人员可以使用 JDBC 或相关框架(如 MyBatis)执行此 SQL 语句。将查询结果封装成 Java 对象(如Employee对象,包含员工的各项信息),再通过 RESTful API 传递给前端。前端可以将这些高收入员工信息以表格或卡片形式展示,方便管理层查看。

2. 分页查询:当数据量庞大时,一次性将所有数据展示在页面上既不现实也不高效。此时,分页查询就显得尤为重要。在 Oracle 中,分页查询的通用公式如下:

SELECT * FROM ( SELECT ROWNUM rn, data.* FROM ( -- 此处调整为 自己的SQL语句 select * from 表的表名 where [条件筛选] [order by 排序] [group by 分组] ) data WHERE ROWNUM <= :end_row ) WHERE rn >= :start_row;

例如,我们要对book表进行分页查询,查询未删除(delete_flag = 0)且按出版日期降序排列的书籍,每页显示 5 条数据,查询第 2 页的内容:

SELECT * FROM ( SELECT ROWNUM rn, data.* FROM ( SELECT * FROM book WHERE delete_flag = 0 ORDER BY publish_date DESC ) data WHERE ROWNUM <= 10 ) WHERE rn >= 6;

在这个查询中,最内部的子查询负责查询满足条件的具体数据;中间的子查询通过ROWNUM控制结尾行号,确保只获取前end_row条数据;最外层的子查询则通过rn(即ROWNUM的别名)做起始行号控制,筛选出从start_row开始的行。在 Java 全栈开发的图书管理系统中,前端页面发送分页请求(包含页码和每页数据量参数)到后端。后端接收请求后,根据页码和每页数据量计算出start_rowend_row的值,然后执行上述分页查询。将查询结果返回给前端,前端使用分页组件(如 Element - UI 的分页组件)将数据展示给用户,提升用户体验。

二、范式三约定

(一)范式的重要性

范式是数据库设计的理论体系和框架,如同建筑蓝图对于建筑施工的指导作用。范式三约定为数据库设计提供了明确的规则,遵循这些规则可以设计出结构清晰、数据冗余度低、易于维护和扩展的数据库。在 Java 全栈开发中,合理的数据库设计能够极大地简化后端数据处理逻辑,提升系统性能。

(二)第 1 范式(原子性)

  1. 原子性要求:第 1 范式要求列具有原子性,即列中的数据必须拆分到不能再拆分为止。例如,在一个学生信息表中,最初的设计可能是这样:
    | id | 学生名称 | 年龄 | 家庭地址 |
    |----|----------|------|-----------|
    | 1 |张三 | 22 | 四川省成都市郫都区广州市路 33 号 |
    | 2 | 李四 | 23 | 四川省绵阳市涪城区二龙镇 23 号 |
    | 3 | 王五 | 21 | 广东省广州市天河区 11 号 |
    | 4 | 马六 | 25 | 四川省成都市高新区北京路 23 号 |
    当我们需要统计广州有多少个学生时,这种设计就显得力不从心。因为家庭地址列没有进行原子拆分,无法直接根据地址中的城市信息进行统计。
  2. 改进设计:遵循第 1 范式,将家庭地址列拆分为详细地址,改进后的表结构如下:
    | id | 学生姓名 | 年龄 | 省 | 市 | 区 | 详细地址 |
    |----|----------|------|------|------|------|----------|
    | 1 |张三 | 22 | 广州市路 33 号 |
    | 2 | 李四 | 23 | 二龙镇 23 号 |
    | 3 | 王五 | 21 |  11 号 |
    | 4 | 马六 | 25 | 北京路 23 号 |
    这样的设计使得数据更加结构化,方便进行各种统计和查询操作。在 Java 全栈开发的学生信息管理系统中,后端开发人员可以更轻松地编写 SQL 查询语句来统计不同地区的学生数量。前端也能更方便地根据这些结构化数据进行地址信息的展示和筛选。

(三)第 2 范式(间接相关性)

  1. 相关性原则:在遵循第 1 范式的基础上,第 2 范式要求表中的字段一定要跟主键有一定的相关性。以商品订单表为例,最初的设计可能是:
    | 订单编号 | 商品编号 | 商品名称 | 单价 | 数量 | 客户 | 工作单位 | 联系方式 | 总价 |
    |----------|----------|----------|--------|------|--------|----------|----------|--------|
    | 001 | 001 | 推土机 | 10W | 4 | 张三 | 中铁 1 局 | …… | 40W |
    | 002 | 002 | 挖挖机 | 15W | 3 | 王五 | 艾瑞 | …… | 45W |
    | 003 | 003 | 压路机 | 20W | 2 | 李四 | 中铁 2 局 | …… | 40W |
    | 004 | 001 | 推土机 | 10W | 2 | 马六 | 成都学院 | …… | 20W |
    暂时将订单编号和商品编号视为联合主键。
  2. 表的拆分:仔细分析这个表,我们会发现客户的工作单位和联系方式等信息与订单本身的核心记录(商品购买情况)并非直接相关,而且存在数据冗余。例如,“吴亦凡” 的工作单位和联系方式在每个相关订单中都重复出现。根据第 2 范式,我们将商品订单表拆分为商品订单表和客户表:
    • 客户表:
      | id | 客户名称 | 工作单位 | 联系方式 |
      |----|----------|----------|----------|
      | 1 | 张三 | 中铁 1 局 | …… |
      | 2 | 王五 | 艾瑞 | …… |
      | 3 | 李四 | 中铁 2 局 | …… |
      | 4 | 马六 | 成都学院 | …… |
    • 商品订单表:
      | 订单编号 | 商品编号 | 商品名称 | 单价 | 数量 | 客户外键 | 总价 |
      |----------|----------|----------|--------|------|----------|--------|
      | 001 | 001 | 推土机 | 10W | 4 | 1 | 40W |
      | 002 | 002 | 挖挖机 | 15W | 3 | 2 | 45W |
      | 003 | 003 | 压路机 | 20W | 2 | 3 | 40W |
      | 004 | 001 | 推土机 | 10W | 2 | 4 | 20W |
      这样拆分后,数据的相关性更加清晰,减少了数据冗余。在 Java 全栈开发的电商系统中,后端开发人员可以通过外键关联客户表和商品订单表,方便地获取客户的订单信息以及客户的详细资料。前端在展示订单详情时,可以通过调用后端接口,获取关联的客户信息进行展示,提升用户体验。

(四)第 3 范式(直接相关性)

  1. 直接相关的要求:在遵从第 1、2 范式的基础上,第 3 范式要求表中的字段一定要跟主键有直接相关性,而并非间接相关。继续以商品订单表为例,虽然经过第 2 范式的拆分,已经有了一定的优化,但商品订单表中的商品名称和单价等信息与订单的核心记录(订单编号、商品数量、客户外键等)并非直接相关,因为商品的名称和单价等信息本质上是商品自身的属性,与订单的关联是间接的。
  2. 进一步拆分:因此,根据第 3 范式,我们将商品订单表进一步拆分为商品表和订单表:
    • 商品表:
      | id | 商品名称 | 单价 | 商品描述 |
      |----|----------|--------|----------|
      | 1 | 推土机 | 10W | …… |
      | 2 | 挖挖机 | 15W | …… |
      | 3 | 压路机 | 20W | …… |
    • 订单表:
      | ID | 商品外键 | 数量 | 客户外键 | 总价 |
      |------|----------|------|----------|--------|
      | 001 | 1 | 4 | 1 | 40W |
      | 002 | 2 | 3 | 2 | 45W |
      | 003 | 3 | 2 | 3 | 40W |
      | 004 | 1 | 2 | 4 | 20W |
      经过这样的拆分,每个表的职责更加单一,数据之间的关系更加直接和清晰。在 Java 全栈开发的电商系统中,这种设计使得后端在处理商品管理、订单管理等业务逻辑时更加高效。例如,在更新商品价格时,只需要在商品表中进行操作,而不会影响到订单表的其他数据。前端在展示商品详情和订单详情时,也能通过清晰的表结构和外键关联,准确地获取所需数据进行展示。

三.企业工作小技巧

  1. 数据库设计阶段:在进行数据库设计时,严格遵循范式三约定。在设计表结构前,充分分析业务需求,确定每个表的主键和字段,确保满足原子性、相关性等要求。可以使用数据库建模工具(如 PowerDesigner)来辅助设计,通过图形化的方式展示表与表之间的关系,更直观地检查是否符合范式。在 Java 全栈开发团队中,数据库设计是后端开发的重要环节,前端开发人员也可以参与讨论,从用户体验和数据展示的角度提供建议,确保设计出的数据库既能满足业务需求,又便于前后端的数据交互。
  2. 查询优化阶段:在编写查询语句时,利用ROWNUM进行限制查询和分页查询时,要注意其特性。由于ROWNUM是在查询结果集生成后才分配行号,所以在一些复杂查询中,要合理使用子查询来确保查询结果的准确性。例如,在多表联合查询后进行分页时,要确保先进行表的连接和筛选,再使用ROWNUM进行分页。在 Java 全栈开发中,后端开发人员可以将一些常用的分页查询封装成通用方法,供不同的业务模块调用,提高代码的复用性。同时,前端在发起分页请求时,要对页码和每页数据量进行合理的校验,防止非法参数导致的查询错误。
  3. 数据维护阶段:在数据库运行过程中,随着业务的发展,可能需要对表结构进行调整。此时,要谨慎操作,确保调整后的表结构仍然符合范式三约定。例如,当需要新增字段时,要分析该字段与主键的相关性,避免破坏范式。在 Java 全栈开发中,后端开发人员在进行数据库结构变更时,要及时通知前端开发人员,确保前端页面的数据展示和交互逻辑能够适应数据库的变化。同时,要做好数据备份和迁移工作,防止数据丢失。

通过对 Oracle 限制查询和范式三约定的深入学习,我们掌握了更强大的数据库操作和设计技能。在未来的 Java 全栈开发工作中,这些知识将帮助我们构建出更加高效、稳定和可扩展的应用系统。

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

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

相关文章

[BUUCTF]web--wp(持续更新中)

ps:文章所引用知识点链接&#xff0c;如有侵权&#xff0c;请联系删除 [极客大挑战 2019]EasySQL 题目类型&#xff1a;简单SQL注入 发现是登录页面&#xff0c;用万能登录方法测试&#xff0c;两种语句均能解出flag [极客大挑战 2019]Havefun 题目类型&#xff1a;代码审计…

MySQL数据库的数据类型

1.设置MySQL服务器的默认储存引擎 set default_storage_engineMYISAM2. 数值类型 整数类型 TINYINT&#xff1a;1字节&#xff0c;范围&#xff1a;-128~127&#xff08;有符号&#xff09;&#xff0c;0~255&#xff08;无符号&#xff09;。适用于状态码、布尔值&#xff08…

探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(二)

文章目录 2.3.3 极化编码巴氏参数与信道可靠性比特混合生成矩阵编码举例 2.3.4 极化译码最小单元译码串行抵消译码&#xff08;SC译码&#xff09;算法SCL译码算法 2.3.5 总结**Polar 码的优势****Polar 码的主要问题****Polar 码的应用前景** 2.3.6 **参考文档** 本博客为系列…

VirtualBox虚拟机转VM虚拟机

前言&#xff1a;部分靶机只适用于VirtualBox&#xff0c;VM打不开VirtualBox的文件&#xff0c;所以需要进行转换 前置条件&#xff1a;本机已经下载VM和VirtualBox 第一步&#xff1a;文件转换 找到VirtualBox.exe所在位置&#xff0c;启动cmd窗口 文件转换的命令&#xf…

DeepSeek API使用及私有化部署

DeepSeek 大模型概述 DeepSeek 是一款参数量高达 671B 的大语言模型&#xff0c;其模型参数文件规模庞大&#xff0c;即使是经过优化的版本&#xff0c;参数文件也有数十 GB。这种庞大的参数量赋予了 DeepSeek 强大的自然语言处理能力&#xff0c;使其能够处理复杂的语言任务&…

动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南

目录 一、典型案例&#xff1a;系统发布后的GC雪崩事件 &#xff08;一&#xff09;故障现象 1. 刚刚启动时 GC 次数较多 2. 堆内存锯齿状波动 3. GC日志特征&#xff1a;Allocation Failure &#xff08;二&#xff09;问题定位 二、原理深度解析&#xff1a;JVM内存弹…

IDEA 使用codeGPT+deepseek

一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行&#xff0c;您需要在操作系统中预先配置 Python 环境。具体来说&#xff0c;您需要安装 Python 3.8 或更高…

vue These dependencies were not found

These dependencies were not found: * vxe-table in ./src/main.js * vxe-table/lib/style.css in ./src/main.js To install them, you can run: npm install --save vxe-table vxe-table/lib/style.css 解决&#xff1a; nodejs执行以下语句 npm install --save vxe-t…

【三.大模型实战应用篇】【4.智能学员辅导系统:docx转PDF的自动化流程】

去年团队庆功宴上,我司CTO端着酒杯过来:“老王啊,咱们现在文档解析做得挺溜了,但老师们总抱怨下载的作业格式乱码…” 我看了眼手机里凌晨三点收到的崩溃警报,把杯里的可乐一饮而尽——得,新的副本又开了。 一、为什么PDF转换比想象中难十倍? 某次用户调研中,数学教研…

安卓基础组件Looper - 03 java层面的剖析

文章目录 workflow工作线程 准备Looper创建LooperActivity主线程其他情况 Looper.prepare()大体流程java申请Loopernew LooperMessageQueue初始化 nativejniNativeMessageQueue Looper.loop()大体流程java获取Looper获取msg&#xff0c;处理msgLooper.loop()Looper.loopOnce &a…

【计算机网络】考研复试高频知识点总结

文章目录 一、基础概念1、计算机⽹络的定义2、计算机⽹络的目标3、计算机⽹络的组成4、计算机⽹络的分类5、计算机⽹络的拓扑结构6、计算机⽹络的协议7、计算机⽹络的分层结构8、OSI 参考模型9、TCP/IP 参考模型10、五层协议体系结构 二、物理层1、物理层的功能2、传输媒体3、 …

健康医疗大数据——医疗影像

一、 项目概述 1.1 项目概述 1.2 项目框架 1.3 项目环境 1.4 项目需求 二、项目调试与运行 2.1需求分析 2.2具体实现 三、项目总结 项目概述 项目概述 本项目旨在应用大数据技术于医疗影像领域&#xff0c;通过实训培养团队成员对医疗大数据处理和分析的实际…

3.1、密码学基础

目录 密码学概念与法律密码安全分析密码体制分类 - 私钥密码/对称密码体制密码体制分类 - 公钥密码/非对称密码体制密码体制分类 - 混合密码体制 密码学概念与法律 密码学主要是由密码编码以及密码分析两个部分组成&#xff0c;密码编码就是加密&#xff0c;密码分析就是把我们…

Unity 对象池技术

介绍 是什么&#xff1f; 在开始时初始化若干对象&#xff0c;将它们存到对象池中。需要使用的时候从对象池中取出&#xff0c;使用完后重新放回对象池中。 优点 可以避免频繁创建和销毁对象带来性能消耗。 适用场景 如果需要对某种对象进行频繁创建和销毁时&#xff0c;例…

Github 2025-03-03 开源项目周报Top14

根据Github Trendings的统计,本周(2025-03-03统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目4Jupyter Notebook项目3Go项目2JavaScript项目2C++项目2Vue项目1Rust项目1Dify.AI: 开源的LLM应用程序开发平台 创建…

阿里管理三板斧课程和管理工具包(视频精讲+工具文档).zip

阿里管理三板斧课程和管理工具包&#xff08;视频精讲工具文档&#xff09;&#xff0c;共18课。 阿里管理三板斧工具包 阿里绩效考核文档 阿里人力资源实践全集文档 阿里文化构建工具包 阿里正委体系工具包 阿里三板斧.pdf 阿里三板斧-学员手册.pdf 第1集 三板斧的底层逻辑.…

Java【多线程】(2)线程属性与线程安全

目录 1.前言 2.正文 2.1线程的进阶实现 2.2线程的核心属性 2.3线程安全 2.3.1线程安全问题的原因 2.3.2加锁和互斥 2.3.3可重入&#xff08;如何自己实现可重入锁&#xff09; 2.4.4死锁&#xff08;三种情况&#xff09; 2.4.4.1第一种情况 2.4.4.2第二种情况 2.4…

深入解析Java虚拟机(JVM)的核心组成

深入解析Java虚拟机&#xff08;JVM&#xff09;的核心组成 Java虚拟机&#xff08;JVM&#xff09;作为Java语言跨平台的核心实现&#xff0c;其架构设计精妙而复杂。理解JVM的组成部分&#xff0c;是掌握Java内存管理、性能调优和问题排查的关键。本文将从四大核心模块剖析J…

DeepSeek如何快速开发PDF转Word软件

一、引言 如今&#xff0c;在线工具的普及让PDF转Word成为了一个常见需求&#xff0c;常见的PDF转Word工具有收费的WPS&#xff0c;免费的有PDFGear&#xff0c;以及在线工具SmallPDF、iLovePDF、24PDF等。然而&#xff0c;大多数免费在线转换工具存在严重隐私风险——文件需上…

[KEIL]单片机技巧 01

1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义&#xff0c;可以解决90%以上的单纯的片内外设bug&#xff0c;学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步&#xff0c;一定要善于使用这个工具&#xff0c;而不是外设…