在SQL Server数据库表中保存不允许空值的单个字段

时间:2014-12-18 06:29:24

标签: sql asp.net sql-server

我正在编写一个具有大型表单流程的应用程序。

由于它的大小,我希望能够在输入时将每个字段的副本单独保存到数据库中。

问题是,我的表设计不允许空值。那么如何创建一个带有主键的新表行而不填写所有字段呢?

我的主表,链接到的所有其他表包含草稿布尔标志。草稿表格填写完毕后,可以提交并保存为完成的表格。

我当前的逻辑是占位符值只能在草稿标记形式中接受,例如-1表示整数,-1表示字符串等。但是在完成和提交表单时,它将确认没有空-1占位符在用作提交的表单之前仍然存在。

这看起来真的很脏。

是否还有其他人遇到类似问题,他们采取了哪些措施来解决这个问题?我宁愿不允许在我的表中使用NULL值。

提前致谢,

3 个答案:

答案 0 :(得分:1)

使用'分段'用于处理临时/半填充表单数据的表。

当用户到达终点时,您将触发从登台到最终表格的数据副本,在将数据放入真实表格之前进行所有必需的检查/验证/等等。

我看到的优势:

  1. 你的决赛桌不允许空
  2. 您的最终表格将仅包含有效数据而不包含草稿数据(一旦数据在最终表格中,则无需检查占位符)
  3. 您的临时表可能包含少量行,因此该表上的操作不应在系统上添加这样的负载(要提前检查!!!
  4. 如果您需要在您的网站/应用上登录,那么您可以允许用户稍后返回以填写表单
  5. YMMV,但这是一个很好的解决方案,我真的很喜欢优点1和2.我不喜欢可以为空的字段,因为如果允许null,那么它经常是空的并且也不会# 39;如果我可以避免它,我想混合临时数据和最终数据^^

答案 1 :(得分:0)

您最好的选择是将用户输入保存为变量,直到收到所有表单数据。此时,您可以使用所有这些变量安全地将新行作为单个插入插入,而无需担心空值。

此外,使用单个插入可以减少几个不必要的数据库查询的开销。

答案 2 :(得分:0)

如果没有给出那些列的默认值,那么您可以使用默认值来保存这些列。但是请确保更新所有这些列,因为它将显示默认数据你将从db获得数据。

CREATE TABLE [dbo].[TestTable] (
[Id]          INT          NOT NULL,
[Category]    VARCHAR (50) NOT NULL DEFAULT 'Default Value',
PRIMARY KEY CLUSTERED ([Id] ASC)
)