聊一聊:数据库都有哪些类型?

上周有个客人问我,数据库这玩意儿怎么分类啊?我跟他一说,数据库这东西可多了去了,主要就两大类:关系型数据库和非关系型数据库,还有新起的NewSQL和云原生数据库。

先说说关系型数据库,这玩意儿就像我们用的Excel表格,数据都存成表格,每列对应一个数据类型,通过主键和外键来关联不同的表。
比如银行转账,必须保证要么全成功要么全失败,这就得靠关系型数据库来保证数据的一致性。
像MySQL、PostgreSQL和Oracle,这些都是关系型数据库的典型代表。
不过,这玩意儿也有短板,比如扩展性差,数据量一大就头疼。

再说说非关系型数据库,这玩意儿更灵活,不像关系型数据库那么死板。
比如Redis,它就是个内存数据库,特别适合做缓存,像用户会话、计数器这些都能用。
还有MongoDB,它是个文档存储数据库,特别适合内容管理系统和日志分析。
不过,非关系型数据库在事务处理和复杂查询上可能就不如关系型数据库了。

还有NewSQL和云原生数据库,这些都是新兴的数据库类型。
NewSQL像是TiDB和CockroachDB,它们结合了SQL的易用性和NoSQL的扩展性。
云原生数据库比如AWSAurora和AzureCosmosDB,它们都是完全托管的服务,可以自动扩缩容。

选数据库啊,得看业务需求。
比如你的业务需要强一致性,那关系型数据库就挺合适的。
如果你需要处理高并发写入,那列族存储数据库就不错。
至于复杂关系查询,图数据库可能更适合。

总之,选数据库没有绝对的最好,只有最适合的。
你得根据自己的业务场景、数据规模和团队技术栈来综合考虑。
反正你看着办吧。
我还在想这个问题,毕竟数据库这东西,选对了能让你事半功倍,选错了可就得不偿失了。

关系数据库的三大要素是那些?

说实话,关系模型这东西,我当年刚接触的时候也晕得一批。
但摸着石头过河,慢慢就有点感觉了。

就说第一点吧,基本表和视图表。
我第一次在Oracle上干活的时候,老板让我建个销售报表视图。
我傻乎乎地把所有销售数据都拉出来搞了个视图,结果跑起来卡得像屎。
老板一拍桌子:"你小子搞错了,视图是虚的,基本表才是实的!" 这时候才明白,基本表就是实实在在存在硬盘里的表,比如你的用户表、订单表,每次插入、更新、删除都是直接操作这块。
视图呢?它就是个查询语句的快捷方式,比如"显示所有订单金额超过1 万的客户"这个视图,它背后可能是个复杂的连接查询,每次调用都要重新跑一遍。
有意思的是,有些数据库系统为了优化视图,会偷偷把常用视图的结果存起来,这时候它就有点"半实半虚"的意思了。

第二点关系操作,我特别记得刚学SQL的时候,写个简单的连接查询都能卡半天。
当时老师举了个例子:假设你有张员工表,还有张部门表,你想查每个部门有多少人。
如果用笛卡尔积再筛选,CPU直接干烧。
后来学了连接操作,用内连接代替WHERE条件,效率立马提上来。
这个我印象特别深,当时在测试环境跑,用笛卡尔积查询要等十分钟,改用INNER JOIN就两秒出结果。
所以说这帮关系代数大师,当年是真有水平。

第三点完整性约束,我碰见过最头疼的是参照完整性。
记得有次项目上线前,测试突然报错:"外键为空报错!" 我翻遍代码才发现,开发小弟把某个历史遗留表的外键设了非空约束,但数据里居然有NULL值。
当时真是想抽他,这种事怎么能上线前发现不了?但换个角度想,正是因为有了这种约束,数据库才不会出现"张三的订单指向不存在的部门"这种荒唐事。
用户定义的完整性就更有意思了,比如某个系统规定年龄必须大于1 8 ,这就得靠触发器或者业务逻辑来实现了。

最后说结构化存储这点。
我之前在一家电商公司搞数据迁移,把旧系统的非结构化数据挪到MySQL里。
结果发现,原来用文件存着的数据,现在每条记录都要对应几十个字段,插入一条数据得跑几百条UPDATE语句去补空值。
这种痛苦,只有经历过的人才知道。
但反过来,结构化确实给数据查询带来了便利。
比如我有个客户查询需求:"显示最近三个月,订单金额前1 0名的客户,并且这些客户最近一次下单时间不能超过7 天"。
这种需求,用关系型数据库写SQL比用JSON或XML查询直观多了。
不过现在我也在学,像Redis这种键值存储,有些场景比MySQL还快,所以说技术这东西,没有绝对的优劣,得看怎么用。

关系型数据库是由二维表组成的么

哎哟,说起关系型数据库啊,这玩意儿确实是挺有意思的。
你想想,它就像是一张张的账本,每一页都是一个二维表,行啊列的,一目了然。

我记得在2 005 年,我第一次接触到关系型数据库,那时候用的还是Oracle。
那时候我就发现,这东西的数据组织方式就是用行和列来表示的,行就是记录,列就是字段,每个表就是一个完整的二维表格。

然后啊,这些表格放在一起,就构成了一个数据库。
我之前也没想明白,为啥这些表格能放在一起呢?后来才知道,原来这些表格之间还可以建立关系,这样数据组织结构就丰富了,查询起来也更方便了。

就比如我之前工作的一家公司,他们用的就是MySQL数据库。
那玩意儿用的人多了,操作起来也方便,就像我们平时用Excel一样,直观易懂。

所以啊,关系型数据库就是由多个这样的二维表,以及它们之间的关系组成的,挺复杂的,但也很实用。