在关系数据库中允许空值的一些缺点

news2025/1/16 0:19:23

早在 2020 年,我们就了解了关系数据库系统中的 NULL 值及其用途。正如那篇文章所述,NULL 值已成为一个特殊标记,表示不存在任何数值。你也可以说 NULL 值可能表示列可能有一个值,但是你还不知道该值是什么。在这种情况下,它们充当占位符,直到你最终收集到所需数据,用实际值填充表字段。

此外,当你考虑到所有主要数据库供应商都支持 NULL 作为默认值时,只有使用它们才有意义,不是吗?好吧,没那么快。除非绝对必要,否则有些数据库设计人员会避免使用 NULL。他们是不是知道其他人不知道的事?请继续阅读,找出答案!

空间考虑因素

尽管 NULL 值表示“无”或“无值”,但数据库将它们视为一个值。就此而言,它们会占用硬盘的空间。因此,如果你认为使用 NULL 值可以节省硬盘空间,那么你可能错了。事实上,NULL 被认为是一个可变长度的值,这意味着它可以是两三个字节或几个字节,具体取决于列类型。数据库会为额外的字节留出空间,会大于字段中存储的值,结果是你的数据库可能会比使用常规值占用更多的硬盘空间。

不创建缺少信息的记录

一些数据库管理员认为,如果无法填充记录的所有列,则不应创建记录。这个论点显然不适用于所有用例,但它的意思是只有当所有字段都有实际值而没有任何占位符时才应该创建记录。例如,在银行应用程序中,如果你不知道交易金额,你不会继续进行交易。这很有道理,但是这种严格的标准在其他行业(例如电子商务或收集用户数据的网站)中不是很有效。

复杂的 SQL

另一个缺点会影响数据库存储过程。虽然大多数数据库都提供了检测 NULL 值的函数,但仍必须特别注意区分 NULL 和其他值。这意味着你的 SQL 过程可能比所需的要長得多,并且它们也可能变得难以阅读。如果过程过于复杂或难以理解,数据库管理员可能会拒绝代码更改。

例如,以下是 Navicat Premium 16中的一个小型表,它有数值、空字符串和 NULL:

在 Navicat 中,使用“编辑”菜单就能很容易插入空字符串或 NULL。

以下是一个根据各种条件计算 name 数量的查询:

我们想看到 5 的计数,因为记录 4、5、7、8 和 10 中没有值。但是,只有 combo_count 返回了 5。这是因为虽然 NULL 值没有长度,但 length() 函数不会拣选 NULL。

从这个例子中,我们可以得出一个结论,允许 NULL 值可能会令你更难获取你在寻找的数据。此外,允许 NULL 值可能会降低你对数据库中数据的信心,因为你永远无法确定某个值是否存在。

总结

大多数数据库从业者选择在他们的数据库表中允许一些 NULL 值,因为它们几乎是所有数据库的默认值,并且可以用作缺失数据的占位符。但另一方面,有一些 DBA 认为允许 NULL 是得不偿失的。而这篇文章的重点是,在设计数据库之前,你应该考虑自己的业务流程,并选择最适合你的数据的结构。

往期回顾

1. 盗版引发设备瘫痪 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件

2. Navicat 荣获 Microsoft 金牌合作伙伴

3. Navicat 16.3 正式支持 OceanBase 企业版

4. 免费试用 Navicat 16

5. Navicat 发展史

6. SQL 语句中 WHERE 1=1 的作用

7. 在 SQL 中计算总行数的百分比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python: 打包发布到PyPi上

经常会碰到python包要打包成sdk放到PyPi上开源的情况。 下面的操作具体参考:https://packaging.python.org/en/latest/tutorials/packaging-projects/。 一、准备 1、pyproject.toml 我的具体如下 [build-system] requires ["setuptools>61.0"] bu…

atguigu8 集群

0. 集群介绍 (1)集群的目标 • 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影 响。 停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自 然灾害等不可预…

基于Matlab使用线性FM波形对带状合成孔径雷达系统建模(附源码)

目录 一、合成孔径雷达成像 二、雷达配置 三、场景配置 四、SAR 信号模拟 五、总结 六、程序 此示例说明如何使用线性 FM (LFM) 波形对基于带状图的合成孔径雷达 (SAR) 系统进行建模。SAR是一种侧视机载雷达,与真实…

布隆过滤器原理,优缺点

介绍: 位图:int[10],每个int类型的整数是4*832个bit,则int[10]⼀共有320 bit,每个bit⾮0即1,初始化时都是0 添加数据时:将数据进⾏hash得到hash值,对应到bit位,将该bit改…

Koa.js搭建简单服务器,连接数据库

Koa.js搭建简单服务器,连接数据库1. 环境node v7.6版本以上2. 创建服务安装依赖3. 根目录新建index.js,新建router.js,controller文件夹4. 浏览器访问5. 连接mysql6. 查询测试7、其它1. 环境node v7.6版本以上 2. 创建服务安装依赖 新建文件…

Origin绘制折线图

Origin常用功能见: Origin常用功能_Dezeming的博客-CSDN博客Origin支持各种各样的2D/3D图形。Origin中的数据分析功能包括统计,​信号处理,曲线拟合以及峰值分析。Origin中的曲线拟合是采用基于Levernberg-Marquardt算法(LMA&…

软件设计模式复习

一、统一建模语言 1.统一建模语言知识点 二、面向对象设计原则 史上最全设计模式导学目录(完整版) 三、设计模式概述 1.定义:设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代…

Go 语言报错 StackGuardMultiplier redeclared in this block

前言 最近在 GitHub 刷到了 GitHub - golang-china/gopl-zh: Go语言圣经中文版, 然后又是周末,就起了玩心。搞一个 Go 玩玩,去 The Go Programming Language下载了 Go 语言安装包,一路默认安装。然后打开 VS Code 安装 Extensio…

5个编写技巧,有效提高单元测试实践

1. 什么是单元测试 “在计算机编程中,单元测试又称为模块测试,是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最…

PPT的使用技巧(一):对齐、文字填充、柱状图填充

1、快速对齐 在制作PPT时,需要将绘制的几个图形进行对齐,如果用人工进行对齐,则效果会很差,且耗时严重。如下图所示为未对齐时的情况,可以发现4个矩形在水平、垂直方向均不对其。 我们需要将其进行对齐后变成如下效果…

1. Windows 安装 elasticsearch-8.5.1 和 kibana

1. 准备下载文件 Elasticsearch 下载地址: https://www.elastic.co/downloads/elasticsearch Kibana 下载地址: https://www.elastic.co/downloads/kibana 2.启动es 1、配置文件:注意ip用个人ip别用localhost # Elasticsearch Configur…

面板数据熵值法计算综合指数Stata代码(附样本数据和结果)

面板数据熵值法计算综合指数Stata代码(附样本数据和结果) 熵值法是指用来判断某个指标的离散程度的数学方法。离散程度越大,该指标对综合评价的影响越大。可以用熵值判断某个指标的离散程度。 在信息论中,熵是对不确定性的一种度…

jasperreports6.12.2 could not load the following font解决方法

jasperreports通过Java代码生成PDF的时候不能获取中文字体,报错提示如下: net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font: pdfFontName: STSong-Light pdfEncoding: Identity-H isPdfEmbedded : true本次环境&…

聊一聊华为云弹性公网IP的那些事儿

聊一聊华为云弹性公网IP的那些事儿 如今,企业上云已成为热门话题,云可以驱动流程创新和业务创新,成为企业新的利润增长点,被看成是企业实现数字化转型的必经之路。弹性公网IP作为一种网络基础能力,也是华为云客户日常…

【Linux】多线程基础

文章目录1.线程的基本概念1.1重定义进程1.2Linux下的线程2.多级页表3.线程VS进程3.1线程的优缺点3.2线程异常3.3线程用途3.4线程与进程的关系4.线程控制4.1线程创建4.2线程等待4.3进程终止4.4线程分离5.线程ID与线程结构1.线程的基本概念 在一个程序里的一个执行路线就叫做线程…

树莓派系统镜像备份

SD卡系统镜像备份引言1、下载镜像备份脚本2、查看sd卡设备名称3、复制镜像4、压缩镜像引言 SD卡系统镜像备份有多种方式,最简单粗暴的是使用Win32diskImager工具,将SD卡的镜像直接读取,但是该种方式最大的缺陷就是读取的镜像空间太大。比如在…

a股level2数据接口的最优委托信息

a股level2数据接口除了提供逐笔成交记录这个信息外,还提供了最优委托信息,也就是盘口中前50笔订单的委托数量明细。 Level-1提供的数据并不可以知道委托了xxx手是有多少人下的,以及每个人下了多少的明细。但是在Level-2中就能显示卖一处前50…

Head First设计模式(阅读笔记)-02.观察者模式

气象监测应用 建立一个应用,利用WeatherData对象取得气象站的数据,并更新三个布告板:目前状况、气象统计和天气预报 要求 WeatherData类具有getter方法获取温度、湿度和气压获取到新的数据时会调用measurementsChanged方法当有新数据时三个布…

WebVR

WebVR 文章目录WebVR1. 前言2. 在线示例3. 关于开发4. 参考链接1. 前言 WebVR技术可以实现在浏览器端接通VR设备,在VR模式下进行交互。 2. 在线示例 三维模型网站Sketchfab支持在VR模式下预览三维模型:https://sketchfab.com/3d-models/kirkaldys-tes…

从后端角度看安全

跨站脚本攻击(XSS) 什么是XSS 跨站脚本工具,全程是Cross Site Script,为了和CSS 区分,所以叫XSS。 XSS 攻击,通常指黑客通过HTML注入,来纂改了网页,插入恶意脚本。 人话就是把用户…