PART1-Oracle关系数据结构

news/2024/7/4 15:39:01/文章来源:https://www.cnblogs.com/crispy-bro/p/18231174

2. Oracle关系数据结构

2.1. 表和表簇

2.1.1. 模式对象简介

数据库模式是数据结构的逻辑容器,这些数据结构称为模式对象。模式对象的例子有表和索引。模式对象是通过 SQL 创建和操作的。
一个数据库用户拥有密码和各种数据库权限。每个用户拥有一个与其同名的模式。模式包含了属于该用户的数据。例如,hr用户拥有hr模式,该模式包含如employees表这样的模式对象。在生产数据库中,模式所有者通常代表一个数据库应用程序而不是一个人。
在一个模式内,每种特定类型的模式对象都有一个唯一的名称。例如,hr.employees 指的是 hr 模式中的employees表。图 2-1 描绘了名为hr的模式所有者和hr模式内的模式对象。

2.1.1.1. 模式对象类型

关系数据库中最重要的模式对象是表。表以行的形式存储数据。
Oracle SQL 允许您创建和操作许多其他类型的模式对象,包括以下内容:

  • 索引: 索引是包含表或表簇中每个索引行条目的模式对象,并提供直接、快速访问行的功能。Oracle 数据库支持多种类型的索引。索引组织表是一种数据存储在索引结构中的表。
  • 分区: 分区是大型表和索引的一部分。每个分区都有自己的名称,并且可以选择具有自己的存储特性。
  • 视图: 视图是数据在一个或多个表或其他视图中的自定义表示。您可以将其视为存储的查询。视图实际上不包含数据。
  • 序列: 序列是用户创建的对象,可以由多个用户共享以生成整数。通常,序列用于生成主键值。
  • 维度: 维度定义了列集对之间的父子关系,其中列集中的所有列必须来自同一张表。维度通常用于分类客户、产品和时间等数据。
  • 同义词: 同义词是其他模式对象的别名。由于同义词只是别名,所以除了其在数据字典中的定义外,不需要任何存储。
  • PL/SQL子程序和包: PL/SQL是Oracle对SQL的过程扩展。PL/SQL子程序是一个命名的PL/SQL块,可以通过一组参数调用。PL/SQL包将逻辑相关的 PL/SQL类型、变量和子程序分组。

数据库中还存储了其他类型的对象,可以通过 SQL 语句创建和操作,但不包含在模式中。这些对象包括数据库用户、角色、上下文和目录对象。

2.1.1.2. 模式对象存储

一些模式对象将数据存储在称为段的逻辑存储结构中。例如,非分区的堆组织表或索引会创建一个段。其他模式对象,例如视图和序列,仅包含元数据。本节仅描述具有段的模式对象。
Oracle数据库在逻辑上将模式对象存储在表空间内。模式和表空间之间没有关系:一个表空间可以包含来自不同模式的对象,一个模式的对象可以包含在不同的表空间中。每个对象的数据实际包含在一个或多个数据文件中。
图 2-2显示了表和索引段、表空间和数据文件的可能配置。一个表的数据段跨越两个数据文件,这两个数据文件都是同一表空间的一部分。一个段不能跨越多个表空间。

2.1.1.3 模式对象依赖

一些模式对象引用其他对象,从而创建模式对象依赖关系。例如,一个视图包含引用表或其他视图的查询,而一个PL/SQL子程序调用其他子程序。如果对象A的定义引用了对象B,那么A是相对于B的依赖对象,而B是相对于A的被引用对象。
Oracle数据库提供了一种自动机制,以确保依赖对象始终与其引用的对象保持同步。当创建依赖对象时,数据库会跟踪依赖对象与其引用对象之间的依赖关系。当引用对象发生可能影响依赖对象的更改时,依赖对象会被标记为无效。例如,如果用户删除了一个表,那么基于该表的视图将不可用。
无效的依赖对象必须在引用对象的新定义下重新编译后才能使用。重新编译会在引用无效的依赖对象时自动进行。
以下示例脚本演示了模式对象如何创建依赖关系,该脚本创建了一个表 test_table,然后创建了一个查询该表的过程:

CREATE TABLE test_table ( col1 INTEGER, col2 INTEGER );
CREATE OR REPLACE PROCEDURE test_proc
AS BEGIN FOR x IN ( SELECT col1, col2 FROM test_table )
LOOP
-- process data
NULL;
END LOOP;
END;
/

以下查询过程 test_proc 的状态,显示其有效:

SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
---------------- ----------
TEST_PROC VALID

在向 test_table 添加列 col3 后,该过程仍然有效,因为该过程对该列没有依赖关系:

SQL> ALTER TABLE test_table ADD col3 NUMBER;
Table altered.

SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC VALID

然而,更改 test_proc 过程中依赖的 col1 列的数据类型会使该过程失效

SQL> ALTER TABLE test_table MODIFY col1 VARCHAR2(20);
Table altered.

SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC INVALID

运行或重新编译该过程会使其再次有效,如以下示例所示:

SQL> EXECUTE test_proc
PL/SQL procedure successfully completed.

SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC VALID

2.1.1.4 SYS和System模式

所有的 Oracle 数据库都包含默认的管理员账户。管理员账户拥有极高的权限,仅供授权执行诸如启动和停止数据库、管理内存和存储、创建和管理数据库用户等任务的 DBA 使用。

在创建数据库时,会自动创建管理员账户SYS。该账户可以执行所有的数据库管理功能。SYS模式存储了数据字典的基本表和视图。这些基本表和视图对于 Oracle 数据库的运行至关重要。SYS 模式中的表只能由数据库操作,任何用户都不得修改。

SYSTEM 账户也会在创建数据库时自动创建。SYSTEM 模式存储了显示管理信息的附加表和视图,以及各种 Oracle 数据库选项和工具使用的内部表和视图。永远不要使用 SYSTEM 模式存储对非管理员用户感兴趣的表。

2.1.1.5 Sample模式

Oracle数据库可能包含示例模式,这是一组相互关联的模式,使得Oracle文档和教学材料能够展示常见的数据库任务。hr模式是一个示例模式,其中包含有关员工、部门和地点、工作历史等信息。图 2-3是hr模式中表的实体关系图。本手册中的大多数示例都使用了该模式中的对象。

2.1.2. 表概述

2.1.2.1. 列与行

表的定义包括表名和一组列。列标识了表所描述实体的属性。例如,employees 表中的 employee_id 列指的是员工实体的员工ID属性。

一般情况下,在创建表时,您为每一列指定列名、数据类型和宽度。例如,employee_id 的数据类型是 NUMBER(6),表示该列只能包含最多 6 位数的数字数据。宽度可以由数据类型预先确定,如 DATE 类型。

表可以包含虚拟列,与非虚拟列不同的是,虚拟列不会占用磁盘空间。数据库根据需要通过计算一组用户指定的表达式或函数来推导虚拟列的值。例如,income 虚拟列可以是 salary 和 commission_pct 列的函数。

创建表后,您可以使用 SQL 插入、查询、删除和更新行。一行是对应于表中记录的一组列信息。例如,employees 表中的一行描述了特定员工的属性。

2.1.2.2. 示例:CREATE TABLE and ALTER TABLE 语句

Oracle SQL创建表的命令是CREATE TABLE。示例2-1展示了hr示例模式中employees表的CREATE TABLE语句。该语句指定了诸如employee_id、first_name 等列,并为每个列指定了诸如NUMBER或DATE等的数据类型。

示例 2-2 展示了一个 ALTER TABLE 语句,该语句向 employees 表添加完整性约束。完整性约束可以强制执行业务规则,防止无效信息进入表中。

示例 2-3展示了hr.employees 表的8行和6列数据。

示例 2-3 中的输出展示了表、列和行的一些重要特征,包括:

  • 表中的一行描述了一个员工的属性:姓名、工资、部门等。例如,输出中的第一行显示了名为 Steven King 的员工的记录。
  • 列描述了员工的属性。在示例中,employee_id 列是主键,这意味着每个员工都通过员工ID唯一标识。任何两个员工都保证不具有相同的员工ID。
  • 非主键列可以包含具有相同值的行。在示例中,员工101 和102 的工资值相同:17000。
  • 外键列引用同一表或不同表中的主键或唯一键。在此示例中,department_id 中的值 90 对应于 departments 表的 department_id 列。
  • 字段是行和列的交集。它只能包含一个值。例如,员工104的部门 ID 的字段包含值 60。
  • 字段可能缺少值。在这种情况下,字段被称为空值。员工 100 的 commission_pct 列的值为空,而员工 149 的字段中的值为 0.2。除非在该列上定义了 NOT NULL 或主键完整性约束,否则列允许空值,此时不允许插入行时不为该列提供值。

2.1.2.3. Oracle数据类型

每列都有一个数据类型,与特定的存储格式、约束和有效值范围相关联。值的数据类型将一组固定的属性与该值相关联。这些属性导致 Oracle 数据库以不同于另一种数据类型的方式处理一种数据类型的值。例如,你可以将 NUMBER 数据类型的值相乘,但不能将 RAW 数据类型的值相乘。
当创建表时,必须为每个列指定数据类型。随后插入列中的每个值都假定为该列的数据类型。
Oracle 数据库提供了几种内置数据类型。最常用的数据类型分为以下几类:

  • 字符数据类型
  • 数值数据类型
  • 日期时间数据类型
  • ROWID数据类型
  • 格式模型和数据类型

其他重要的内置类型类别包括原始数据类型(RAW)、大对象(LOBs)和集合。PL/SQL 具有用于常量和变量的数据类型,这些类型包括布尔型(BOOLEAN)、引用类型、复合类型(记录)和用户定义类型。

1. Character数据类型

字符数据类型以字符串形式存储字符(字母数字)数据。最常用的字符数据类型是 VARCHAR2,这是存储字符数据最有效的选项。
字节值对应于字符编码方案,通常称为字符集或代码页。数据库字符集在数据库创建时确定。字符集的示例包括 7 位 ASCII、EBCDIC 和 Unicode UTF-8。
字符数据类型的长度语义可以以字节或字符为单位进行测量。字节语义将字符串视为字节序列。这是字符数据类型的默认设置。字符语义将字符串视为字符序列。字符在技术上是数据库字符集的一个代码点。

2. VARCHAR2与CHAR数据类型

VARCHAR2数据类型用于存储变长的字符字面量。术语“字面量”和“常数值”是同义的,指的是固定的数据值。例如,'LILA'、'St. George Island' 和 '101' 都是字符字面量;5001 是一个数字字面量。字符字面量被包含在单引号中,这样数据库可以将其与模式对象名称区分开来。
当你创建一个带有 VARCHAR2 列的表时,你需要指定一个最大字符串长度。在示例 2-1 中,last_name 列的数据类型为 VARCHAR2(25),这意味着存储在该列中的任何名字最多可以有 25 个字节。对于每一行,Oracle 数据库将列中的每个值存储为变长字段,除非值超过了最大长度,在这种情况下,数据库会返回错误。例如,在单字节字符集中,如果你在某一行的 last_name 列值中输入 10 个字符,那么该行的列片段只存储 10 个字符(10 字节),而不是 25 个。使用 VARCHAR2 可以减少空间消耗。与 VARCHAR2 相比,CHAR 存储固定长度的字符字符串。当你创建一个带有 CHAR 列的表时,该列需要一个字符串长度。默认长度是 1 字节。数据库使用空格填充值到指定的长度。
Oracle 数据库在进行非填充比较语义(nonpadded comparison semantics)的情况下比较 VARCHAR2 值,并在进行空白填充比较语义(blank-padded comparison semantics)的情况下比较 CHAR 值。

3. NCHAR与NVARCHAR2数据类型

NCHAR 和 NVARCHAR2 数据类型用于存储 Unicode 字符数据。Unicode 是一种通用的编码字符集,可以使用单一字符集存储任何语言的信息。NCHAR 存储对应于国家/地区字符集的固定长度字符字符串,而 NVARCHAR2 存储变长字符字符串。
在创建数据库时,你需要指定一个国家/地区字符集。NCHAR 和 NVARCHAR2 数据类型的字符集必须是 AL16UTF16 或 UTF8。这两种字符集都使用 Unicode 编码。
当你创建一个带有 NCHAR 或 NVARCHAR2 列的表时,最大大小始终基于字符长度语义。字符长度语义是 NCHAR 或 NVARCHAR2 的默认且唯一的长度语义。

4. 数值数据类型

Oracle数据库的数值数据类型用于存储固定小数和浮点数、零、以及无穷大。某些数值类型还会存储运算未定义结果的值,这被称为’非数字’或NaN。
Oracle数据库以变长格式存储数值数据。每个值都以科学记数法存储,使用1字节存储指数。数据库最多使用20字节来存储尾数,这是浮点数中包含其有效数字的部分。Oracle数据库不存储前导零和尾随零。

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

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

相关文章

ros - slam - 电机控制之速度控制实验

前面说到通过控制对应的IO上的PWM占空比即可完成对电机速度的控制。关于PWM的介绍在ROS2硬件控制篇的舵机控制中已经介绍过了,所以我们知道通过改变PWM的占空比可以实现对输出电压的大小调节。占空比越大,输出电压越高;占空比越小,输出电压越低。接着我们通过一个实验来验证…

BPI-M4 Berry在windows系统下连接串口调试

串口线 我手头的串口线是这样的,包含如下四个针脚:VCC、GND、TX、RX。串口针脚说明: 其他的串口线可能不止四根线,而且杜邦线的颜色也不一定和我的一样。 请看清楚接口标注,按照下面介绍,将其接到板子上对应的接口板子串口GNDGNDTXDRXDRXDTXD VCC是电源,可以不用接。有的…

智慧旅游不再难,免费可视化工具一键搞定!

在过去,复杂的数据分析软件和昂贵的服务费用让许多中小旅游企业望而却步。而今,免费可视化工具彻底改变了这一局面,今天要说的工具就是山海鲸可视化。它不仅功能强大,而且免费使用,大大降低了数据可视化的门槛,即便是资源有限的旅游企业或是个人也能轻松上手。在这个数据…

平衡樹專題Treap

前言:题单在此:HL平衡树0701 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 平衡树 什么是平衡树? 首先我们需要知道二叉查找树的内容。 二叉查找树(BST:Binary Search Tree) 首先,他是一棵二叉树 其次,他的左子树的权值<根节点的权值<右子树的权值 最后,…

BUUCTF刷题:[DDCTF 2019]homebrew event loop

[DDCTF 2019]homebrew event loop 代码审计 from flask import Flask, session, request, Response import urllib import urllib.parseapp = Flask(__name__) app.secret_key = ********************* # censored url_prefix = /d5afe1f66147e857def FLAG():return *********…

PHP8.0正常,PHP7.2,PHP7.3报错Connection failed: SQLSTATE[HY000] [2054] The server re....

构建网站API接口的时候,使用了PDO进行数据库连接,原文如下 测试后发现,PHP8.0版本下,可以正常输出,但是PHP7.2和7.3则会报错:Connection failed: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 经查验,发现因为所用的PHP7.…

H3C之防火墙拆堆叠升级

组网及说明两台防火墙F1070组成IRF,做冗余主备,并配置BFD MAD 进行分裂检测。业务在deviceA上跑,若deviceA上下行链路故障,则切换到deviceB。 现要求在业务中断最短的情况下,堆叠主备防火墙从域间策略的软件版本升级至安全策略的软件版本。现有版本为 Release R9345P14 升…

神经网络图像数据训练集成应用 | 可视化图像处理 | 可视化训练器

〇、写在前面 本应用基于开源UI框架PyDracula进行开发,除去最基本的UI框架外,所有功能的前后端实现都由我个人开发完成,但也有部分UI(如开关控件和进度条)是参考其他大佬的分享。 这个应用是我的本科毕业设计,但因为个人能力不足,姑且只能使用Python+PySide6开发。 开发…

【别再为可视化工具付费了!】智慧交通实时路况监测,这款免费可视化工具的功能超乎想象

在智慧交通领域,实时路况监测是确保城市交通高效运转的关键。山海鲸可视化作为一款免费的可视化工具,其功能非常强大。面对智慧交通的复杂需求,山海鲸可视化凭借其二三维融合、易用性、安全性和高质量的画面渲染等特色,成为智慧交通管理的不二选择。山海鲸可视化的二三维融…

数据增强mosaic实现

mosaic 是yolov4中提出的一个数据增强的方式,通过将4张图片拼接在一起送入训练,有效提升了模型的mapmosaic 是yolov4中提出的一个数据增强的方式,通过将4张图片拼接在一起送入训练,有效提升了模型的map。mosaic的优点包括如下:增加数据多样性,随机选取四张图像进行组合,…

springboot3(cloud 2022.0.0)整合seata1.7.1

一、第一步下载对应版本的seata服务 二、修改conf下的application.yml配置 注意:主要是连接nacos的一些配置:注册中心和服务发现的配置1 # Copyright 1999-2019 Seata.io Group.2 #3 # Licensed under the Apache License, Version 2.0 (the "License");4 # you…

Linux 文件系统扩展

今天发现/usr目录空间不够。需要扩展。之前没有处理过。今天试了一下调整。并且记录下来整个过程。 1 使用fdisk -l 查看磁盘信息2、使用fdisk /dev/sda 对磁盘进行分区操作完后,多了一个/dev/sda34 使用 pvcreate /dev/sda3创建物理卷5、使用vgextend ol /dev/sda3 扩展磁盘 …

华为云技术专家硬核分享,云原生中间件如何加速业务发展

云原生中间件作为云原生架构中的关键组件,在核心能力建设、业务连续性、生态丰富性等诸多方面也面临着一系列挑战。本文分享自华为云社区《云原生中间件,构筑软件安全可信的连接桥梁》,作者: 华为云PaaS服务小智。 近日,在华为云开发者大会2024期间,来自华为云PaaS服务,…

KES数据库实践指南:探索KES数据库的事务隔离级别

本文深入探讨了KES数据库中的并发控制机制和事务隔离级别的重要性及实施方法。我们从并发控制的基本概念出发,详细解释了ACID原则如何通过不同的隔离级别得以实现,以及在串行化与并行执行之间的权衡取舍。通过实际操作和示例,我们展示了不同隔离级别下可能出现的脏读、不可重…

最新扣子(Coze)实战案例:图像流工具之创建一个精美的LOGO,完全免费教程

🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》,完全免费学习。 👀 关注公众号:斜杠君,可获取完整版教程。 👍🏻如果想学习AI应用搭建,请关注公众号,及时获取最新免费教程。温馨提示:本文内…

2024年6.23-6.26学习总结

2024年6.23--6.26学习总结 考试 24号考计算机网络,26号考形式语言与自动机。这几天基本都在复习。 形式语言与自动机 dfa极小化 1.先删去不可达状态和陷阱态。 2.假如状态有q1,q2,q3,q4,q5,q6,q7,q8,先将所有终止状态取出分为一组比如{q6,q8},然后在另一组中找到无法区分的状…

大型能源电力集团需要什么样的总部数据下发系统?

能源电力集团的组织结构是一个复杂的系统,包括多个职能部门和子分公司。这些子分公司负责具体的电力生产、销售、运维等业务。这些部门和公司协同工作,确保电力生产的顺利进行,同时关注公司的长期发展、市场拓展、人力资源管理、财务管理和公司治理等方面。由于大型能源电力…

ros slam microros之H电桥电机驱动原理介绍

一、电机驱动原理介绍正式编写代码前,我们先了解下电机驱动的原理,以便于我们了解我们如何才能通过代码控制电机的转速和正反转。1.1 H桥电路让电机动起来只需要通电就行,比如我们用的额定电压为12V 130RPM的电机,当给到12V的电压时可以达到额定转速130转/分,但如果我们给…

ros slam 之移动机器人常用传感器

本节我们对移动机器人底盘结构进行简单的介绍,并着重介绍FishBot基础版的组成结构。 对于一个移动底盘来说,所要提供的核心功能有两个-感知和执行能力,我们分别进行介绍。一、感知-传感器所谓感知即通过给类传感器获取环境信息的能力。在移动机器人中,我们常用的传感器有 距…

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS HPE (慧与) 定制版

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS HPE (慧与) 定制版VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS HPE (慧与) 定制版 ESXi 8.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC…