我需要将一组与实体相关的标志存储到数据库中。Flags
可能不是最好的词,因为这些不是二进制信息(开/关),而是一组待定义的代码。
通常,您会将每个信息(例如每个标志值)存储在不同的列中,但我正在探索将此类信息存储在不同于每个属性一列的数据结构中的机会,以防止列映射的急剧增加. 由于每个标志对实体的每个属性都有效,因此您了解对于本质上需要大量列的大型实体,列的总数可能会增长为 2n。
最终,这些代码可以映射到位置字符串。
我正在考虑类似的事情:02A
不被解释为dec 42
,而是:
- 在位置 1 中标记 0(如果您愿意,也可以标记为零……)
- 标志 2 在位置 2
- 位置 3 中的标志 A
以这种方式格式化的数据可以很容易地被高级编程语言处理,因为 PL/SQL 超出了问题的范围,所有这些值都应该由 Java 处理。
现在真正的问题
我的规格之一是优化搜索。我被要求找到一种方法(例如,一种有效的方法)来寻找0
在给定位置显示特定标志(或特殊标志)的实体。
通常,在 SQL 中,给定特定于 RDBMS 的子字符串函数,您会
SELECT * FROM ENTITIES WHERE SUBSTRING(FLAGS,{POSITION},1) = {VALUE};
这行得通,但我担心它在所有平台上都可能有点慢,除了 Oracle,AFAIK 支持创建映射到子字符串的二级索引。
但是,由于 Hibernate ,我的解决方案必须在 MySQL、Oracle、SQL Server 和 DB2 中运行。
鉴于这样的设计,我是否缺少一些可能是跨平台的索引策略?