晚上好
我目前正在开发一个Java应用程序。现在我想让用户为一个对象保存无限数量的关联附件。
这些附件可以是以下类型:字符串、xml文件、二进制文件。
我使用Oracle数据库作为数据库。实际上,建议为每种类型使用不同的数据类型:字符串-VARCHARXML文件-CLOB二进制文件-BLOB
这里最好的路是什么?一个通用表,其中包含3个字段(varchar、clob、blob(,根据类型的不同,是两个字段,然后为NULL,还是三个单独的表?
我期待着你的答案
您不必担心"浪费的";对于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
);