sql - 列中什么时候为空值 "safe"?

标签 sql mysql sql-server oracle database-design

在设计数据库时是否有一般的经验法则允许列为空值与 3nf 规范化?我有一个表,其中一列主要由空值 (85%) 组成,但表大小不超过 10K 条记录(不是很大)。它主要用于日志记录和记录保存,因此大多数事务都是插入和选择,没有更新。我试图同时考虑性能和简化设计。在这种情况下,非规范化或规范化会有很大的好处吗?不同的 RDBMS 的行为是否不同?

最佳答案

避免 NULL 有三个不同的原因。按重要性排序(当然,在我看来)它们是:

  1. 您想正确地对数据建模。

  2. 您想提供一个数据库,以便轻松生成正确的应用程序。

  3. 您想节省磁盘空间。

  4. 您关心性能。

好吧,有四个不同的原因!

在这四个中,我非常关心#1,非常关心#2(特别是因为我也一直是程序员),我真的不太关心#3,因为磁盘空间很便宜也因为#1 和#2 为我消除了任何数据库中的大多数 NULL。至于#4,我从不想为了性能而牺牲正确性——如果我不能确信它是正确的,那么我得到答案的速度有多快都没有关系。如果我无法在建模良好的 SQL 数据库中达到我的性能目标,那么 SQL 数据库可能不适合这项工作。

所以对我来说最重要的问题是“单表方法是否正确地为您要存储的数据建模?”同样重要的是“单表方法是否会使针对数据库编写错误代码变得太容易了?”我想强制自己(或我之后的任何程序员)必须将数据放在正确的位置。查看您的数据并回答这些问题,它应该可以帮助您决定正确的结构。

关于sql - 列中什么时候为空值 "safe"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808301/

相关文章:

sql - Access SQL 查询 : find the row with the most recent date for each distinct entry in a table

php - Cake Console 无法在 Mac OS X Lion 上运行

c# - 将word文档插入sql server数据库?

PHP 表单必须提交两次才能更新复选框

mysql - SQL 包含和排除

mysql - MySQL SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 可以用作一个查询吗?

.Net 将 NULL 值从变量值插入到 SQL Server 数据库中

sql-server - SQL Server 查询处理器耗尽内部资源

sql - 基于行的顺序分组

php - 如何在 Mysql 和 php 中更改单个用户的详细信息