[IT技术] 数据库这门课为什么这么难学,该怎么学?

[复制链接]
tjjiori 发表于 2023-10-9 03:14:30|来自:中国 | 显示全部楼层 |阅读模式
我们用的教材是:


感觉好难学啊
全部回复5 显示全部楼层
一只拖鞋 发表于 2023-10-9 03:15:07|来自:中国 | 显示全部楼层
数据库难学吗?我觉得也没有那么难。数据库的体系的搭建应该是非常有趣而且自然的。如果你觉得难学,那很可能是没有用对资料。这里推荐一个很好的数据库学习资源,PingCAP的一个github项目:
https://github.com/pingcap/awesome-database-learning强推一下里面提到的courses:
CMU Database Systems (15-445/645), thanks to Andy Pavlo
CMU Advanced Database Systems (15-721), thanks to Andy Pavlo
UC Berkeley Introduction to Database Systems
Stanford Database System Implementation
Let's Build a Simple Database, thanks to cstack
每一门都是非常有趣非常好的课程,学习的话一定要完成作业。从工程角度而言,几门导论课扎实地学了一门之后,找实习/工作应该就不愁了。从research角度来说,Andy的两门课程学得扎实了之后,甚至可以直接尝试自己想idea发sigmod/vldb了。
zgts 发表于 2023-10-9 03:16:03|来自:中国 | 显示全部楼层
数据库一点不难学,问题是很多教材的理论和实践脱节。
我本科和研究生期间都上过数据库课程,多是讲理论,不讲实践,其实很多理论是制造数据库软件的人才需要深挖的(我不是说这些知识理论没用啊),如果从实用角度出发,直接找一个实际项目用某个数据库开干要学得快得多。
在实际项目中,往往也不会严格遵守第三范式,这进一步让人觉得书本上学的和工作不一样,这也是教材很让人遗憾的一个地方。
总之,学数据库先明确自己的目标,是要学做一个数据库软件,还是学做一个使用数据库的软件,目标明确了好办事。
zah1111 发表于 2023-10-9 03:17:00|来自:中国 | 显示全部楼层
数据库这个东西,(曾经)就是一个数据管理的系统级软件,事实上,Oracle数据库是可以不要操作系统支持的。自NoSQL兴起后,数据库就是一个专门用于数据管理的计算机系统,NoSQL多半是分布式的,当然memcached、Redis之类的产品或系统可以配成单机。
在数据库的教科书,DB、DBMS、DBM这几个概念是不同的。但是,我觉得这样不对。也许在当时,这种认知有一定的道理,但是,到了今天,层次结构已经成为系统设计的主要方法,所以,我们应该说,数据库是一个层次结构的系统,类似于我们把计算机系统划分为四个层次、把TCP/IP网络划分为五个层次,以及B/S系统的层次化设计办法。
从数据库软件及其应用的设计需求来看,应该满足数据管理、系统软件、资源管理、数据访问方法、计算处理、编程接口等。作为一个计算机系统,数据库同样采用分层设计,同样是一个四层结构的计算机系统。所以:

  • 既然是数据管理,那么就必然服从数据结构的一般原理。
  • 既然是系统级软件,那么必然服从软件设计的一般原理。
  • 既然数据是一种计算机资源,那么必定服从资源管理的一般原理。
  • 既然有数据访问,那么必然有数据访问的空间邻近性和时间邻近性。
  • 既然是一种计算,那么必然服从一种计算模式(不同的数据结构,计算模式不同)。
  • 既然提供了一种语言,那么必然服从语言设计的一般规律(哲学理念)。
  • 既然数据元素之间有关系,那么必然要提供描述这种关系的方式。
  • 既然是一个计算机系统,那么同样是一个底层为硬件,顶层为应用的层次结构。
  • 既然是一个计算机系统,那么同样讲究透明性、虚拟性。
  • 既然是有并发处理,那么就需要考虑数据隔离,也就是共享资源中的互斥或同步问题。
好象就这么多吧,如果数据结构、操作系统、离散数学、软件工程、计算机组成等几门基础课程功底好点,稍微点拨一下,然后就可以通过项目自学了。
好吧,数据库之所以难学,是因为写书的人、讲课的人、培训的人,都是稀里糊涂的。
---------------------------------------------------------------------------------------------
1、一般数据库分为三~四门课程:数据库概论,数据库应用和数据库原理,外加一门数据库课程设计。不过,其它课程也很重要。
2、从整体上看,数据库是一种针对数据管理需求的特定的计算机系统。先要了解一下背景。有几个方面,一个数据管理的需要,一个是底层硬件的特性,一个是数据结构,一个是系统级软件的设计。事实上,数据库和数据结构,有另外一个相同的说法,数据的管理和处理。然后,数据库几乎总是在块设备(磁盘)上(即使是最近几年SSD比较便宜了,但是还是有大量的商用系统使用机械硬盘)。
3、数据库有两条路径,一个是从应用开始学,一个是从理论开始学。当然,最后应该能够把理论、应用结合起来,并且穿插学术研究和项目实践的历史发展及其背景。由于计算机系统的设计必然是透明的、虚拟的,所以从应用层开始学起,也没有问题。
4、从应用来看,数据库是为了满足是数据的统一管理的需求。为了满足这个要求,数据库必须向用户提供数据类型的定义方法、数据的操作方法、数据的一致性的保障。
5、从使用的角度来说,首先就是要掌握如何运用数据类型的定义方法、数据的操作方法来管理数据,并且在使用过程中,遵守一些必要的数据管理的规范。因此,根据项目,建立数据库、数据表、选择恰当的数据类型、遵守相关的规范。在这个过程中,掌握E-R图这个工具,对项目中的数据进行分析,即提取实体、实体的属性、实体的关系。
6、建库建表之后,就要掌握相关的数据操作方法和数据库内建的编程语言(存储过程),解决具体的问题。
7、由于数据是存储于外存中的(不考虑内存数据库),根据计算机组成原理,我们知道,外存I/O性能是系统瓶颈。在一个给定的外存设备的条件下,如何提高数据库的性能?所以,我们就要根据应用的特性,合理地进行设计。这个时候,就涉及到数据结构了。
8、我们知道,数据结构的存储结构,影响到数据操作的性能。对于外存中的数据,为了提高系统的性能,多采用索引结构,以加快数据项的定位。有的索引结构,写性能优于读性能,或者读性能优于写性能。因此,我们应该进行分析,哪一张表的哪一列应该建立什么样的索引。
9、在数据存在多张表的情况下,为了进一步提高系统的性能,我们还要推算数据表的多表操作时的I/O情况,依此优化数据表的索引设置。通常,我们分析多表操作中的关系演算过程,对多表操作的关系演算过程进行优化。
10、某些实际应用(事务处理)要求数据操作是原子性的(类似于操作系统的PV操作),所以,数据库必须支持事务处理的要求,要不所有的数据操作全部成功,要不所有的数据全部保持原始状态。
11、数据库应用基本上是多用户应用,所以,数据库必须支持并发性。按照操作系统,我们知道,数据也是一种资源。所以,必须对资源的访问进行控制,也就是资源锁和互斥锁。
12、当事务处理和并发控制结合在一起时,事情就变得复杂起来。再加上系统性能的考虑,也就有了悲观锁和乐观锁。
13、系统级软件,往往采用分层设计。同样地,数据库也采用分层设计理念,类似于计算机网络等其它信息系统。
(修改中)
14、再次强调一下,数据库,实际上就是一种特殊的数据结构。回忆一下,抽象数据类型,我们利用抽象数据类型描述现实世界中的数据,数据元素之间的关系,数据的操作。我们要给出抽象数据类型的逻辑结构和存储结构。
15、当然,由于数据库是分层设计,所以存储结构和逻辑结构是位于不同的层次。数据结构的逻辑结构对应了数据库的信息世界,数据结构的存储结构对应了数据库的机器世界。
16、对于CRUD,可谓是非常眼熟,数据结构的最常见的操作。
17、既然是一种数据结构,那么,数据库的操作也具有时间开销和空间开销。时间开销和空间开销,是数据库操作的时间复杂度和空间复杂度。
18、因此,即使作为一个普通的应用层开发人员,也应该对数据库的底层有所了解,以降低数据库操作的时间开销和空间开销。
19、SQL的设计理念,我记得知乎还是哪里有一个高手回答过。作为一门语言,有其哲学理念。理解其设计理念,有助于我们掌握这门语言。对于语言理解不深,就不抛砖引玉了。
20、在逻辑上,库-表-行-列-项,构成一种层次结构。数据库的数据,固然是一种数据结构,但是,为了进行管理,也设计了一种逻辑上的层次管理方法。有点象文件系统的层次结构——目录和文件结构,当然是在逻辑上的层面。比如库—表—行—列—项。每一种具体的数据库,它们的具体设计方案不同。
21、在分层设计中,有一种独有的概念,视图。视图是一种逻辑上的概念,是一种对表进行操作的结果。这个结果是一个虚拟的表,并不存在于物理存储空间。
22、在分层设计中,为了提高系统的性能,因此也设计了特定的cache方案。
23、数据库中的数据是一种资源,根据操作系统中的进程互斥和同步的原理,在并发访问时,就会因为同时访问资源而导致各种问题。
24、此外,从系统的角度来说,还应该提供安全。
25、对于优化,主要是指关系代数的优化,也就是尽可能减少时间开销和空间开销。
嗯。好象如果其它课程学得好,数据库也就这点东西了。
承让 发表于 2023-10-9 03:17:19|来自:中国 | 显示全部楼层
给亲推荐一系列数据库的免费学习课程,希望能够帮到亲。
先来个脑图


课程一:《MySQL数据库入门学习》
免费学习地址:https://edu.aliyun.com/course/153/lesson/list?utm_content=g_1000055517
课程介绍:本课程通过最流行的开源数据库MySQL带你了解数据库的世界。

课程二:《Redis数据库入门》
免费学习地址:https://edu.aliyun.com/course/22/lesson/list?utm_content=g_1000055518
课程介绍:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 是一个高性能的key-value数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

课程三:《分布式数据库技术与实现》
免费学习地址:https://edu.aliyun.com/course/37/lesson/list?utm_content=g_1000055519
课程介绍:本课程主要讲解分步式数据库系统的主要功能和实现方式,课程中首先阐述传统数据库所存在的问题,结合此问题说明分步式数据库系统如何解决这些问题,以及阿里云平台下分步式数据库系统如何优化这些问题。

课程四:《PostgreSQL数据库从入门到精通》
免费学习地址:https://edu.aliyun.com/course/52/lesson/list?utm_content=g_1000055520
课程介绍:PostgreSQL被誉为“世界上功能最强大的开源数据库”,是以加州大学伯克利分校计算机系开发的POSTGRES 4.2为基础的对象关系型数据库管理系统。
PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引。
开发者可以免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。

课程五:《SQL Server on Linux入门教程》
免费学习地址:https://edu.aliyun.com/course/51/lesson/list?utm_content=g_1000055521
课程介绍:SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。
本课程主要介绍SQLServer On Linux的基本知识。

课程六:《HBase入门教程》
免费学习地址:https://edu.aliyun.com/course/73/lesson/list?utm_content=g_1000055522
课程介绍:HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。
HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
E拨通 发表于 2023-10-9 03:17:55|来自:中国 | 显示全部楼层
在开始接触其概念和名词前,先问自己个问题,为什么需要有数据库?把数据存在一个文件里不行吗?
想想如果没有数据库,用一个文件怎么组织存储数据,如何满足不同应用的需求,带着这个问题去学习。到最后,可能你会发现你的那个文件,已经变成一个数据库了。
也许还可以帮助理解nosql的database。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则