3.3 数据定义

news2024/11/15 23:30:16

思维导图:

 前言:

**核心概念**:
- 关系数据库支持**三级模式结构**:模式、外模式、内模式。
- 这些模式中包括了如:模式、表、视图和索引等基本对象。
- 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 ZHANG
    CREATE 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 AS
        SELECT Sno, Sname, Sage FROM Student WHERE Sdept = 'IS';
        
        DROP TABLE Student RESTRICT;  // Error
        DROP 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.coloradmin.cn/o/1083747.html

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

相关文章

AnolisOS升级SSH,不升级SSL

由于ssh有漏洞需要升级&#xff0c;但是为了最小化升级不影响ssl&#xff0c;因为ssl里面带了加密库&#xff0c;系统中很多核心服务的加密都是用ssl进行加密的&#xff08;像网络服务&#xff0c;系统用户登录等&#xff09;&#xff0c;如果ssl升级出现不兼容&#xff0c;就可…

【Python语义分割】Segment Anything(SAM)模型全局语义分割代码+掩膜保存(二)

我上篇博文分享了Segment Anything&#xff08;SAM&#xff09;模型的基本操作&#xff0c;这篇给大家分享下官方的整张图片的语义分割代码&#xff08;全局&#xff09;&#xff0c;同时我还修改了一部分支持掩膜和叠加影像的保存。 1 Segment Anything介绍 1.1 概况 Meta A…

201、RabbitMQ 之 Exchange 典型应用模型 之 工作队列(Work Queue)

目录 ★ 工作队列介绍代码演示测试注意点1&#xff1a;注意点2&#xff1a; ★ 工作队列介绍 工作队列&#xff1a; 就是让多个消费者竞争消费同一个消息队列的消息&#xff0c;相当于多个消费者共享消息队列。 ▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列 ▲ 消息队…

MS4344:24bit、192kHz 双通道数模转换电路

MS4344 是一款立体声数模转换芯片&#xff0c;内含插值滤波器、 multi-bit 数模转换器、输出模拟滤波器。 MS4344 支持大部分 的音频数据格式。 MS4344 基于一个带线性模拟低通滤波器的 四阶 multi-bit Δ-Σ 调制器&#xff0c;而且本芯片可以通过检测信号频率 和主时钟频…

【Axure高保真原型】冻结固定中继器表格首行+首尾列

今天和大家分享冻结固定中继器表格首行首尾列的原型模板&#xff0c;我们可以滚动或者拖动滚动条上下左右查看表格更多的数据&#xff0c;表格的首行和首尾两列都是固定的&#xff0c;鼠标移入对应行会有高亮显示的效果&#xff0c;点击操作列的删除按钮可以删除该行数据。那这…

智能油烟机 优化烹饪体验

如果说空调是夏天最伟大的发明&#xff0c;那么油烟机则是健康厨房的伟大推进者。随着科技的发展&#xff0c;智能化的油烟机逐渐走进了人们的日常生活。每当我们在爆炒、油炸食物的时候&#xff0c;油烟总能呛得人眼睛痛、鼻子难受&#xff0c;传统的油烟机面前我们还需要手动…

蒙自源荣登“2022年度中国快餐TOP100”榜单!

2023年9月26日&#xff0c;由中国烹饪协会主办的第27届中国快餐产业大会在浙江宁波盛大召开。 对于行业而言&#xff0c;这是一次至关重要的聚会。本次大会以“增量博弈&#xff0c;智造无限机遇”为主题&#xff0c;聚集了众多餐饮业的意见领袖&#xff0c;共同探讨行业发展焦…

第二证券:市净率高好还是低好?

市净率是一个衡量公司股票投资价值的指标&#xff0c;通过比较公司股票价格和公司每股净资产的比值来评估公司股票的估值水平。市净率高好还是低好这个问题并没有一个简单的答案&#xff0c;取决于具体的市场环境和投资者的需求。本文将从多个角度分析市净率高好还是低好。 首…

云HIS医院信息化管理平台源码,SaaS模式、springboot框架

HIS系统作为医院信息化的核心业务系统&#xff0c;如今已成为各个医疗机构的必备品了。大到三级二级医院&#xff0c;小到社区卫生服务中心&#xff0c;门诊&#xff08;门诊管理系统也可以理解为门诊的his系统&#xff0c;只是功能简单&#xff0c;模块较少&#xff09;。随着…

STM32F103C8T6一些集成模块(ADC)

ADC ADC&#xff0c;Analog-to-Digital Converter的缩写&#xff0c;指模/数转换器或者模数转换器 [1] 。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号&#xff0c;例如温度、压力、声音或者图像等&#xff0c;需要转换成更容易储存、处理和发射的…

Git 速通以及常用指令!!

参考视频 01 - Git - 教程简介_哔哩哔哩_bilibili 在需要使用git的文件夹打开git bash&#xff0c;指令如下↓ 当然图形化界面也很香&#xff01;github desktop也很舒服&#xff01; 查看文件 版本号 git cat-file -p 版本号 仓库操作 在当前文件夹下创建git仓库 git ini…

轻量级Composition

MEF&#xff0c;全称Managed Extensibility Framework&#xff08;托管可扩展框架&#xff09;。MEF是专门致力于解决扩展性问题的框架。MEF 位于 ComponentModel.Composition 程序集中&#xff0c;添加 System.ComponentModel.Composition 和 System.ComponentModel.Compositi…

是谁制造了TikTok的商业化困境?

随着社交媒体的崭露头角&#xff0c;TikTok已成为数字营销界备受瞩目的新星。这款以短视频为特色的应用程序在全球范围内拥有数亿用户&#xff0c;吸引了众多品牌和创业者的关注。 然而&#xff0c;尽管TikTok拥有巨大的用户基础和潜力&#xff0c;但它也面临着商业化方面的一…

如何在会计面试中展现自己的优势?

在会计面试中展现自己的优势是非常重要的&#xff0c;因为这将决定你是否能够脱颖而出并获得这个职位。下面是一些可以帮助你展示自己优势的方法&#xff1a; 1. 准备充分&#xff1a;在面试前&#xff0c;确保你对公司的背景和业务有所了解。研究公司的财务报告和新闻&#xf…

搞流式计算,大厂也没有什么神话

抖音、今日头条&#xff0c;是字节跳动旗下最受用户欢迎的两款产品&#xff0c;也是字节跳动的门面。而在这背后&#xff0c;是众多技术团队在支撑&#xff0c;流式计算就是其中一支。 不过&#xff0c;即使是在字节跳动&#xff0c;搞流式计算也没有神话。只有一群年轻人&…

软件测试学习(二)静态白盒测试、动态白盒测试、配置测试、兼容性测试、外国语言测试

静态白盒测试&#xff1a;检查设计和代码 静态是指不启动&#xff0c;白盒是指看内部代码。 静态白盒测试是在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码&#xff0c;从而找出软件缺陷的过程&#xff0c;有时称为结构化分析。 进行静态白盒测试的首要原因是尽…

使用antd-pro脚手架搭建react ts项目

Pro 中使用 TypeScript 来作为默认的开发语言&#xff0c;TypeScript 的好处已经无须赘述&#xff0c;无论是开发成本还是维护成本都能大大减少&#xff0c;是中后台开发的必选。 初始化 提供了 pro-cli 来快速的初始化脚手架。 # 使用 npm npm i ant-design/pro-cli -g pro…

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

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

“五度情报站”微信小程序上线,让情报信息唾手可得!

当下&#xff0c;全球经济迅速发展&#xff0c;企业的市场竞争环境日益激烈&#xff0c;面对这样的严峻形势&#xff0c;情报信息的获取、分析和应用对于企业的发展变得至关重要。‘五度易链’作为中国产业大数据服务先锋&#xff0c;围绕企业对于情报信息的多元化需求&#xf…

elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

目录 1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结 1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.实现…