3.3 数据定义

思维导图:

 前言:

**核心概念**:
- 关系数据库支持**三级模式结构**:模式、外模式、内模式。
- 这些模式中包括了如:模式、表、视图和索引等基本对象。
- SQL的数据定义功能主要包括了模式定义、表定义、视图和索引的定义。

---

**1. SQL的数据定义语句**

**重点**:
- SQL标准**不提供**修改模式定义和修改视图定义的操作。要修改,需先删除后重建。
- 虽然SQL标准没有索引相关的语句,但为了查询效率,商用数据库通常提供索引机制和与数据库(有的系统称为目录)相关的语句。

---

**2. 数据库对象命名机制**:
- 早期数据库系统:所有数据库对象都属于一个数据库(只有一个命名空间)。
- 现代关系数据库:提供层次化的数据库对象命名机制。
  - 一个关系数据库系统实例中可建立多个数据库。
  - 一个数据库中可建立多个模式。
  - 一个模式下通常包括多个表、视图、索引等数据库对象。

**图3.3** 描述了数据库对象命名机制的层次结构,展示了从数据库系统实例到具体的表/视图/索引的层次关系。

---

**本节内容总结**:
- 了解如何定义模式、基本表和索引。
- 视图的定义及概念会在3.7节进行专门讨论。

通过这个笔记,读者可以快速理解和回顾3.3节的核心内容和重点。

 3.3.1 模式的定义与删除

**3.3.1 模式的定义与删除**

---

**1. 定义模式**
- **SQL模式定义语句**: 

  CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;


  如果不指定<模式名>,那么<模式名>默认为<用户名>。

- **权限要求**:
  - 调用该命令的用户需拥有数据库管理员权限。
  - 或者必须获得数据库管理员授予的`CREATE SCHEMA`权限。

- **例子**:
  - **例3.1**: 为用户WANG定义一个学生-课程模式S-T。

  CREATE SCHEMA "S-T" AUTHORIZATION WANG;


  - **例3.2**: 
 

 CREATE SCHEMA AUTHORIZATION WANG;


    此命令未指定模式名,所以默认模式名为用户名WANG。

- **模式内容**:
  - 定义模式相当于定义了一个命名空间。
  - 在这个空间里,可以进一步定义该模式包含的数据库对象,如基本表、视图、索引等。
  - 这些对象可以通过表3.3中的`CREATE`语句定义。

- **进一步的模式定义**:
  - `CREATE SCHEMA`可以接受`CREATE TABLE`, `CREATE VIEW`和`GRANT`子句。
  - 这意味着在创建模式的同时,可以在此模式里创建基本表、视图,并定义授权。
  - 结构为:

   CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句> <视图定义子句> <授权定义子句>];


  - **例3.3**:

    CREATE SCHEMA TEST AUTHORIZATION ZHANGCREATE TABLE TAB1 (COL1 SMALLINT,COL2 INT,COL3 CHAR(20),COL4 NUMERIC(10,3),COL5 DECIMAL(5,2));

---

**2. 删除模式**
- **SQL删除模式语句**: 

  DROP SCHEMA <模式名> <CASCADE | RESTRICT>;

- **选择 CASCADE 或 RESTRICT**:
  - **CASCADE**: 删除模式时,同时删除该模式中所有数据库对象。
  - **RESTRICT**: 如果模式中已定义了下属数据库对象(如表、视图等),则拒绝删除操作。只有当该模式中没有任何对象时,才能执行`DROP SCHEMA`。

- **例子**:
  - **例3.4**: 

    DROP SCHEMA ZHANG CASCADE;


    该命令删除了模式ZHANG,同时,表TAB1也被删除了。

---

这个笔记总结了模式的定义与删除的基本操作和相关的SQL命令,使读者能快速回顾和理解3.3.1节的内容。

 

 3.3.2 基本表的定义、删除与修改

**3.3.2 基本表的定义、删除与修改**

---

**1. 定义基本表**

- **概述**:创建模式后,即构建了一个数据库命名空间。首先要在这个空间中定义的是数据库基本表。
  
- **定义语句**:

  CREATE TABLE <表名> (<列名> <数据类型> [列级完整性约束条件], ... , [<表级完整性约束条件>]);

- **完整性约束条件**:
  - 存入系统的数据字典中。
  - 当操作表数据时,关系数据库管理系统会自动检查该操作是否违反约束。
  - 约束可以定义在列级或表级。涉及多个属性列的需定义在表级。

- **例子**:

  - **例3.5**:定义“学生”表Student

  CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, /* Sno是主码 */Sname CHAR(20) UNIQUE,  /* Sname取唯一值 */Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20));

  - **例3.6**:定义“课程”表Course
   

   CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY,    /* Cno是主码 */Cname CHAR(40) NOT NULL,   /* Cname不能取空值 */Cpno CHAR(4),              /* 先修课 */Credit SMALLINT,FOREIGN KEY(Cpno) REFERENCES Course(Cno)  /* Cpno是外码,被参照表是Course,被参照列是Cno */);

  - **例3.7**:定义学生选课表SC
 

 CREATE TABLE SC (Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY (Sno, Cno),   /* 主码由Sno和Cno构成 */FOREIGN KEY(Sno) REFERENCES Student(Sno),  /* Sno是外码,被参照表是Student */FOREIGN KEY(Cno) REFERENCES Course(Cno)    /* Cno是外码,被参照表是Course */);

---

**[注意]**:后续部分关于“删除与修改”的内容似乎被删减了。请提供相关部分的内容,以便为您整理笔记。

**2. 数据类型**

---

关系模型中的**域**是一个核心概念。每个属性都来源于一个特定的域,且其取值必须位于该域之中。在SQL语言中,这个域的概念由**数据类型**实现。定义表的属性时,需要明确其数据类型及长度。尽管SQL标准支持众多数据类型,但不同的关系数据库管理系统(RDBMS)所支持的数据类型可能会有所不同。

**表3.4 常用数据类型及其描述**

---

**选择合适的数据类型**:决定一个属性的数据类型需要考虑其实际应用情境:

1. **取值范围**:需要确认该属性可能的最大和最小值。
2. **所需运算**:考虑该属性会进行哪些运算。例如,年龄属性可能需要算术运算,如计算平均年龄,因此选择整数类型更为合适。

**示例**:考虑年龄属性(Sage)。尽管可以选择CHAR(3)作为数据类型,但由于需要进行算术运算,CHAR类型不适合。考虑到人的年龄大约在百岁以内,选择短整数(SMALLINT)作为其数据类型更为合适。

 3.模式与表

**3. 模式与表**

---

在关系数据库中,**模式**是定义数据库结构的一种方式,而**基本表**是模式中的具体结构。每个基本表都属于某一个模式。下面是模式和表的定义及关联方式的简要笔记:

1. **定义方式**:
    - 每个基本表都属于特定的模式。
    - 一个模式可以包含多个基本表。

2. **表所属模式的定义方法**:
    - **方法一**:在表名中明确标明模式名。
       

    CREATE TABLE "S-T".Student(…);CREATE TABLE "S-T".Course(…);CREATE TABLE "S-T".SC(…);


    - **方法二**:在创建模式时一并定义表。
    - **方法三**:先设置默认模式,再创建表,这样在定义表时就不需要再明确指定模式名。

3. **搜索路径**:
    - 当创建基本表时没有指定模式,系统会根据**搜索路径**确定该表所属的模式。
    - 搜索路径包含一系列模式名,RDBMS会选用其中第一个存在的模式名作为表的模式名。
    - 如果所有搜索路径中的模式名都不存在,系统会报错。
    - 查看当前搜索路径:
 

 SHOW search_path;


    - 默认搜索路径是 `$user, PUBLIC`。这意味着系统首先会查找与用户名相同的模式,若不存在,再使用`PUBLIC`模式。
    - 数据库管理员可以修改默认搜索路径。例如,为了默认使用"S-T"模式,可以执行以下操作:
     

  SET search path TO "S-T", PUBLIC;CREATE TABLE Student (…);

**总结**:模式为数据库提供了一个组织和管理的结构,而基本表是模式中的具体实体。在实际操作中,可以使用不同的方法来指定表所属的模式,其中最常见的是通过设置搜索路径。

 

**4. 修改基本表**

---

关系数据库的应用环境和需求可能随时间发生变化,因此经常需要对已存在的基本表进行修改。SQL提供了`ALTER TABLE`语句来实现这些更改。以下是如何修改基本表的详细笔记:

1. **ALTER TABLE语句格式**:

   ALTER TABLE <表名>[ADD [COLUMN] <新列名> <数据类型> [完整性约束]][ADD <表级完整性约束>][DROP [COLUMN] <列名> [CASCADE | RESTRICT]][DROP CONSTRAINT <完整性约束名> [RESTRICT | CASCADE]][ALTER COLUMN <列名> <数据类型>];

2. **修改操作的说明**:
    - **ADD子句**:用于添加新的列、新的列级完整性约束条件,以及新的表级完整性约束条件。
    - **DROP COLUMN子句**:删除表中的列。`CASCADE`选项会自动删除引用了该列的其他对象,如视图。`RESTRICT`选项则在该列被其他对象引用时拒绝删除。
    - **DROP CONSTRAINT子句**:删除指定的完整性约束条件。
    - **ALTER COLUMN子句**:修改原有的列定义,这可以是修改列名或数据类型。

3. **示例**:
    - **例3.8**:向Student表中添加一个新列“入学时间”,数据类型为日期。
   

   ALTER TABLE Student ADD S_entrance DATE;


        新增的列默认值为空。
        
    - **例3.9**:将Student表的Sage列数据类型从字符型更改为整数型。
     

    ALTER TABLE Student ALTER COLUMN Sage INT;


        
    - **例3.10**:在Course表上添加一个约束,确保课程名称(Cname)是唯一的。
       

  ALTER TABLE Course ADD UNIQUE(Cname);

**总结**:`ALTER TABLE`语句为数据库开发者提供了强大的工具,以满足不断变化的应用需求。使用此语句可以添加、删除或修改表结构,从而确保数据结构的灵活性和适应性。

 

 

**5. 删除基本表**

---

删除不再需要的基本表是数据库维护的常见任务。`DROP TABLE`语句在SQL中负责执行此操作。以下是此主题的详细笔记:

1. **DROP TABLE语句格式**:

  DROP TABLE <表名> [RESTRICT | CASCADE];

2. **删除操作的说明**:
    - **RESTRICT**:有条件地删除基本表。基本表不应被其他表的约束(如`CHECK`, `FOREIGN KEY`等)、视图、触发器、存储过程或函数等引用。存在这些依赖关系时,表不能被删除。
    - **CASCADE**:无条件地删除基本表。在删除基本表时,所有依赖的对象,如视图,都将一同被删除。
    - 默认行为是`RESTRICT`。

3. **示例与注意事项**:
    - **例3.11**:删除`Student`表并级联删除相关对象。
   

    DROP TABLE Student CASCADE;


        执行此操作时需特别小心,因为删除基本表不仅会删除表中的数据和表的定义,还会删除与其相关的索引、触发器等。如果被其他表引用,那些表可能也会被删除。
    - **例3.12**:如果基本表上有视图,使用`RESTRICT`时不能删除表;使用`CASCADE`时,表和视图都会被删除。
     

     CREATE VIEW IS_Student ASSELECT Sno, Sname, Sage FROM Student WHERE Sdept = 'IS';DROP TABLE Student RESTRICT;  // ErrorDROP TABLE Student CASCADE;  // Deletes both table and view

4. **不同数据库产品的处理差异**:
    - 不同的数据库系统在执行`DROP TABLE`操作时的处理策略可能会有所不同。
    - 对比`SQL2011`标准与`Kingbase ES`, `Oracle 12c`, 和`MS SQL Server 2012`:
        - **索引**:删除基本表后,所有三种数据库都会自动删除该表的索引。
        - **视图**:`Oracle 12c`和`SQL Server 2012`在删除基本表后保留视图,但它们将失效。`Kingbase ES`根据是否使用`RESTRICT`或`CASCADE`来决定是否删除视图。
        - **存储过程和函数**:三种数据库产品在删除基本表后都不会删除与之相关的存储过程和函数,但它们将失效。

5. **总结**:在删除基本表时,需要了解数据库产品的特定行为和处理策略。虽然SQL提供了标准化的语言和指令,但具体的执行和实现可能因数据库系统而异。在进行任何操作之前,建议备份数据库并了解可能的副作用。

 

 

 

 

 总结:

**数据定义:重点、难点、易错点及使用技巧**

---

### 1. 重点:

- **数据结构定义**:使用`CREATE`语句创建数据库、表、视图、索引等。
- **数据约束**:理解并应用主键 (`PRIMARY KEY`)、外键 (`FOREIGN KEY`)、唯一约束 (`UNIQUE`)、检查约束 (`CHECK`) 等。
- **修改结构**:使用`ALTER`语句来更改现有的数据库结构。
- **删除结构**:使用`DROP`语句删除数据库、表、视图等。

### 2. 难点:

- **约束的理解与应用**:如何正确地使用和区分不同的数据约束,特别是外键约束和`ON DELETE`、`ON UPDATE`的级联操作。
- **规范化**:如何进行数据库设计的规范化以减少数据冗余和避免更新异常。
- **视图与基本表的关系**:如何处理视图与基本表之间的依赖关系,特别是在修改或删除时。

### 3. 易错点:

- **忘记约束**:创建表时忽略某些重要的约束条件,例如唯一约束或非空约束。
- **数据类型不匹配**:定义列或变量时选择了错误的数据类型。
- **删除操作**:使用`DROP`或`DELETE`语句时不小心删除了重要的数据或结构。
- **修改列的属性**:使用`ALTER`语句修改列属性时可能导致数据丢失或类型不匹配。

### 4. 使用技巧:

- **逐步设计**:在设计数据库结构时,先从大的框架开始,逐步细化。这样可以确保整体结构的一致性。
- **经常备份**:在进行任何结构性修改前,如使用`DROP`或`ALTER`语句,务必备份数据。
- **利用工具**:使用数据库设计工具或ER图工具帮助理解和设计数据库结构。
- **测试与验证**:在应用更改到生产环境之前,首先在测试环境中进行测试,确保操作没有问题。
- **文档化**:为数据库设计和每个表、视图、索引等编写详细的文档。这有助于后续的维护和团队协作。
- **理解SQL标准与特定的数据库差异**:不同的数据库系统在处理某些SQL操作时可能有所不同,所以了解和掌握这些差异是很重要的。

总的来说,数据定义是数据库设计和维护的基石,需要深入理解并小心操作,避免可能的错误。

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

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

相关文章

基于深度学习的“语义通信编解码技术”框架分类

目录 基于神经网络的语义提取基于神经网络的语义信源编码基于神经网络的语义信源信道联合编码基于神经网络的语义编码与数字调制联合设计参考文献 基于神经网络的语义提取 在现有的信源编码前端加上一个语义提取神经网络[53] &#xff0c;如图所示。语义提取神经网络的输入是原…

基于工业5G网关的工业机器人监测控制方案

随着智能制造、自动化生产的发展进步&#xff0c;工业机器人的身影越来越多地出现在工厂现场&#xff0c;成为新型无人化、智能化生产制造的中坚力量。 工业机器人的运行伴生着海量的数据采集、传输、分析和反馈执行&#xff0c;因此也需要高速、低延迟的5G网络&#xff0c;支撑…

K8s Kubernetes Namespave Pod Label Deployment Service 实战

本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 Namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下&#xff0c;kubernetes集群中…

甘特图组件DHTMLX Gantt示例 - 如何有效管理团队工作时间?(一)

如果没有有效的时间管理工具&#xff0c;如工作时间日历&#xff0c;很难想象一个项目如何成功运转。这就是为什么我们的开发团队非常重视项目管理&#xff0c;并提供了多种选择来安排DHTMLX Gantt的工作时间。使用DHTMLX Gantt这个JavaScript库&#xff0c;您可以创建一个强大…

使用Tortoisegit界面拉起master主分支以副分支以及命令行操作

文章目录 1、Gui操作界面2、命令行操作3、合并分支到master分支上面 1、Gui操作界面 "小乌龟"通常指的是Git的图形用户界面&#xff08;GUI&#xff09;工具&#xff0c;其中比较常见的是TortoiseGit。下面是使用TortoiseGit来拉取&#xff08;checkout&#xff09;一…

android之TextView自由选择复制

文章目录 前言一、效果图二、实现步骤1.OnSelectListener2.SelectionInfo类3.TextLayoutUtil类4.复制弹框的xml布局5.弹框背景Drawable6.倒三角Drawable7.复制工具类8.调用 总结 前言 根据时代进步&#xff0c;那些干产品的也叼砖起来了&#xff0c;今天就遇到一个需求&#x…

Xcode升级到15.0 解决DT_TOOLCHAIN_DIR问题

根据个人开发遇到的问题做的总结&#xff0c;公司要求Xcode 14.2 &#xff0c;Swift 5.7开发&#xff0c;由于升级了Mac 14.0系统后&#xff0c;Xcode 14.2不能使用&#xff0c;解决方案目前有2个 一、在原来Xcode 14.2 的显示包内容&#xff0c;如图 二、升级到Xcode的15.0后…

yolov8 (2) : 模型训练

yolov8 github: https://github.com/ultralytics/ultralytics yolov8 网络详解参见: YOLOv8 (1) : 网络讲解1. 环境安装 安装ultralytics包pip install ultralytics在终端输入yolo命令࿰

软件TFN 2K的分布式拒绝攻击(DDos)实战详解

写在前头 本人写这篇博客的目的&#xff0c;并不是我想成为黑客或者鼓励大家做损坏任何人安全和利益的事情。因科研需要&#xff0c;我学习软件TFN 2K的分布式拒绝攻击&#xff0c;只是分享自己的学习过程和经历&#xff0c;有助于大家更好的关注到网络安全及网络维护上。 需要…

饥荒服务器阿里云租用价格表一年和一个月收费报价表

饥荒阿里云服务器多少钱一个月&#xff1f;阿里云服务器价格9元一个月&#xff0c;阿里云轻量应用服务器2核2G3M带宽轻量服务器一年108元&#xff0c;2核4G4M带宽轻量服务器一年297.98元12个月&#xff1b;阿里云ECS云服务器e系列2核2G配置182元一年、2核4G配置365元一年、2核8…

信必优收到全国性综合类证券客户表扬信

近日&#xff0c;信必优收到全国性综合类证券客户表扬信&#xff0c;客户高度表扬我司驻场员工认真负责的态度和专业扎实的技术能力&#xff0c;任务承担快&#xff0c;工作效率高&#xff0c;对项目顺利开展做出了积极贡献。 客户成立于1988年&#xff0c;在全国21个省级区域…

京东数据平台:2023年9月京东洗衣机行业品牌销售排行榜

鲸参谋监测的京东平台9月份洗衣机市场销售数据已出炉&#xff01; 9月份洗衣机行业销售呈下滑状态。鲸参谋数据显示&#xff0c;9月京东平台洗衣机的总销量为116万&#xff0c;环比下滑约1%&#xff0c;同比下滑约13%&#xff1b;月销售额为17亿&#xff0c;环比下滑约7%&…

【mysql】 bash: mysql: command not found

在linux 服务器上安装了mysql 也可以正常运行。 但是执行命令&#xff0c;系统提示&#xff1a;bash: mysql: command not found bash:mysql:找不到命令 执行的命令是&#xff1a; mysql -u root -h 127.0.0.1 -p由于系统默认会查找的 /usr/bin/ 中下的命令&#xff0c;如…

JVM监控及诊断工具-GUI篇

文章目录 JVM监控及诊断工具-GUI篇工具概述JConsoleVisual VM再谈内存泄漏Java中内存泄漏的8种情况Arthas&#xff08;阿尔萨斯&#xff09;康师傅使用阿尔萨斯的例子help指令 JVM监控及诊断工具-GUI篇 工具概述 使用上一章命令行工具或组合能获取目标Java应用性能相关的基础…

Java架构师缓存架构设计

目录 1 导学2 高性能概述2.1 高性能的定义和衡量指标2.2 如何实现高性能的计算机系统或软件程序2.3 木桶理论2.4 如何实现计算机系统或软件程序的高性能3 多级缓存设计3.1 浏览器缓存3.2 CDN缓存3.3 负载均衡的缓存3.4 进程内缓存3.5 分布式缓存4 缓存技术方案5 如何进行缓存拆…

智能防眩目前照灯系统控制器ADB

经纬恒润的自适应远光系统—— ADB&#xff08;Adaptive Driving Beam&#xff09; 是一种能够根据路况自适应变换远光光型的智能远光控制系统。根据本车行驶状态、环境状态以及道路车辆状态&#xff0c;ADB 系统自动为驾驶员开启或退出远光。同时&#xff0c;根据车辆前方视野…

剧院建筑三维可视化综合管控平台提高安全管理效率

随着数字孪生技术的高速发展&#xff0c;智慧楼宇也被提上日程&#xff0c;以往楼宇管理存在着设备故障排查困难、能源浪费与管理不足、安全性和风险高等问题&#xff0c;而智慧楼宇数字孪生可视化中控平台&#xff0c;打造智慧楼宇管理一张图&#xff0c;实现了智慧建筑和楼宇…

美创科技三重数据安全韧性,杜绝删库跑路

从删库到跑路&#xff0c;教训很多&#xff0c;但类似事件近年来总在重复上演&#xff0c;有运维部为此连夜鏖战恢复&#xff0c;更有企业陷入“至暗时刻”&#xff0c;经济受损、名誉蒙尘。 组织单位应该采取怎样的策略和积极主动的方法&#xff0c;避免酿成严重的后果&#x…

为什么B2B企业需要CRM系统?如何利用它最大化销售额?

身处 B2B 企业&#xff0c;你是否正在为冗长复杂的销售流程而苦恼&#xff1f;你是否经常感到无法控制来之不易的销售线索&#xff0c;所有的营销努力都付诸东流&#xff1f; 实际上&#xff0c;这些问题正是大多数 B2B 企业面临的共同挑战。但是&#xff0c;为你的B2B业务采用…

16.(开发工具篇mysql)mysql不同库同步数据的异常记录

1:mysql导入时出现“ERROR at line : Unknown command ‘\‘‘.“的解决办法 default-character-set=utf82:ERROR 2006 (HY000) at line 71: MySQL server has gone away (1) 连接超时 查看各项连接时间: show global variables like %timeout;这些值是相对是MySQL的默认…