当前位置:首页 > 问答 > 正文

无数据类型数据库到底是啥,数据库为空又代表啥意思呢?

要理解“无数据类型数据库”,我们最好先看看我们熟悉的、有数据类型的数据库是啥样的,想象一下你正在用Excel做一个班级花名册(根据常见的数据库使用逻辑类比),你会画好表格,第一列是“学号”,你肯定会把这一列设置成“数字”类型,因为学号就是一堆数字;第二列是“姓名”,你会设置成“文本”类型;第三列是“出生日期”,你会设置成“日期”类型,如果你在“学号”那一列里不小心输入了汉字“张三”,Excel会立刻报错,告诉你类型不匹配,这种预先定义好每一列(字段)必须是什么数据类型的数据库,就是传统的“关系型数据库”,比如学校里教的那种(基于对结构化数据库如MySQL、Oracle的普遍认知)。

“无数据类型数据库”是不是说里面存的数据像一团乱麻,完全没有规矩呢?不是的,它的“无类型”主要体现在不那么死板,再举个生活中的例子,这次我们不用Excel表格了,改用一个个便签贴(灵感来源于NoSQL数据库中文档型数据库的常见比喻,如MongoDB),你要记录一个学生的信息,你可以拿一张便签贴,上面写着:“学号:1001,姓名:张三,爱好:篮球、读书”,另一张便签贴记录另一个学生:“学号:1002,姓名:李四,出生日期:2005年3月2日,特长:钢琴”,你看,这两张便签贴的结构可以完全不一样,第一张有“爱好”但没有“出生日期”,第二张有“出生日期”和“特长”但没有“爱好”,在无数据类型数据库里,这是允许的,它关注的是每一条记录本身(就像一张便签贴),而不是要求所有记录都必须有完全相同的栏目(列),它不会因为你第一条记录里“学号”写的是数字1001,就禁止你在第二条记录里把“学号”写成文本“A1002”(如果业务需要的话),这种灵活性在处理不断变化、不规则的数据时特别有用,比如社交网络上用户自发填写的信息,或者不断迭代的应用程序日志(引用现代Web应用开发中NoSQL的常见应用场景)。

无数据类型数据库(通常指NoSQL数据库的一部分)更像一个灵活的收纳盒,你可以往里面放各种形状不一的东西,而传统数据库则像一个严格分格的收纳箱,每个格子放什么东西是预先定死的(此比喻广泛用于解释SQL与NoSQL的区别)。

无数据类型数据库到底是啥,数据库为空又代表啥意思呢?

接下来我们说说“数据库为空”是啥意思,这个听起来很简单,但可以从几个层面去理解。

最直接、最表面的意思就是字面意思:这个数据库里什么都没有,就像一个刚买回来的新文件柜,里面一张纸都没有,你试图去查询数据,系统会告诉你“查无此人”,这是一种“物理上空”的状态。

无数据类型数据库到底是啥,数据库为空又代表啥意思呢?

但更有意义的是第二种情况:“逻辑上空”,举个例子,一个公司的客户管理系统数据库,里面可能存着成千上万条客户记录,看起来满满当当,如果你是一个新来的销售员,还没有被分配任何客户,那么当你用自己的账号登录系统时,系统筛选出的“属于你的客户”列表就是空的,这时候,对整个公司而言,数据库不是空的;但对你这个特定的用户和特定的查询请求而言,返回的结果集是“空”的,这就像一个大图书馆藏书百万册,但你想找一本根本不存在的书,管理员给你的回答就是“没有”(基于数据库查询返回空集的普遍情况)。

还有一种“空”,可以理解为“有效信息的空”,一个数据库的某个字段是“备注”,允许用户填写额外信息,可能90%的记录里,这个“备注”字段都是空白、没填的,对于“备注”这个信息维度来说,它大部分时候是“空”的,但这不代表整条记录或整个数据库没有价值。

“数据库为空”并不总是一个可怕的状态,一个新项目启动时,空的数据库是起点,一个查询没有返回结果,可能帮助你发现业务逻辑的问题(比如为什么销售员没分配到客户),或者证明某个条件确实不存在(比如图书馆确实没有那本书),关键在于理解这个“空”是发生在哪个层面,以及它背后的原因是什么。

无数据类型数据库通过牺牲一些严格的数据规范,换来了存储和应对多变数据的巨大灵活性,而数据库为空,则是一个多含义的状态,既可能是彻底的初始状态,也可能是特定视角下的过滤结果,需要我们根据具体情况去分析和理解。