7

1) 为表中的列提供默认值的优点和缺点是什么?

2)此外,所有列都应该有默认值吗?我的意思是,这似乎是个好主意……为什么不呢?:)

非常感谢

4

4 回答 4

5

1) 为表中的列提供默认值的优点和缺点是什么?

优点是您可以设置默认值,而不是使用标准默认值。这也简化了插入语句,因为您不需要指定这么多值。

只要您有合理的默认值,就没有真正的缺点。

2)此外,所有列都应该有默认值吗?我的意思是,这似乎是个好主意……为什么不呢?:)

这实际上取决于您的业务逻辑。例如,如果有一个像 CUSTOMER_NAME 这样的列,你不可能想出一个好的默认值,那么你不应该指定一个默认值。但是对于其他列,如 ACTIVE 或 DELETED,可能是 true 或 false,您可能应该指定一个默认值。

我希望这回答了你的问题。

于 2012-04-14T16:18:16.453 回答
3

无论您是否指定,所有列都将具有默认值。如果您不指定,它将仅使用该类型的默认默认值。

对于允许空值的列,默认值为 NULL。例如,对于不允许 NULL 的默认值,INTEGER 列的默认值将是 0。

当您需要默认默认值以外的其他值时,您应该指定默认值。

INSERT仅当您创建新记录时才会应用默认值。

默认值的一个很好的用例是在安全性中强制执行最小特权范式。

如果您的 ACL 表中有布尔 (TINYINT) 字段,例如“allowUpdates”和“allowDeletes”,那么您应该将它们默认为 FALSE (0),以便在创建新用户时,他们将获得最少的权限,直到您专门设置它们。

如果您遵循最小特权范式,那么攻击者无法通过诱使系统创建新用户帐户来诱使系统授予他高特权。

因此,如果您不选择适当的默认值,则缺点可能会很严重。优点是您可以将默认值覆盖为应用程序的合理值。

其他优点包括在插入记录时,如果您想要特定字段的默认值,您可以不设置它。这可以使您的查询更短更简单。此外,它允许在数据库中处理配置。换句话说,您可以在不更改应用程序的情况下更改默认值(在数据库中)。

于 2012-04-14T16:13:35.933 回答
3

好处:

  • 使用参照完整性/外键(表中的一列指向另一表中的列)时,您可以通过将外键列设置为 NULL 来为列设置无链接。例如,如果您有一张家庭表,其中一列指向一张孩子表,如果一个家庭没有孩子,那么孩子列可以为 NULL。
  • 如果你需要它,它会给你一个额外的状态,例如。空字符串且未使用。

缺点

  • 在数据集中的每一行上使用额外的内存,它不会节省内存,如果列允许 NULL 值,它会使用更多。
  • 除了 0 或程序员必须处理的空字符串之外,还有一个额外的状态。

黄金法则是不允许 NULL 列,除非您需要它们。

于 2015-05-01T08:51:01.270 回答
1

默认值实际上与数据质量和信息的未来使用有关。

数据质量包括有合理的、深思熟虑的默认值。

当需要使用、操作和分析数据时,拥有空值、空值和空白往往会导致很多问题。

可以具有一组特定值的数据通常会受益于具有默认值。

真正自由文本的数据,例如 issue_details 可能没有默认值,但如果使用默认值,例如 " not given"未来。
相反,为了解决您的第二点,如果需要一个值并且默认值不合适,例如 user_last_name,则不应使用默认值。

其他领域的默认值可能是向所有数据用户强调意图的好方法。例如,对于名为“已知问题”的列,默认值可能是“无”,这将比 null 更准确和有用。

于 2012-04-14T16:18:42.280 回答