`
cyber4cn
  • 浏览: 39294 次
社区版块
存档分类
最新评论

数据库的本质、概念及其应用实践(一)

php 
阅读更多

原文请详见:http://www.ucai.cn/blogdetail/7033?mid=1&f=12

可以在线运行查看效果哦!

 

今天这堂课,分为三个大点,正如标题所指出的,是讨论数据的本质、概念与应用实践。第一点本质的探讨是站在一个更高的高度来分析数据的产生以及各种使用场景,然后将数据相关的存储手段,作一个汇总讲解。而概念,则是一个串讲,主要放在关系数据库上,因为我们六月份公开课,也将以关系型数据库为主。第三点就是通过一些实例来巩固前面两点所讲的内容。

 

一、数据库的出现源起和本质

1.1 数据库的起源

想像一下我们的电脑,有目录,有文件,文件有大小,有位置,有格式,这个是有文件系统开始就有这个概念的,肯定在有一个地方,存储了这些文件的参数或者元数据,而在我们的日常生活中,每一个物体和人,都有其各自不同的特征,当一批量的这些可描述的人的特征,想要数据化存储起来的时候,也就需要有一种格式来保存。除了保存数据之外,我们还得对数据进行管理。这就是数据库出现的背景,并且随着使用场景的越加复杂,数据库本身也有了更多的衍生版本。

所以数据库起源于对数据的存储以及管理。

 

1.2数据库的使用场景

那么我们有几个问题, 基于大家目前的理解,第一个问题是有哪些需要保存的数据种类,有哪些存储方式呢?我们发散一点来想。

 

可以得到如下的情况:

A、在程序中自定义,比如数组,只保存在内存里,等程序停止了之后,数据就没有了。这样可以不可以?

在这个里面存储的反正是描述型数据,也可以是二进制数组。

 

B、保存在一个文本文件里可以不可以,有自己的格式,比如自定义的格式,比如XML,比如JSON格式

这里保存的,只能是描述型数据。

 

C、采用一些文件型数据库,比如支持SQL访问的文本数据库,比如Sqlite、比如Access

除了特定的数据类型,一般也只保存文本描述数据。

 

D、采用 MySQL 这样基于网络和可分布式的数据库系统。

用来保存较多数据量的用户数据、关系数据、交易数据,这些数据要实再快速查询更新。

 

E、当数据量大时,一台设备就不能满足要求,这就需要用到分布式数据库,可能是数据集群

 

F、采用 memcached 这样的软件保存着缓存的数据。

一般用于保存文本数据或者计数。

 

G、采用 fastdfs 这样的分布式文件系统来保存着文件数据。

不用于保存除文件本身描述之外的其他描述数据,用于保存大量的文件。

 

H、采用redis 这样的KVDB 软件来保存简单关系的描述数据,或者特定的结构。

比如用于保存微博数据,用KEY可以迅速定位到微博内容。

 

I、同KVDB类似的,大家有听过队列那几讲的同学吗?是不是也是特殊的数据存储手段呢?一边有人生产数据,一边有人消费数据。

 

J、用于保存地理关系数据,并提供运算。在英文里叫Spatial Data,也就是空间数据。Oracle最擅长,现在MySQL也有空间扩展。

http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

 

 

K、而对于大量的,源源不断的海量数据,相对不那么规则的数据存储,我们可能存储在Hadoop系统中。

 

L、最后再谈一个场景,像百度这样的搜索引擎,他会把他的数据全放在MySQL里,然后去检索吗?显然不是。有自有的索引格式和支持分布式查询的系统 。

 

1.3数据库场景以及分类总结

总结一下:

A、在电脑时代以前,人类就产生了大量的信息,而电脑时代以来,更是产生了大量的数字化的数据。而这些数据库的保存的形式,从上面可以看到,依据不同的场景,不同的保存方式,是多种多样的。有仅在内存中保存,有在文件中保存,有专用严谨的数据库系统保存,也有不那么严谨的KVDB保存。

 

 

B、根据上面的各种存储场景,我们对数据,也做两个简单的分类,一个是结构化数据库和非结构化数据的分类,当然,还有再加一种半结构化数据的。所谓结构化,就是很规整地有属性的一种情况。像一个人,他有身高、体重、年龄,这个描述是结构化的,你给照一张照片,录一段声音,拍一段摄像,尽管这也是数据,但是不是结构化的。对于不同的这两类数据,存储方式也不相同,比如结构化数据是典型的二维表的结构。而非结构化数据就是只以原始数据的形式存储。

上面的场景,大多是结构化数据的处理场景,像文本数据库、MySQL数据库。而在fastdfs上,Hadoop上,就有大量的非结构化数据的存储。

 

 

C、根据数据量本身的大小,我们也可以做一个分类。或者特定的技术应用场景。

比如小数据量数据,我们可能为了方便,就以文本的方式来保存。而对于一个正规的提供服务的网站,像用户数据,比如优才网的用户数据,就会用MySQL数据库来保存,为了访问速度,也会用到memcached这样的缓存软件。也会用fastdfs来保存小文件。而当有大量的日志等数据量产生,需要进行数据分析的时候,比如每天的数据量以几百GT来计的时候,就会用Hadoop 这样的软件。

 

所以,不同的数据量也使用不同的保存方式。小型数据、大中型数据、海量数据或者大数据。

 

D、第四个角度就是从上面可以看出,数据的存储方式,有很多类别,不同类别适用于不同的场景。数据库是很强大的,但是不是所有的场景都合适使用数据库。比如上面讲的全文检索的场景,一般需要用特定的存储,特定的索引方式。如果具体地讲,全文检索中,使用的一种索引,叫倒排索引。

 

二、数据库有哪些概念

好的,聊完了数据以及相关软件的一些使用场景,对于不同场景下使用不同软件有了概念。下面我们来介绍一下,在数据库的领域常用的 一些术语,这些术语,在我们的整个数据库学习中都要用到。

 

由于公开课的时间问题,我们主要交流一下基本概念,对于高级的概念,后面的公开课会持续地讲到。

 

2.1 数据库的基本概念

介绍我们下面数据库的这些概念时,我们以一个公司做为对比。

2.1.1、库

库,就相对于一个公司,下面几乎所有的概念都装在这个公司里的。

在使用数据库之前,我们得在数据库软件上创建数据库。

MySQL 里,同一个连接,只能附着在同一个库上,当然,只要权限允许,也可以实现跨库查询。

创建数据库的语法是

 create database xxx;

只有root 用户能创建库。

 

2.1.2、表

表就相对于,公司的一个部门,这个部门管用户,那个部门管订单。就是一个又一个的表。

表由记录和字段组成。

字段表成的是表定义。

记录组成的是表数据。

 

 

CREATE TABLE `hstesttbl` (

  `k` int(11) NOT NULL AUTO_INCREMENT,

  `v` char(255) NOT NULL DEFAULT '',

  PRIMARY KEY (`k`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

字段定义则有字段名,字段类型,是否为空,是否自增长,缺省值等。

记录则是实际的数据值,同一个表的记录的定义都是一样的。也就是说有相同的特征。

 

2.1.3、视图

视图类就相当于虚拟的项目小组,可以是同一个部门出来的,也可以是跨部门的。

视图之所以说是虚拟,因为没有实际存在的数据。无论是定义,还是数据,都是从别的表里组合起来的。

create view hsview as select * from hstesttbl;

 

mysql> show tables;

+--------------------+

| Tables_in_hstestdb |

+--------------------+

| hstesttbl          |

| hsview             |

+--------------------+

2 rows in set (0.02 sec)

 

mysql> show create table hsview\G;

*************************** 1. row ***************************

                View: hsview

         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `hsview` AS select `hstesttbl`.`k` AS `k`,`hstesttbl`.`v` AS `v` from `hstesttbl`

 

 

从上面的命令可以看出,视图跟表的操作有很多相似。并且从表到视图还能修改字段名。

2.1.4、索引

索引就是相当于部门每个员工的一些用于快速找到员工的属性。比如职位,比如爱好,比如毕业学校。通过这些,就能将部门的人分类,每一次查询都能缩小结果集。

 

对表创建索引是,比如还是上面这个表, alter table hstesttbl add index(xxx);

 

 

2.1.5、键

键就相当于部门每个人的一些最快捷且唯一的联络方式,比如电话、邮箱,微信号,QQ号都是。

添加键跟添加索引,类似,删除键这里介绍一下,

比如:

alter table hstesttbl drop primary key;

 

 

2.1.6、权限

是指公司内部限制的一些纪律,比如公司外部人,是不能知道公司内部的一些事情的。

我们可以通过

grant ALL PRIVILEGES on dbname.* to 'user'@'127.0.0.1' identified by 'password' with grant option;

这样的语句给某用户授权,全权访问某个库。这个这个用户只能访问这个库,在没有获得更多授权的情况下。

 

上面说只有root用户能创建数据库,而对于上面的其他操作,比如创建表,添加视图,新建、删除索引和键,只要经过了上面的授权,就可以做了。

 

2.1.7SQL

SQL就相当于公司的一些规定,指令。比如我们在公司里交流说,可以发布到生产环境了。听起来一句简单的话,包含着可能进行了产品确认,各种测试,可以由运维上线了。

SQL是我们同数据库打交道的指令。上面其实在讲各个概念时,已经都讲过了一些SQL命令,我想这里提几个点。

 

手写命令,非常重要,优才网要求自己的学员都要有手写命令的能力,不能离开phpmyadmin就没有办法干活。

 

SQL上面尽管介绍了这么多,我们对它进行一个分类,其实这个分类早有人做了。主要是为DDLDMLDCL(当然还有一个TCL,我们今天不讲)。

 

1)数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。上面的,大多是DDL

2)数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。 这就是我们平常所熟知的增删改查操作。

3)数据控制(DCL)。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。这个就是我们上面也有涉及,权限处理。

 

 

2.2 学术性的概念

•1、范式与冗余

第一范式,列不可以分割,比如兴趣字段,它里面,可能写了篮球、电影等多项。原则上来讲,这个表是不满足第一范式的。应该专门建立一个用户兴趣表,有uid和兴趣。然后一个人有多条记录。

      所以在数据库字段定义时,需要显式地指明数据类型,除了文本类型之外,你很难往一个字段里附加多个信息。

 

第二范式,主键决定了其他全部属性,比如一个班级学生表,一个学号,决定了学生其他的信息,比如有一个表,里面有学号、学院编号、学生姓名、年龄、学院、院长。学号和学院编号是主键,看起来没有错,学生在这个学院编号里,决定了哪个学院,院长是谁谁谁。不过这是不满足第二范式的,因为学院和院长不是由学号这个主键来决定的,而是由学院编号来决定的。所以要分拆。

 

和三范式,其他属性全由主键决定, 比如还是上面这个表,里面有学号、学院编号、学生姓名、年龄、学院、院长。学号是主键,看起来没有错,学生在这个学院里,院长是谁谁谁。不过这是不满足第二范式的,因为院长不是由学号这个主键来决定的,而是由学院来决定的。所以要分拆。

 

 

•2ACID

原子性  (Atomicity) , 不可中间失败。比如说,我们买东西,一边是买家付款,从买家账户扣除,另一边是存钱入卖家账户,这分了两步,这不是原子的。因为可能中间失败。比如扣钱成功,存钱未成功。

 

一致性(Consistency),还是上面这个例子,交易完成后,数据一致,收支相抵。不能一边多,一边少。

 

隔离性(Isolation),避免并发混乱,很多数据,一个客户访问时没有问题,多个用户在高并发时访问,也要满足数据不会错乱。

 

持久性(Durability),永久保存,就是不要丢失。不能一关机没有了,即使丢一条也不成。

 

 

2.3 更多高级术语

1、存储引擎 、事务、复合索引、连接池、备份、恢复

2、主从复制、行锁定、表锁定、慢查询、二进制日志、临时表、内容分发、同步、数据库分区、分库、分表、水平拆分、垂直拆分

这更多的高级术语,我们在后面再交流,或者在全栈工程师课程中再交流。

 

 

三、各种数据库的关系、实践

3.1、自制简单文本格式(甚至在PHP中,用数据保存配置)

 

A、比如有一个AngularJS的示例项目,就用json保存示例数据的格式。



 
BPHP保存配置数据就更加常见了,TP就是一个典型。



 

3.2、文本数据库(php text db api

 

我们从 http://www.c-worker.ch/txtdbapi/index.php#download下载了这个比较有名的 文本数据库引擎。

文本数据的使用场景这些交待一下。

1、比如你的虚拟主机,支持PHP,但是不支持MySQL ,也不支持SQLite的时候就可以发挥用场了。

 

下载了需要修改一下,

txt-db-api.php 的两个配置。

$API_HOME_DIR=dirname(__FILE__).DIRECTORY_SEPARATOR;    

$DB_DIR=dirname(__FILE__).DIRECTORY_SEPARATOR;

 

通过 http://samples.app.ucai.cn/20140603/phptxtdb/examples/addressbook.php?lang=de&char=M

就可以看到这个文本数据库的运行的例子。

然后就可以看到结果保存了。



 
果真是文本不是?

      

 

  • 大小: 87.4 KB
  • 大小: 150.4 KB
  • 大小: 54.6 KB
0
0
分享到:
评论

相关推荐

    《数据库及其应用》实验2.pdf

    《数据库及其应用》实验2.pdf 本实验报告的目的是掌握关系数据库的完整性基本概念,了解Access数据表视图的基本功能,并掌握在数据表视图中定制各种不同显示方法的操作。 一、实验目的及要求 1. 理解并掌握关系...

    数据库王珊版.PPT

    10. **分布式数据库和云数据库**:随着云计算的发展,分布式数据库和云数据库的概念及其在大数据环境中的应用也变得越来越重要。 "数据库系统概论课件2008"很可能包含了上述部分或全部内容,通过学习这些知识,可以...

    数据库建模实践指南(共62张PPT).pptx

    在学习本章时,读者需要具备一定的基础知识,如了解规范化理论的原因、各范式的基本概念及其优点和缺点。同时,应理解关系数据库规范化设计的实质,即属性原子化、主键原子化和实体原子化,并能够评估数据库设计的...

    《数据库原理与应用》北师珠必备复习重点.doc

    以上内容涵盖了《数据库原理与应用》课程的基础知识点,对于理解数据库的基本概念、模型、结构及其操作至关重要。通过对这些知识点的学习,可以帮助学生更好地掌握数据库技术的核心内容,为后续深入学习和实践打下...

    大数据与软件学院数据库第一次实验.doc

    实验中,学生使用T-SQL语句还原了Library数据库到一个新的实例Library_1,体现了恢复策略的实际应用。 此外,实验还涵盖了表的操作,包括创建新表(如Reader2)、复制表结构(创建Readcopy)、添加列(Email列)、...

    数据库原理(第四版)教案 电子信息工程学院课件

    关系代数是一种形式化的查询语言,它是SQL的基础,帮助我们理解数据库操作的本质。 3. 数据库设计:数据库设计包括需求分析、概念设计、逻辑设计和物理设计。ER图在概念设计中扮演关键角色,用于表示实体、关系和...

    【教师资格考试资料】《数据库及其建立过程》答辩题目及解析.doc

    【教师资格考试资料】《数据库及其建立过程》答辩题目及解析文档主要涵盖了教育领域中关于数据库理论及其在教学实践中的应用。以下是对这些题目及解析的详细阐述: 第一题涉及的是如何解决课堂小组讨论流于形式的...

    数据库应用技术SQL Server 2000简明教程电子教案

    《数据库应用技术SQL Server 2000简明教程电子教案》是一份全面介绍SQL Server 2000的教程,旨在帮助初学者逐步掌握这一经典数据库管理系统的基础知识和高级特性。SQL Server 2000是微软公司推出的企业级数据库解决...

    数据库系统设计报告与实现

    本报告将深入探讨数据库的设计过程,包括需求分析、概念模型设计、逻辑模型设计和物理模型设计,并结合具体的实现策略,帮助理解如何构建一个有效的数据库系统。 首先,需求分析是设计的起点,它涉及到对系统功能、...

    数据库系统概论答案第四版

    它通常由数据库、数据库管理系统(及其开发工具)、应用系统和数据库管理员组成。数据库系统与数据库是两个不同的概念,前者是一个人机交互的系统,后者是系统的一个组成部分。在实际使用中,人们常将二者混同,但在...

    咖啡店信息管理数据库设计说明.doc

    《咖啡店信息管理数据库设计说明》是一份详细指导如何为咖啡店构建信息管理系统的文档,旨在帮助学生理解和实践数据库的设计与应用。这份设计手册由杭州电子科技大学信息工程学院的学生完成,作为《数据库课程设计》...

    Abap基础学习文档101_用逻辑数据库访问数据库表.doc

    逻辑数据库实质上是一种特殊类型的ABAP程序,它可以将多个数据库表的数据组合起来,并按照特定的层次结构组织数据。 **特点:** - **处理复杂数据结构**:逻辑数据库特别适合于处理具有外来关键字相关联的多表结构...

    四级数据库

    例如,关系数据库系统基于关系数据模型,这一模型源自离散数学中的“关系”概念;当用户访问数据库时,数据库管理系统对查询操作的处理类似编译系统对程序的编译过程,遵循一系列复杂的算法与逻辑。 #### 数据模型...

    论文:时空数据模型概念及分类

    在选择模型的应用、实践和整合其他非时空数据模型时,需要从本质上加以区别,正确阐述模型间的本质区别。对当前时空数据模型已有的分类方法进行归纳和分析,肯定和完善了文献[2]的分类方法,此方法能更好解释众多...

    大连海事大学2006年硕士研究生招生考试试题_数据库_

    一个关系中作为外码的属性在某些情况下可以取空值,这取决于具体的应用场景和数据库设计规则。外键的存在是为了维护数据的一致性和完整性,确保引用完整性。然而,在某些设计中,允许外键字段为NULL,以便处理尚未...

    数据库课程总结与体会.docx

    根据给定文件的信息,我们可以提炼出以下关于数据库课程的关键知识点及其相关体会: ### 数据库课程初体验 - **初印象**:初次接触数据库时可能会觉得教材厚重,学习难度较大。 - **实际体验**:实际上,只要能跟...

    中国电信用户数据库- 统一认证的业务指引-v2.0

    帐号经营本质上是客户经营的一种表现形式,通过构建统一认证体系,可以实现对用户的精细化管理和服务。中国电信用户数据库(简称UDB)作为实现应用层统一认证的基础网络平台,其重要性不言而喻。 ##### 1.2 适用...

Global site tag (gtag.js) - Google Analytics