【发布时间】:2009-09-11 03:42:28
【问题描述】:
我想将数字列表(本质上是数学术语中的set)存储在关系数据库中,特别是 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 中。恐怕单独保存到文件或其他一些持久性数据存储是不可能的。
【问题讨论】:
标签: database-design types