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

前端之家收集整理的这篇文章主要介绍了数据库设计 – 如何在关系数据库中最好地存储数字列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在关系数据库中存储一个数字列表(基本上是数学术语中的 set),特别是sql Server 2005.

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

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

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

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

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

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

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

解决方法

我不记得正确的术语,但正确的方法是创建一个如下所示的表:
|  id  |  table1_id  |  value  |
--------------------------------
|   0  |          1  |      1  |
|   1  |          1  |      2  |
|   2  |          1  |      3  |
|   3  |          1  |      7  |
|   4  |          1  |      9  |
|   5  |          2  |      1  |
|   6  |          2  |      3  |
| ...  |        ...  |    ...  |

对于table1中的每个值,您可以将所需的值添加到此表中.

对于’all’,你可以在table1中创建一个列,如果你想要全部,你可以设置一个标志. (我在MysqL中使用’enum’,但我不确定它是否存在于sql Server中).

我不确定是否有一些特定于sql Server的方法,因为我主要使用MysqL.

猜你在找的MsSQL相关文章