首页 > 解决方案 > 在 Oracle 数据库中存储不同类型数据的最佳体验

问题描述

晚上好

我目前正在开发一个 Java 应用程序。现在我想让用户为一个对象保存无限数量的关联附件。

这些附件可以是以下类型:字符串、xml 文件、二进制文件。

我使用 Oracle 数据库作为数据库。每种类型实际上建议使用不同的数据类型:字符串 - VARCHAR XML 文件 - CLOB 二进制文件 - BLOB

这里最好的方法是什么?一个通用表,其中包含 3 个字段(varchar、clob、blob)并且根据类型是两个字段,然后是 NULL 或三个单独的表?

期待你的回答

标签: javaoracledata-structures

解决方案


您不必担心“浪费”空间,因为单个表包含三个不同的列,用于 、 和 的每个VARCHAR2广泛CLOB分类BLOB。Oracle 不会使用任何(有意义的)空间来执行此操作,如果您有 3 个表,那只会使事情复杂化。您已经为这些类型的文件内容选择了适当的数据类型。

为方便起见,我还会有一个附加列,FILE_TYPE VARCHAR2(10)其中可以包含文件类型。并且该列将通过一个简单的内联约束来限制以验证FILE_TYPE

create table user_files (
    file_name varchar2(4000) not null, 
    , file_type varchar2(8) not null check (file_type in ('VARCHAR2', 'CLOB', 'BLOB'))
    , text_data varchar2(4000)
    ,xml_data  clob
    , binary_data blob
   );


推荐阅读