数据库基础

Catalog
数据库就是数据的仓库,而DBMS是数据库的“管理员”。一些企业即生产食品又生产农用物资,这些产品都要保存到仓库中,同时企业内部也有一些办公用品需要保存到仓库中。

如果这些物品都保存到同一个仓库中的话会造成下面的问题:

1,不便于管理。食品的保存和复印纸的保存需要的保存条件是不同的,食品需要低温保鲜而复印纸则需要除湿,不同类的物品放在一起加大了管理的难度;

2,可能会造成货位冲突。食品要防止阳光直射造成的变质,因此要摆放到背阴面,同时为了防止受潮,也要把它们摆放到高处;办公用胶片也要避免阳光直射,所以同样要摆放到背阴面,而且胶片也要防潮,所以同样要把它们摆放到高处。这就造成两种货物占据的货位相互冲突了。

3,会有安全问题。由于所有物品都放到一个仓库中没有进行隔离,所以来仓库领取办公用品的人员可能会顺手牵羊将食品偷偷带出仓库。

既然是“仓库”。所有数据库系统也存在以上类似问题,如果企业将人力资源数据和核心业务数据都保存到一个数据库中同样会造成下面的问题:

1,不便于管理。为了防止数据丢失,企业需要对数据进行定期备份,不过和核心业务数据比起来人力资源数据的重要性要稍差,所以人力资源数据只要一个月备份一次就可以了,而核心业务数据则需要每天都备份。如果将这两种数据保存在一个数据库中会给备份工作带来麻烦。

2,可能会造成命名冲突。比如人力资源数据中需要将保存员工数据的表命名为Persons, 而核心业务数据也要将保存客户数据的表也命名为Persons,这就会相互冲突了。

3,会有数据安全问题。由于所有的数据都保存在一个数据库中,这样人力资源系统的用户也可以访问核心业务系统中的数据,很容易造成数据安全问题。

对于这样的问题,DBMS采用了多数据库的方式来保存不同类别的数据,一个DBMS可以管理多个数据库,我们将人力资源数据保存在HR数据库中,而将核心业务数据保存在BIZ数据库中,我们将这些不同数据库叫做Catalog(在有的DBMS中也称为Database,即数据库)。采用多Catalog以后可以给我们带来如下好处:

1,便于对各个Catalog进行个性化管理。DBMS都允许我们指定将不同的Catalog保存在不同的磁盘上,由于人力资源数据相对次要一些,因此我们可以将HR保存在普通硬盘上,而将BIZ保存在RAID硬盘上。我们还可以对每个Catalog所能占据的最大磁盘空间、日志大小甚至优先级进行指定,这样就可以针对不同的业务数据进行个性化定制了。

2,避免了命名冲突。同一个Catalog中的表名是不允许重复的,而不同Catalog中的表名则是可以重复的,这样HR中可以有Persons表,而BIZ中也可以有Persons表,二者结构可以完全不相同,保存的数据也不会互相干扰。

3,安全性更高。DBMS允许为不同的Catalog指定不同的用户,并且可以限定用户能访问的Catalog。比如用户hr123只能访问HR,而用户sales001只能访问BIZ。这大大加强了系统数据安全性。


表 Table
虽然我们已经将不同用途的物品保存在不同的仓库中,但是在同一个仓库中数据的保存仍然存在问题。比如食品分为熟食、生肉、大米等,如果把它们随意的堆放在一起,就会难以管理,当要对大米进行提货的时候,就必须在一堆的食品中翻来翻去。解决这个问题的方法就是将仓库划分为不同的区域,熟食保存在熟食区,生肉保存在生肉区,而大米则保存在大米区。

DBMS中也存在类似的问题,虽然我们将核心业务数据保存在BIZ数据库中了,但是核心业务数据也有很多不同类型的数据,比如客户资料、商品资料、销售员资料等,如果将这些数据混杂在一起的话将会管理起来非常麻烦,比如我们要查询所有客户资料的话就必须将所有数据查询一遍。解决这个问题的方法就是将不同类型的资料放到不同的“区域”中,我们将这种区域叫做“表”Table。将客户资料保存到Customers表中,将商品资料保存在Goods表中,而将销售员资料保存在SalesMen表中,这样当需要查找商品的时候只要到Goods表中查找就可以了。


列 Column
通常,以不标准的格式保存数据造成数据十分混乱,想要从数据库中取出合适的数据也会非常麻烦。为了解决这个问题,我们规定下面这种标准的格式:
姓名/部门/入职时间
这里的姓名,部门和入职时间就被称为员工表的列Column,有时候也叫作字段,每个列描述了数据的一个特性。


数据类型
通常,规定了各个列的数据类型(DataType),数据类型规定了一个列中能填写什么类型的数据,减少了不规范数据出现的几率。

除了可以对数据进行规范以外,数据类型还有下面的作用:

1,提高效率。对不同的数据赋予不同的类型能够使得数据库更好的对数据进行存储和管理,从而减少空间占用并且提供数据的访问速度。比如,如果将数字123454321以文本类型存储的话将会占用9字节的存储空间,而以整数类型保存的话将只需要占用4字节的存储空间。

2,能够确定对数据进行操作所需要的正确处理方式。比如如果是整数类型,那么123+234被解释为两个整数的加法运算,所以其结果是357;如果是文本类型,那么123+234则会被解释为两个字符串的相连操作,所以其结果是123234。


记录 Record
记录有时可以被称为行 Row,可以通俗的认为它是数据表中的一行数据。以员工表为例,一个公司的员工表中的数据是这样的:

姓名 部门 入职时间
马小虎 产品开发部 2003年5月
王小二 技术支持部 2005年7月
白站堂 后勤部 1998年3月
李最达 销售部 2001年3月

这里每一行数据就代表一个员工的资料,这样的一行数据就叫做一条记录。表是由行和列组成的一张二维表,这就是关系数据库中最基本的数据模型。


主键 PrimaryKey
可以唯一标识一行记录的字段,就是此表的主键。
也可以将两个字段在一起来唯一标识一名员工,称为复合主键


索引 Index
对某一个字段进行索引,即对其值进行排序。
索引会占据一定磁盘空间;
索引减慢了数据插入和删除的速度;


表关联
将两张表通过字段关联起来的方式称为“表关联”,关联到其他表主键的字段被称为“外键”,表关联是关系数据库的核心理念,它使得数据库中的数据不再互相孤立,通过表关联可以表达非常复杂的数据关系。


数据库语言——SQL
DBMS是一种系统软件,我们要与它交互的时候就必须使用某种语言,在数据库发展初期每一种DBMS都有自己特有的语言,不过渐渐的SQL成为所有DBMS的主流语言。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。

SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据均支持SQL。

SQL的英文全称是Structured Query Language,它是1974年由Boyce和Chamberlin提出的,并且首先在IBM的关系数据库原型R系统(system R)上实现。它的前身是1972年提出的SQUARE(Specifying Queries As Relational Expression)语言,在1974年做了修改,并且改名为SEQUEL(Structured English Query Language)语言,后来SEQUEL简化为SQL。

SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。使用它,用户无需指定对数据的存放方法,也不要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操作对象,所有SQL语句接收集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语言可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的事件,只需要一个SQL语句就可以实现。

SQL具有下面4个主要的功能:1创建数据库并定义表的结构;2查询需要的数据;3更新或者删除指定的数据;4控制数据库的安全。使用SQL我们可以完成和DBMS的几乎所有交互任务。

比如我们要查找年龄小于18岁的员工信息,那么我们只要执行下面的SQL就可以:
SELECT * from Employees where age <18
比如我们要将所有职位为“名誉总裁”的员工删除,那么就执行下面的SQL:
DELETE from Employees where position = ‘名誉总裁’
由此看出,我们只是描述了要做什么,至于怎么做则由DBMS决定。

我们可以通过3种方式执行SQL:

1,在工具中执行,各个DBMS几乎都提供了工具用于执行SQL语句,比如Microsoft SQL,Server的 Management Studio、DB2的命令中心、Oracle的SqlPlus或者MySQL的Query Browser。在这些工具中我们只要输入要执行的SQL然后点击【执行】按钮就可以得到执行结果。

2,以编译的方式嵌入到语言中。在这种方式中我们可以把SQL直接写到代码中,在编译的时候由编译器来决定和数据库的交互方式。比如PowerBuild、C等就采用这种方式。

3,以字符串的形式嵌入到语言中,SQL语句以字符串的形式写到代码中,然后由代码将其提交到DBMS,并且分析返回的结果。目前这是大部分支持数据库操作的语言方式,比如C#、Java、Python、Delphi和VB等。

由于嵌入到语言中的执行方式是严重依赖宿主语言的,而本书不假定用户使用任何编程语言。

IBM是SQL语言的发明者,但是其他的数据库厂商都在IBM的SQL基础上提出了自己的扩展语法,因此形成了不同的SQL语法,对于开发人员来说,使用这些有差异的语法很头疼。因此早在1986年美国国家标准化协会(ANSI)为SQL制定了标准。但是由于种种原因,各个数据库的SQL语法仍然有很大差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Friedy星期五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值