如何在关系数据库中最好地存储数字列表?

Sea*_*ley 9 database-design types

我想在关系数据库中存储一个数字列表(基本上是数学术语中的一),特别是SQL Server 2005.

理想情况下,我希望它是给定表上的单个列,但我愿意听到任何解决方案.我需要存储的数据就像我说的那样,是一组数字.

  • 它不需要是顺序的(即间隙是正常的,正常的,典型的)
  • 范围是可能的(即1 - 4),但我想以这种方式显示它我可以使用快捷方式,如存储它
  • 它也可以是"全部",因此对于这种"无限"情况,必须保留至少一个值,最好是逻辑上
  • 数字列表不需要按顺序排列(即3,2,9,5),但最好也是完全合理的,它们将在插入之前进行排序,因为只有代码才会进行插入,而不是手动用户.不过,它可能不应该依赖或期望列表已经排序.
  • 一组数字应该可以轻松搜索到一个子集(见下文)
  • 所有数字都应该是不同的(没有欺骗),但这可以并且将在插入之前强制执行

此列用于存储该行适用的给定进程的所有"步骤编号".因此,每行可以以任何顺序,范围或顺序应用于一个或多个步骤.可能的最大步数(最大范围,基本上)在行与行之间是不同的,但我高度怀疑它们中的任何一个都会达到数百个,因此在99.9%的情况下,最大值不应超过20或30,而我如果有任何接近100的话,我会感到惊讶.每一行都保证最少有一个值(步骤)(即没有任何步骤适用于任何步骤没有意义),但我想象这就像设置列一样简单not null.

然而,它存储,我希望它很容易搜索.例如,我宁愿不必通过大量的箍来编写SQL查询来查找适用于"步骤3"的所有行.如果给定的行有几个适用的步骤(例如,2,3,7和8),则在步骤3搜索时匹配它应该不太困难.

此外,虽然我希望在查看原始数据时能够产生某种逻辑意义(对于任何需要在系统上工作的人,我不在后问,因此他们不必阅读厚文档弄清楚我的模糊编码),我愿意妥协.因此,将列表编码成可以被可靠解码的内容是可接受的.

如果这是一个骗局我道歉 - 我一直在谷歌搜索,但我怀疑我的这个问题不知道要搜索什么或如何短语或称之为找到我正在寻找的东西.

在更多的注释中,我想知道这不是关系数据库不足的领域之一.不幸的是,我在这里没有选择.我必须将它存储在SQL Server中.我担心,单独保存到文件或其他持久性数据存储是不可能的.

Sea*_*ley 1

最终使用了类似问题的解决方案

不过还是谢谢你!我喜欢阅读每个人对数据库设计这些深奥领域的看法。