2009-12-27 17 views
0

我不知道如何解释这可能,所以我会用一个例子。SQL Server:在一个值中存储更多整数

我必须将一些用户ID存储在我的SQL Server表中的单个值/列中,因此一个值可能类似于“4231 3271 3722 7432 4831 3192”。当然这可以存储为文本,char,nchar,nvarchar和som。但哪个最好?如果我只需要存储整数(以及将它们分开的东西)?

那么在单个SQL Server单元内存储多个整数值的最佳方法是什么?

而且你没有张贴我任何替代方法可以做到这一点,因为这只是一个例子,它是这样做的唯一正确途径,即使我不得不使用VARCHAR :)

+4

你试图做的是违反最基本的数据库规范 - 它违反了第一种规范,即数据库中的单个单元格只能有一个单一的原子值。坚持下去 - 经过数十年的实践证明它是值得的! – 2009-12-27 19:04:39

回答

8

我知道你问我们不要提供这样做的替代方法,但这里有:

Normalize !!!

基本上,您创建至少有2列(UserId和上面描述的表的主键)的另一个表。这样,您可以为此表中的单个记录设置任意数量的用户ID。您还可以在一列中只放置一个用户ID。

现在...如果你想这样做,反正你描述的方式,这里是你可以做什么:

你不能把多个整数中的一列,并仍然使用数据类型INT。你将不得不使用某种文本类型(varchar,nvarchar等)。你应该有一个共同的,易于阅读的分隔符(如果它们都是整数,那么空格或逗号就可以正常工作)。

这样做会导致你的问题在路上,我真的鼓励你用正常化来做。

2

在单个SQL Server单元内存储多个整数值的最佳方法是什么?

简单 - 你不需要。

  1. CHAR and VARCHAR最多可包含8,000个字符。您的示例中的空格也会影响到这一点 - 在您的示例中,长度为4加上空格的1个字符的整数表示最多可以有1,600个不同的值。即使将值存储在XML中,SQL Server支持的值最大为2 GB,也必须使用XPATH/XQUERY从XML标记中获取值。
  2. 使用这种方法时,有可靠的方法来保持数据一致(间距,字符),使数据出现等待发生问题。

最佳方法数据标准化的:

  1. 有没有限制的关联数
  2. 可靠的数据执行 - 一个INT列不允许字母字符
  3. 数据处理性能好得多,因为没有转换
0

我同意其他:标准化。但我也会添加一个实际的解决方案,即使用CLR类型。 hierarchyid在技术上是一个整数序列,但很难获得内部存储的实际“数字”。您可以编写自己的CLR数据类型来存储嵌套集合,并且通常比将其存储为varchar或类似的东西的类型具有更好的类型安全性和效率。

请注意,我不是建议这是典型的数据库。嵌套集有其用途,但这些用途相当罕见。除非是性能问题,否则应始终使用3NF作为OLTP数据库。

+1

'hierarchyid'只能在SQL Server 2008上使用 – 2009-12-27 21:39:25

+0

但是自2005年以来,CLR类型一般都可用。 – Aaronaught 2009-12-27 22:27:25

相关问题