我创建了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
答案 0 :(得分:2)
“我不想将图像存储到数据库中,因为它会导致 我认为,在尺寸,性能和便携性方面存在问题。所以 图像应该在文件系统“
中
你的观点不合格。
尺寸。护照照片非常小,因此除非您要存储像素数极高的图片,否则它们不会占用大量磁盘。无论哪种方式,它们都会在数据库和操作系统中消耗相当数量的空间。
性能。唯一可能的问题是数据库服务器和中间层服务器之间的网络流量。这将是尺寸的函数,因此可能是也可能不是真正的问题。使用na OS文件存储会在为每条记录检索JPG时引入时间延迟。
可移植性。数据库中的所有解决方案都比您提议的解决方案更具可移植性。没有像目录路径那样破坏。
您还没有考虑过一件事,但您真的应该是员工记录上的DML。如果图片存储在数据库中,则它们在与其余数据相同的事务中提交(因此与之一致),它们会同时备份,并且可以在同一窗口中恢复。这些都不适用于单独服务器上的OS目录。
“存储在文件系统中...我使用BFILE获得解决方案”
BFILE是将数据库记录与OS文件链接的机制。因此,在您定义问题时,它是适合您的问题的解决方案。但是BFILE指向数据库服务器上的文件,因此您将失去从不在数据库中存储记录(数据库和中间层服务器之间的网络流量)中获得的唯一可能的效率。 BFILE不会与数据库一起备份,也不会受到任何事务一致性的影响。
“empno是使用数据库触发器(max empno + 1)自动生成的”
另一个坏主意。它不会扩展,更重要的是它不适用于多用户环境。请使用序列,它们是专为此任务而设计的。