在 SQL 数据库字段中存储可搜索数组

目前我尝试解决以下问题:我正在使用的文档管理软件可以为那里的文档定义掩码,并且每个掩码都有一个或多个索引字段(类型:字符串)。系统支持以下数据库:

  1. Postgres 2. ORACLE 3. Microsoft SQl 4. DB2

现在我应该研究一下是否可以将字符串数组仅存储在 sql 数据库的一个字段中,以便每个掩码仅占用 sql 表中的一行。另一个要求是该数组可通过 sql 进行搜索。

结果应该是 sql 数据库不像现在那样碎片化,因为每个索引字段都是掩码定义中的一列,而且在性能方面,结果应该相等(或者如果可能的话更快)。

目前的状态是,我有 postgres(但目前只有 Double[] )和 ORACLE(通过 ArrayDouble 类型)的工作示例,结果很好(没有碎片和性能改进(>200%))。这些示例是用 java 编写的(标准 jdbc 连接)。

对于 DB2,我找到了一些关于普通数组(和其他两种类型)的文档,但无法构建一个工作示例,对于 Microsoft SQL,我找不到任何暗示它具有内置数组功能的提示。

所以我的主要问题是你们是否有解决这个问题的经验,并且可以给我特别是关于 DB2 和 Microsoft SQL 如何解决这个问题的建议。另外,如果您有一个很棒的 postgres 和/或 Oracle 解决方案,请与我分享您的知识。:)


12345678_0001
浏览 182回答 1
1回答

炎炎设计

使用 Oracle,您可以使用NESTED TABLEs(或VARRAYs)将数组存储在列中:Oracle 11g R2 架构设置:CREATE TYPE String_Table IS TABLE OF VARCHAR2(100)/CREATE TABLE test (  id     NUMBER(10,0),  col1   VARCHAR2(10),  array1 String_Table) NESTED TABLE array1 STORE AS test__array1/INSERT INTO test ( id, col1, array1 )  SELECT 1, 'Row1', String_Table( 'A', 'B', 'C' ) FROM DUAL UNION ALL  SELECT 2, 'Row2', String_Table( 'C', 'D', 'E' ) FROM DUAL/查询 1:然后您可以使用集合操作,例如:MEMBER OF在集合中查找项目;和MULTISET运算符喜欢SUBMULTISET OF查找包含另一个集合的所有项目的集合。SELECT *FROM   testWHERE  'B' MEMBER OF array1OR     String_Table( 'E', 'C' ) SUBMULTISET OF array1结果:| ID | COL1 | ARRAY1 ||----|------|--------||  1 | Row1 |  A,B,C ||  2 | Row2 |  C,D,E |如果您使用的是 Java,那么您可以将 Java 数组作为 aPreparedStatement或 的绑定参数传递CallableStatement。这方面的一些例子是here和here。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java