我们有一个表单有多个不同数据类型的字段,包括字符串,日期时间和数字。在Sql Server中存储N/A
我们的客户希望能够在这些字段中的任何一个中写入N/A(不适用),并且能够将其留空。
有人有一个想法,我应该如何设计我的Sql Server表,以便它可以支持值,NULL或N/A?
我们使用的是SQL Server 2008中
我们有一个表单有多个不同数据类型的字段,包括字符串,日期时间和数字。在Sql Server中存储N/A
我们的客户希望能够在这些字段中的任何一个中写入N/A(不适用),并且能够将其留空。
有人有一个想法,我应该如何设计我的Sql Server表,以便它可以支持值,NULL或N/A?
我们使用的是SQL Server 2008中
如果N/A,你需要支持的空白是真正的价值观不同,我想说创建字段作为一个可空字段(这种情况下NULL将代表空白值),然后为[FieldName] NotAvailable或[FieldName] Specified包含第二个比特字段。当然,你将使用两个单独的字段来表示一个单一的逻辑概念,试图强制它全部进入一个字段导致两个概念被存储在同一个字段中(字段被解释为一种方式,除非有一些神奇的价值,那么它意味着别的东西)。这样,通过单独的领域,这些领域的预期行为将会更加清晰。
+1,需要在GUI上为每个字段添加一个“N/A”复选框 – 2010-02-19 19:44:16
@KM我们使用DevExpress并且它们允许每个控件内都有一个按钮。所以我们在所有编辑器的左边添加了一个“N/A”按钮(复选框除外) – 2010-02-19 20:50:13
我能想到的唯一类型是VARCHAR。
您将不得不有代码来解释基于该字段的数据(即如果该字段的名称是InvoiceDate,它是一个日期)。
编辑:在阅读您最近的评论后,您可以有一个“IsNA”(位)字段为每个字段。因此,如果用户选择“NA”作为InvoiceDate,请将“IsInvoiceDateNA”设置为true & false(否则)。
屏幕的视图将根据每个输入字段的字段驱动。
我会将答案存储在单个varchar
(或nvarchar
)字段中。
应用程序代码可以验证和解释输入是一个数字或日期等。有关该字段的元信息将告诉您如何解释它。
在这种情况下,你可以有NULL
,或者空白,或者N/A,或一个真正的价值...
正如其他人所提到的,为varchar或nvarchar是您的最佳解决方案。
无论列的数据类型如何,都可以应用默认空值。当返回的结果,你既可以使用
Select Isnull(colX,'N/A')
或 Select Coalesce(collX,'N/A')
如果他们只想要一个状态,你可以像其他人表示只是翻译空:
SELECT COALESCE(thecolumn1,'N/A') AS mycolumnalias
如果发现他们真的渴望拥有塔上的“三态”,你可以创建一个伴随的VARCHAR列。
SELECT COALESCE(thecolumn1, companioncolumn1,'N/A') AS mycolumnalias
优点:
缺点的数据类型:
从客户的业务角度看,那是什么“N/A”与空白之间的区别? – 2010-02-19 18:44:31
我不确定我是否理解这个问题。你想要一个日期时间或数字列允许一个空值(这是微不足道的)和N/A的值(这似乎不可能,除非你指定一个特定的值,如数字或最小日期时间指定N /一个)。 – 2010-02-19 18:45:30
@Mike:Null可能意味着用户从未看到过该选项,N/A意味着他们明确决定。 – 2010-02-19 18:46:11