《如何学好编程?》(九)熟悉数据库

数据库就是根据数据结构来组织、存储和管理数据的仓库,这里不说大数据,只说普通的关系型和非关系型数据库。

可以把关系型数据库(RDBS)理解为一个Excel表格,每列是字段,每行就是一条记录。Excel有多个二维表,每个表都是由行和列组成的。关系数据库里存放的也是一张张二维表,各个表之间存在关系。简单来说:关系数据库由多张二维表和各表之间的关系组成。

非关系型数据库,也叫NoSQL则可以理解为一个Key-Value文档树,里面有很多属性,每个属性对应一个值。NoSQL 数据库的类型因数据模型而异,主要类型包括文档、键值、宽列和图形。

关系型数据库通过SQL来进行增(Create)删(Delete)查(Read)改(Update)操作,已实现对数据的管理。SQL语句很简单,类似用英语说指令,稍微熟悉即可掌握。但要设计一套优雅的业务数据库,却并非易事,尤其是对于复杂业务来讲,我们的设计需要符合数据库设计范式。当然数据库范式也很简单,主要目的在于表和表之间的独立和解耦,便于未来扩展和数据的修改、查找等,为了设计好数据库,一般会设计ER实体关系图(Entity Relationship Diagram)。关系型数据库为保证一个数据操作事务(transaction)的正确可靠,一般要求具备四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。这些概念,随着数据库的开发经验积累渐渐就明白了。

NoSQL数据库不需要建立关系模型,因此存储结构比较简单,在查询会非常快。NoSQL相比关系型数据库还可以更方面扩容和做分布式设计,非常灵活。NoSQL各文档间缺乏标准化规则,通常采用针对文档按对象进行链式调用来查询,这样在写语句时不如SQL那么强大,而且有时候需要多次连接,同时它也不提供事务的一致性。当数据量增加时,由于key变得困难,很难维护key的唯一性。

由于RDBS和NoSQL的特性,一般关系型数据库会用来做强关系的业务系统,而非关系型数据库则用来做高性能的缓存、键值读取等。当然理论上NoSQL和MySQL可以互相替代。

作为程序员,不是DBA,一般掌握基本的SQL和NoSQL语句即可,不一定需要多么强大的数据设计和管理能力,但一定要理解其中的基本原理。数据库的设计和操作对于系统健壮性和性能至关重要。

#编程真的能改变人的思维方式吗#