何时使用可空列 - sql

时间:2014-12-21 19:28:54

标签: sql

在规格中,默认列设置为可空,意味着它们是可选的,我不清楚这种情况适用于哪种情况?我会把它分成两个问题:

  1. 为什么我甚至想在关系数据库中使用它?如果完整性不重要,请使用其他半结构模型。担心每一行都会返回可用对象。似乎很少在关系数据库中使用它们。

  2. 以编程语言处理它。在不同的语言中它甚至是不同的吗?让我们说php,它应该与哪些值进行比较? fetch_array()甚至是要设置的键吗?

4 个答案:

答案 0 :(得分:1)

当您合法地没有值或值没有意义时,应使用

NULLNULL对“我不知道”有好处。

我将使用我在工作中使用的系统中的一些示例,即学生信息系统。

在注册表中,有一个学生名字,中间名和姓氏的字段。省略一些细节,你如何处理那些没有在注册表格的中间名字区域放置任何内容的学生?他们暗示他们没有中间名,但这与在字段中明确写出“无中间名”不同。使用空字符串将明确声明它们没有中间名。事实是,你不知道。使用NULL

在进入/退出表中,每个条目都有一个输入日期和一个提款日期。现在,当学生进入时,学校不知道学生什么时候离开。可能是今年年底。可能是明天。它还没有发生。使用NULL

现在,您可以争辩说任何可以为空的字段都应该在它自己的表中,但是对于实际的工作应用程序来说,这种规范化水平基本上是行不通的。我的意思是,要获得学生的名字,你需要加入四个表,因为这是三个1到0-1的关系。你甚至不是通过这样做来节省数据空间,因为你必须将所有这些ID存储在某个地方以便将所有内容映射回来,你必须将所有内容编入索引以使其比蜗牛的速度更快地工作。你牺牲了DB在规范化的祭坛上的可用性,你获得的主要是失去了性能。

第一范式绝对至关重要。你会在这里看到许多问题,归结为“帮助!我违反了1NF,现在查询是一个巨大的痛苦!”第二范式通常是个好主意。第三范式是指对于大多数非平凡类型的数据而言,事情经常开始变得不可行或不合理。

答案 1 :(得分:0)

DEFAULT NULL列在实际应用程序中非常常见。您可能没有所有字段的值 - 例如,如果您有姓名,电子邮件和电话的列,并且没有提供电话号码,那么在这种情况下存储NULL是完美的。

在php中,fetch_array()将返回所有请求的字段,那些为NULL的字段将设置为php null值。你可以测试truthy if ($value)或者是否允许空字符串或零,显式if ($value !== null)

答案 2 :(得分:0)

  1. 关系数据库中的主键不能为空,这样可以保证数据库的完整性。根据您的设计和逻辑,其他字段可以为null。有时候你有可选字段,而null对于没有增值字段是好的。

  2. 在PHP中,您可以使用is_null函数检查mysql null值。

答案 3 :(得分:0)

空值表示缺少值 - 它与零值(对于数字)或空值(对于字符串)不同。考虑一个布尔列,其中用户选择对问题的真或假 - 如果用户尚未完成表单,则他们的响应将为空。

实际上,null是可选列的默认值;它还要求添加一个新列允许空值(至少在所有记录都分配了一个非空值之前)。

大多数语言都支持null。 PHP可能有点令人困惑,因为它很容易忽略null,empty,false和zero之间的差异。如果在布尔语句中检查,PHP将评估所有这些作为false - 但它们全部存在且不同。