如何使用映像为oracle数据库表11gR2

时间:2014-12-31 02:16:42

标签: image forms oracle

我创建了emp表来存储员工信息及其PP尺寸照片。 这个表有empno(number),emp_image_link(varchar2),.... etc等字段。 empno是使用数据库触发器(max empno+1)自动生成的。

图片:我不想将图像存储到数据库中,因为我认为它会在尺寸,性能和可移植性方面造成问题。所以图片应该在D:\images\的文件系统中 和图片网址应为D:\images\empno.jpg,这意味着emp_image_link字段将仅包含图片链接。

我在Google上搜索了很多关于这一点,每个人都在讨论如何存储到数据库中。 我没有找到任何关于如何只存储链接而不是图像的信息。 我将使用Oracle Forms Developer 11gR2。 任何人都可以告诉我如何做到这一点。

提前谢谢。

Murshed Khan

1 个答案:

答案 0 :(得分:2)

  

“我不想将图像存储到数据库中,因为它会导致   我认为,在尺寸,性能和便携性方面存在问题。所以   图像应该在文件系统“

你的观点不合格。

尺寸。护照照片非常小,因此除非您要存储像素数极高的图片,否则它们不会占用大量磁盘。无论哪种方式,它们都会在数据库和操作系统中消耗相当数量的空间。

性能。唯一可能的问题是数据库服务器和中间层服务器之间的网络流量。这将是尺寸的函数,因此可能是也可能不是真正的问题。使用na OS文件存储会在为每条记录检索JPG时引入时间延迟。

可移植性。数据库中的所有解决方案都比您提议的解决方案更具可移植性。没有像目录路径那样破坏。

您还没有考虑过一件事,但您真的应该是员工记录上的DML。如果图片存储在数据库中,则它们在与其余数据相同的事务中提交(因此与之一致),它们会同时备份,并且可以在同一窗口中恢复。这些都不适用于单独服务器上的OS目录。


  

“存储在文件系统中...我使用BFILE获得解决方案”

BFILE是将数据库记录与OS文件链接的机制。因此,在您定义问题时,它是适合您的问题的解决方案。但是BFILE指向数据库服务器上的文件,因此您将失去从不在数据库中存储记录(数据库和中间层服务器之间的网络流量)中获得的唯一可能的效率。 BFILE不会与数据库一起备份,也不会受到任何事务一致性的影响。


  

“empno是使用数据库触发器(max empno + 1)自动生成的”

另一个坏主意。它不会扩展,更重要的是它不适用于多用户环境。请使用序列,它们是专为此任务而设计的。