数据库从头学起
当然我们从头学习数据库内容,对于我自己来说,我需要学习的是基本数据库操作的方法,我学习基础,然后一点点丰富自己的库存容量
我们在学习数据库前需要新建一个数据库容器,在linux中新建也可以,利用几句简单的数据命令就可以在自己的系统中新建一个数据库。当然这个数据库跟你在什么平台上创建并没有太大关系https://docs.microsoft.com/zh-CN/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash
这个网址可以帮助你创建一个属于你的数据库。
我们学习数据库前,需要一些准备工作,比如一些数据的表格,当然这些都很好操作,只要链接上自己的数据库就行了。
我的话选择利用vs code 超链接到我在ubantu
操作系统中自己建立的数据库,当然我们新建的数据库里面是没有任何数据的,我学习的资料来自一本书SQL必知必会 by 福达
,非常好用的一本书,当然看我这篇文档的兄弟也可以不用去专门找这本书,我和大家一起学习。
在学习之前我们应该在其中准备好应该用到的数据文件,方便我们快速将其利用起来,这本书给了一些自动创建的文档https://forta.com/books/0135182794/
,我们只需要将所有内容复制到我们自己的数据库命令中执行即可。
在这本书后有自己专属的习题,大家可以一起来做一下,官方也给出了答案https://forta.com/books/0135182794/challenges/
这里面我们要用到几个表格:
Vendors表的列
vend_id | 唯一的供应商ID
vend_name | 供应商名
vend_address | 供应商的地址
vend_city | 供应商所在城市
vend_state | 供应商所在州
vend_zip | 供应商地址邮政编码
vend_country | 供应商所在国家
Products表的列
prod_id | 唯一的产品ID
vend_id | 产品供应商ID(关联到Vendors表中的vend_id)
prod_name | 产品名
prod_price | 产品价格
prod_desc | 产品描述
Customers表的列
cust_id | 唯一的顾客ID
cust_name | 顾客名
cust_address | 顾客的地址
cust_city | 顾客所在城市
pcust_state | 顾客所在州
cust_zip | 顾客地址邮政编码
cust_country | 顾客所在国家
cust_contact | 顾客的联系名
cust_email | 顾客的电子邮件地址
Orders表的列
order_num | 唯一的订单号
order_date | 订单日期
cust_id | 订单顾客ID(关联到Customers表的cust_id)
OrderItems表的列
order_num | 订单号(关联到Orders表的order_num)
order_item | 订单物品号(订单内顺序)
prod_id | 产品ID(关联到Products表的prod_id)
quantity | 物品数量
item_price | 物品价格
首先我们应该学习数据库是有什么基本组成,我们在数据库中都存有什么东西。 数据库中是不区分大小写的,但是平常我们在利用他们的时候,会将语句,关键字,用大写来跟其他的东西区分开来。 数据库中我们会区分很多种数据库管理系统例如:(DB2,Oracle,SQLite等),每个系统中的一些输入方式都不太一样,我们可以在这里主要介绍一种管理系统来写如我们的管理程序。
数据
数据就是描述事物的符号记录集合。
数据库 DB
以某种有组织的方式存储的数据集合。存放数据的仓库。
长期存储在计算机内,有组织的、可共享的大量数据的集合。
数据库管理系统 DBMS
是位于用户与操作系统之间的一层数据管理软件(系统软件)
数据库管理员 DBA
负责全面管理和控制数据库系统。
数据库系统 DBS
指在计算机系统中引入数据库后的系统
是由数据库,数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。
数据管理技术发展的推动力
- 应用的需求
- 计算机硬件技术的发展
- 计算机软件系统的发展
数据管理技术的发展
人工管理阶段 | 文件系统阶段 | 数据库系统阶段 | ||
---|---|---|---|---|
处于什么时代 | 20世纪50年代 | 20世纪50年代——60年代中期 | 20世纪60年代至今 | |
背景 |
应用背景 |
科学计算 | 科学计算、管理 | 大规模管理 |
硬件背景 |
无直接存取存储设备 | 磁盘、磁鼓 | 大容量磁盘 | |
软件背景 |
没有操作系统 | 有文件系统 | 有数据库管理系统 | |
处理方式 |
批处理 | 联机实时处理、批处理 | 联机实时处理、分布处理,批处理 | |
特点 |
数据的管理员 |
用户(程序员) | 文件系统 | 数据库管理系统 |
数据面向的对象 |
某一应用程序 | 某一应用 | 现实世界 | |
数据的共享程度 |
无共享,冗余度极大 | 共享性差,冗余度大 | 共享性高,冗余度小 | |
数据的独立性 |
不独立,完全依赖于程序 | 独立性差 | 具有高度的物理独立性和一定的逻辑独立性 | |
数据的结构化 |
无结构 | 记录内有结构,整体无结构 | 整体结构化,用数据模型描述 | |
数据控制能力 |
应用程序自己控制 | 应用程序自己控制 | 有数据管理系统提供数据安全性、完整性、并发控制和恢复能力 |
独立性
-
物理独立性
程序和用户不考虑存储过程和方式
-
逻辑独立性
程序和用户不考虑结构的变化
信息处理的过程
-
现实世界————概念模型
由数据库设计人员完成,不依赖于任何具体的数据库系统。
-
概念模型————逻辑模型
由数据库设计人员完成,或者借助辅助设计工具完成,依赖具体的系统。
-
逻辑模型————物理模型
由DBMS完成。
数据库三大要素
- 数据结构
- 数据操作
- 数据的完整性约束条件
概念模型
-
实体
客观存在并且可以相互区别的事物,任何独立的事物,抽象的概念,对象之间的联系。
-
属性
一个实体可以有多个属性来描述,一个实体中某一特性称之为属性。
-
码
唯一标识
实体属性集称为码(又称“候选码”)。 -
域
属性的
取值范围
称为这个属性的域。是一组具有相同数据类型的值的集合。
-
实体型
具有
相同属性
的实体称为同类实体,用实体名和属性集共同表示同类实体称为实体型。 -
实体集
同类实体的集合。
-
联系
- 1:1 一对一 可隐含在实体对应的关系中
- 1:n 一对多 可隐含在尸体对应的关系中
- m:n 多对多 独立,直接用关系表示
完整性约束
- 实体完整性
- 参照完整性
- 外码
- 用户自定义完整性
关系
一张规范化的二维表。
关系的描述称为关系模式。
- 列是同质的
- 不同的咧可以出自统一个
- 列的顺序可以任意交换
- 任意两个远足的候选码数值不能相通
- 原子不可再分
形式化表示
R(U,D,DOM,F)
- R—–关系名
- U—–组成该关系的属性名集合
- D—–属性组U中属性所来自的域
- DOM—–属性向域的映像集合
- F—–属性间数据的依赖关系集合
关系类别
- 基本表 实际存在的表,是实际存储数据的逻辑表示。
- 查询表 查询结果对应的表
- 视图表 由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
候选码
候选码 可以有多个
每个候选码可以包含很多属性。
笛卡尔积
可以用一张二维表来表示
笛卡尔积的结果是没有实际语义的
- 元组 t
- 分量 d
- 基数 用来表示笛卡尔积的元组个数
- 关系 r
主码属性一定是主属性
关系操作
- 查询操作
- 更新操作
关系数据语言
- 关系代数语言
总结:
实体————个体独立存在
实体型————抽象出来的对同类实体的整体描述
实体集————是多个实体型的集合
表
表是一种结构化文件,可以用来存储某种特定类型的数据,当然数据库中每个表都是不一样的名字,表具有一些特性这些特性定义了数据在表中如何存储。
列和数据类型
所有表都是由一个或者多个列组成。 表中每一列都需要定义一个数据类型,来规定其中的数据。
行
代表表中的一条记录。如果把表想象成一个网格,网格中垂直的为列,水平的则称为行。
主键
代表了这一列中的值只能唯一,换句话说也就是说通过查找这一行的值,能够精确定位到每一条记录。