TSQL - 何时使用'not null'

时间:2009-03-05 19:08:45

标签: sql sql-server

在考虑是否应该将字段标记为“非空”而不仅仅声明除主键之外的所有字段时,我应该遵循哪些一般准则?

'not null'字段是否应具有DEFAULT值?

5 个答案:

答案 0 :(得分:8)

取决于您希望应用程序的行为方式。

  • 首先,永远不会有一个可能的行,这个值不包含有意义的数据,然后使用NOT NULL。也就是说,这个值总是有意义并代表一些东西。
  • 您是否希望用户或程序员以某种形式或方式填写该值?使用NOT NULL而不使用DEFAULT
  • 您希望它对用户和程序员来说是可选的吗?对DEFAULT使用NOT NULL

答案 1 :(得分:4)

我认为你有2个问题:

您是否应将字段标记为非空?

是的,假设您从未打算有效行在该字段中具有空值。可以将“not null”视为可以放在字段上的最简单的约束类型。数据库中的约束有助于确保数据通过满足期望保持一致。

空字段不应该有默认值吗?

仅在有明显默认值时。例如,发票表的付费字段可能默认为0(false)。一般来说,它的工作方式相反 - 如果一个字段有一个默认值,那么它应该也可能不是null。

不要仅仅为了默认值而创建默认值 - 如果一个字段不应该为空,但是没有通用默认值,那么保留默认值。这可以确保任何INSERT语句都必须为该字段提供值。

答案 2 :(得分:1)

很多人都瞧不起所谓的“神奇数字”,并主张将该字段留空而不是默认下来。我唯一使用默认值的时候是我有一个位字段,我只想让它默认为false。

答案 3 :(得分:0)

做什么是语义正确的。

  • NULL - 并不总是存在
  • NOT NULL - 始终存在

尽量不要为下拉字段定义和保留人为值,例如“没有选择值”,或者为员工的经理定义“无经理”。

是否使用默认值取决于数据的插入方式。如果有一个带验证的UI,则不需要默认值,恕我直言。

答案 4 :(得分:0)

非空字段需要具有默认值(如果它们是合适的),尤其是在向表中添加新字段(或将字段从允许空值更改为不允许空值)时,您需要为所有现有记录赋值。但是,默认值不适用于所有可能的字段。例如,我们有一个person表,lastname不允许为null。虽然没有我们可以指定的默认姓氏,但如果此人没有姓名,则不会创建记录。另一方面,您可能有一个DateCreated字段,其默认值为当前日期。这也是一个您希望不为null的字段,您可能希望确保当前日期是从用户界面插入还是从导入插入或从查询窗口插入的。