什么是留空数据库单元的最佳方法?

时间:2011-06-03 20:50:50

标签: database

我不熟悉数据库。如果我有一个包含大量空单元格的数据库表,那么留下它们的最佳方法是什么(例如,如果性能不降低,则不会消耗内存,如果可能的话)?

我知道有一个“空”值。是否存在没有缺点的“无”值或等价物?或者只是不填充单元格,它被认为是空的,所以没有什么可做的了?对不起,如果这是一个愚蠢的问题。有时候你不知道你不知道的事情......

不试图讨论规范化数据库。只是想知道空白/空/无细胞的传统智慧是什么。

由于

5 个答案:

答案 0 :(得分:4)

使用NULL。这就是它的用途。

答案 1 :(得分:4)

约定是使用null来表示缺失值。这就是SQL中null的目的。

知名数据库研究员CJ Date经常撰写关于他在逻辑层面对SQL处理null的异议,并且他会说任何可能丢失的列都属于一个单独的表,因此没有行对应于缺少价值。

我不知道使用null会有任何严重的效率缺陷。任何功能的效率取决于您使用的特定数据库实现。您还没有说过是否使用MySQL,Oracle,Microsoft SQL Server或其他。

例如,MySQL的InnoDB存储引擎不会在一行的列中存储空值,它只存储非空列。其他数据库也可以这样做。同样,索引中的空值应该被有效处理,但它因产品而异。

答案 2 :(得分:1)

通常说数据库有行和列。如果列不需要值,则在使用值更新之前,它不会保留任何内容(也称为NULL)。这是大多数数据库的最佳实践,但并非所有数据库都具有NULL值 - 有些使用空字符串,但它们是例外。

关于空间利用 - 磁盘现在相对便宜,所以对空间消耗的担忧不再像过去那样普遍,除非在庞大的数据库中。如果使用所有固定大小的数据类型,则可以从数据库中获得更好的性能,但是一旦开始允许可变大小的字符串(例如varchar,nvarchar)类型,就不再可能进行优化。

简而言之,暂时不要担心表现,至少在你弄湿脚之前。

答案 3 :(得分:0)

有可能,但请考虑:

  1. 他们应该不是空的吗?您应该实施not null吗?

  2. 这是一个工作流程 - 所以它们现在都是空的,但未来大部分都会被填满?

  3. 如果两者都不是,那么您可以考虑重新设计。编辑您的问题并发布您现在拥有的架构。

答案 4 :(得分:0)

这里有几种思想流派。第一种是在数据未知时使用null - 这就是它的用途。

第二个是不允许空值,并将所有可能为空的字段分离到关系表或创建“伪”值以替换null。对于varchar,这通常是空字符串,但问题出现在日期字段或数字的假值上。然后你必须编写代码来排除假数据,就像你必须编写代码来处理空值一样。

就个人而言,如果数据真的是一个不同的实体,我更喜欢使用空值和一些明智的数据移动到子表(并且这些字段通常需要父子关系的一对多结构,例如,当您可能知道或不知道某个人的电话号码时,请将其放在单独的电话号码表中,然后您经常会发现无论如何都需要存储多个电话号码。)