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.mzph.cn/news/102035.shtml

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

相关文章

Axure常用技巧及问题

以下内容将持续更新 目录 一、技巧1、版本选择2、快捷键3、定制工具栏 二、问题1、无法在浏览器预览2、发布到本地的HTML无法查看 一、技巧 1、版本选择 2、快捷键 3、定制工具栏 上方菜单栏-右键-自定义工具栏 二、问题 1、无法在浏览器预览 需要更改Axure配置 点击发布-…

C#之常见图形文件格式及其特点

部分内容来源于Microsoft相关文档&#xff01; 日常生活中和软件开发中&#xff0c;经常会用到图形文件格式&#xff1a; BMP BMP 是 Windows 用来存储与设备无关的图像和与应用程序无关的图像的标准格式。 给定 BMP 文件的每像素位数&#xff08;1、4、8、15、24、32 或 64…

嵌入式Linux裸机开发(六)EPIT 定时器

系列文章目录 文章目录 系列文章目录前言介绍配置过程 前言 前面学的快崩溃了&#xff0c;这也太底层了&#xff0c;感觉学好至少得坚持一整年&#xff0c;我决定这节先把EPIT学了&#xff0c;下面把常见三种通信大概学一下&#xff0c;直接跳过其他的先学移植了&#xff0c;有…

网页游戏的开发框架

网页游戏开发通常使用不同的开发框架和技术栈&#xff0c;以创建各种类型的游戏&#xff0c;从简单的HTML5游戏到复杂的多人在线游戏&#xff08;MMO&#xff09;等。以下是一些常见的网页游戏开发框架和它们的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&a…

python安装geopy出现错误

python&#xff1a; 安装geopy出现错误 错误信息&#xff1a; 解决办法&#xff1a;再试一次 居然成功了&#xff0c;就是说&#xff0c;也不知道为什么

生产级Stable Diffusion AI服务部署指南【BentoML】

在本文中&#xff0c;我们将完成 BentoML 和 Diffusers 库之间的集成过程。 通过使用 Stable Diffusion 2.0 作为案例研究&#xff0c;你可以了解如何构建和部署生产就绪的 Stable Diffusion 服务。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 Stable Diffusion 2.0 …

uniapp微信小程序自定义封装分段器。

uniapp微信小程序自定义封装分段器。 话不多说先上效果 这里我用的是cil框架 vue3 下面贴代码 组价代码&#xff1a; <template><view class"page"><viewv-for"(item, index) in navList":key"index"click"changeNav(ind…

docker之Harbor私有仓库

目录 一、什么是Harbor 二、Harbor的特性 三、Harbor的构成 1、六个组件 2、七个容器 四、私有镜像仓库的上传与下载 五、部署docker-compose服务 把项目中的镜像数据进行打包持久数据&#xff0c;如镜像&#xff0c;数据库等在宿主机的/data/目录下&#xff0c; 一、什么…

idea将jar包deploy到本地仓库

1、pom.xml文件引入配置&#xff0c;如下参考&#xff1a; <distributionManagement><snapshotRepository><id>maven-snapshots</id><url>http://nexus1.coralglobal.cn/repository/maven-snapshots/</url></snapshotRepository><…

Maven 构建配置文件

目录 构建配置文件的类型 配置文件激活 配置文件激活实例 1、配置文件激活 2、通过Maven设置激活配置文件 3、通过环境变量激活配置文件 4、通过操作系统激活配置文件 5、通过文件的存在或者缺失激活配置文件 构建配置文件是一系列的配置项的值&#xff0c;可以用来设置…

Talk | ACL‘23 杰出论文,MultiIntruct:通过多模态指令集微调提升VLM的零样本学习

本期为TechBeat人工智能社区第536期线上Talk&#xff01; 北京时间10月11日(周三)20:00&#xff0c;弗吉尼亚理工大学博士生—徐智阳、沈莹的Talk已准时在TechBeat人工智能社区开播&#xff01; 他们与大家分享的主题是: “通过多模态指令集微调提升VLM的零样本学习”&#xff…

做一个物联网的后台程序与数据库设计

数据库部分 先设计一个简单的数据库。表结构如下: sql语句如下: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for realtimedata -- ---------------------------- DROP TABLE IF EXISTS `realtimedata`

Godot快速精通-从看懂英文文档开始-翻译插件

视频教程地址&#xff1a;https://www.bilibili.com/video/BV1t8411q7hw/ 大家好&#xff0c;我今天要和大家分享的是如何快速精通Godot&#xff0c;众所周知&#xff0c;一般一个开源项目都会有一个文档&#xff0c;对于有一定基础或者是理解能力强的同学&#xff0c;看文档比…

跨境电商独立站,无货源,轻松卖全球~

在互联网全球化的现在&#xff0c;跨境电商已经成为越来越多企业和个人的选择。但运营过程中总会遇到各种各样的问题&#xff0c;比如库存压力大、语言沟通困难、物流费用高且慢等等。特别是在当下印尼电商禁止令出台&#xff0c;很多在各大电商平台的卖家更是苦不堪言。 因为市…

机器学习基础之《回归与聚类算法(1)—线性回归》

一、线性回归的原理 1、线性回归应用场景 如何判定一个问题是回归问题的&#xff0c;目标值是连续型的数据的时候 房价预测 销售额度预测 贷款额度预测、利用线性回归以及系数分析因子 2、线性回归定义 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(…

翻译docker官方文档(残缺版)

Build with docker(使用 Docker 技术构建应用程序或系统镜像) Overview (概述) 介绍&#xff08;instruction&#xff09; 层次结构&#xff08;Layers&#xff09; The order of Dockerfile instructions matters. A Docker build consists of a series of ordered build ins…

数据挖掘实战(3):如何对比特币走势进行预测?

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法 1、最近邻插值法 1、最近邻插值法 *最邻近插值&#xff1a;将每个目标像素找到距离它最近的原图像素点&#xff0c;然后将该像素的值直接赋值给目标像素 优点&#xff1a;实现简单&#xff0c;计算速度快缺点&…

【C++】【自用】STL六大组件:算法

文章目录 &#x1f53a;sortstable_sort&#x1f53a;reverse&#x1f53a;swap&#x1f53a;find&#x1f53a;max/min&#x1f53a;next_permutation/prev_permutation 全排列binary_searchlower_bound/upper_bound 求下界和上界set_union/set_intersection/set_difference 求…

JNI中调用Java函数

文章目录 一、JNI 注册二、JNI 调用 Java 函数1、实例2、总结3、参考 三、JNI 数据传递四、JNA五、图像传递 一、JNI 注册 JNI 分成静态注册和动态注册 静态注册 cpp 实现 JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv *env, jobject…