我应该如何模型的一个领域,其中可以包含这两个数字和字符串值SQL服务器2005年?
-
09-06-2019 - |
题
我有一个新的数据库表,我需要建立...
它包含一个逻辑上 ID
, , name
, 和一个 "value"
.
这一价值的领域可能是数字或字符串的性质。
我不认为我想要的只是让该领域的一个 varchar
, 因为我也希望能够查询与过滤器喜欢 WHERE value > 0.5
和这样的。
什么是最好的方式模型,这个概念在SQL服务器2005年?
编辑:
我不反对创建多个领域里(一个用于数,一个用于非的数字),但由于他们所有的真相同的概念,我不确定那是一个伟大的想法。
我想我能创建独立的领域,然后查看之类的合成一个单一的逻辑列。
任何意见?
什么我想要实现的是真的很简单...通常这一数据将只是盲目地显示在一个网格型图。
我想也能够过滤器上的数值,网格。这表将结束在数以千万计的记录,所以我不想自己漆到角落查询的性能。
那个查询表现是我的主要关切。
解决方案
你的问题混合数据可以如何Sql2005种文本的数据。这不是一个'自然的'排序。
如果你有一个varchar领域和你这样做:
where value > '20.5'
值,如"5"将在你的结果(如在一个基于字符的排序"5"后的"20.5")
你会更好的分开列的用于储存。
使用聚结,将它们合并成一个柱如果你需要他们合并在结果:
select [ID], [Name], Coalesce( [value_str], [value_num] )
from [tablename]
其他提示
一个很好的方式得到查询支持你想要的是有两个列:numvalue保存的数量和textvalue存储符。他们应该可以为空或至少有某些默认表示没有任何价值。你的应用程序然后可决定其列来储存它的价值和其留与没有任何价值。
如果你想要保存的数字和字符串值在同一列,我不确定你能够避免这样做很多的转换,转换时采用列作为一个查询过滤器。
两列。
Table: (ValueLable as char(x), Value as numerica(p,s))
我不认为这是可能有一个列有这两个varchar和int类型。你可以拯救你的价值作为varchar和铸它int过你查询。但是,这种方法可以得到一个异常,如果你的价值不包含任何性。什么是你想达到什么目的?
如果你想让它能够保持一个字符串,我认为你必须让列varchar,或者相似。
另一种可能是有2或3所列而不是一个值列。也许有三列,value_type(枚举之间的"数量"和"string"),number_value,string_value.然后你可以重建,查询可以
WHERE value_type = 'number' AND number_value > 0.5
我不认为你将能够得到解决使用VARCHAR或限作为数据类型。与混合的数据,如你所描述的,你得到试验的价值,当你拉的领域的数据库和执行适当的投转换或转换为根据的数据类型。
我想我能创建独立的领域,然后查看之类的合成一个单一的逻辑列。任何意见?
它取决于来源数据。如果你得到的数据用户(或一些其他的系统)在一些形式自由的方式,并不真正关心的是什么类型的数据,那么最好的方式来存储是最为通用的方式(varchar,等)。如果进入的数据更加结构化的和你所关心的这种结构,那么它使得更有意义的保持这一结构在数据库通过使用单独的领域。
从该观点考虑的一个选择,它并不真正的问题;你可以保存它无论哪种方式,并宣读它,因为同样的架构。一旦你进入过滤器(如你提到的)东西得到更多的毛茸茸的,但仍然很容易可行。然而,你不说如果你需要能够更新这一数据并如果可以,如果你需要强制执行任何验证的数据。
从它的声音,你需要做的不同类型的搜索基于"种类"的价值。为此,它可能是有意义的添加一个类型的领域,所以,任何过滤器可以快速限于上述类型的价值观。注意到,通过类型的我是说一个更合乎逻辑的、应用范围、类型;不实际的数据类型。
我的建议是使用一个单一的领域有类型列如果你需要轻松地支持更新或使用多个领域(或表格,如果这些都是完全不同的数据集)如果挑选和过滤所有需要。
你可以考虑采用两栏,一个"string"和一个"数字"(什么变的这些都是适当的)与"string"栏"NOT NULL"和"数值"列允许空值。当插入一个价值,总是填写"string"列indpendent的类型,但是如果价值是数字,还存在"数值"一栏。现在你有一个内在的指标类型(如果"数值"一栏填充这是数字,如果不这是一个串),总是可以就拉的价值显示,从"string"栏,并且可以使用的"数字"价值的计算或适当的数字分类/比较的需要。你总是可以添加一个第三列指示值的类型,但这种方法消除了需要。注意,你也许会考虑保持的数字和字符串值使用一套插入和更新的触发器。