gpt4 book ai didi

oracle - 带有 blob 的数据库设计 - 保存在单独的表中?

转载 作者:行者123 更新时间:2023-12-04 00:48:47 25 4
gpt4 key购买 nike

我有一种情况需要将二进制数据作为 blob 列存储在 Oracle 数据库中。我的数据库中有三个不同的表,我需要为每条记录存储一个 blob 数据。并非每条记录都必须始终具有 blob 数据。它取决于时间和用户。

  • 表一将为几乎每条记录存储 *.doc 文件。
  • 表二将选择性地存储 *.xml。
  • 表三将存储图像(频率未知)

维护一个单独的表来存储指向各个表主键的各种 blob 数据是否是一种好方法? (是的,不会有 FK,我假设程序会维护它)。它会像下面这样,

BLOB|PK_ID|TABLE_NAME

或者,将 blob 列保存在单独的表中是个好主意吗?

就我的应用程序运行时而言,

表 2 将被非常频繁地阅读。尽管不需要 blob 列。
表2的记录会被频繁删除。

各个表中的其他 blob 数据将不会被频繁访问。将根据需要读取所有 blob 内容。

我认为第一种方法更适合我。在性能或可维护性方面对这种设计有任何顾虑吗?

最佳答案

如果给定记录和 LOB 之间存在一对一关系,那么最好的办法是在记录中声明 LOB 列。 Oracle 允许我们为 LOB 声明一个单独的表空间,因此对存储没有太大影响。

create table t23
( id number not null
, col1 number not null
, col2 date not null
, col3 varchar2(255)
, a_doc clob
, x_doc xmltype
, constraint t23_pk primary key (id)
)
tablespace app_date
lob (a_doc) store as basicfile a_lob (tablespace lob_data)
lob (x_doc) store as securefile x_lob (tablesapce xml_data)
/

(SECUREFILE 是 11g 中引入的企业版功能。Find out more)。

此方法的主要内容是,如果您不想包含 LOB 列,则必须明确指定要选择的列。这不应该是一个困难,因为它是最佳实践:select * from .... 是一个等待发生的错误。

"The table three will have to store images"

如果您有一对多关系,那么您将需要一个单独的图像表。

在存储 LOB 和调整受影响的查询方面有很多微妙之处。我建议你阅读 this Oracle white paper, from the OTN website .

关于oracle - 带有 blob 的数据库设计 - 保存在单独的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2887552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com