数据库中三大问题:约束、CASE语句和文件(转)
本文用实例方式讲述了关于约束、CASE语句和文件三大问题。
约束
“定义为可延迟(deferrable)”的约束能指定为:
?
1. initially immediate(初始化即时执行)或
2. initially deferred(初始化延迟执行)。
?
知道什么是延迟约束,但不明白什么叫“初始化即时执行的可延迟约束”和“初始化延迟执行的可延迟约束”。请解释二者的差别。更有,这些约束有什么用途?这是通常容易混淆的问题。我希望下面的例子能解释清晰。初始化即时执行/延迟执行规定了在默认情况下应该怎么执行约束:
?
初始化即时执行:在每条语句执行结束时检验约束。
?
初始化延迟执行:直等到事务完成后(或调用set constraint immediate语句时)才检验约束。
?
通过代码分析两者不同:
?
decode(sign(sysdate-timestamp-1/24),-1, round(24*60*(sysdate-timestamp)) || ’ minutes old ’, decode(sign(sysdate-timestamp - 1), -1, round(24*(sysdate-timestamp)) || ’ hours old ’, decode(sign(sysdate-timestamp-14),-1, trunc(sysdate-timestamp) || ’ days old ’, decode(sign(sysdate-timestamp-60),-1, trunc((sysdate-timestamp)/7) || ’ weeks old ’, decode(sign(sysdate-timestamp-365),-1, round(months_between (sysdate,timestamp)) || ’ months old ’, round(months_between (sysdate,timestamp)/12, 1) || ’ years old ’ ))))) age
他和CASE语句的功能完全相同,只是不太明显。
?
文件
我正在考虑为一个应用程式设计些选项,利用他用户能上传和存储可供他人下载的文件。文件能是平均大小为150Kb的Microsoft Word文件。最初需要(从CD)移植18000到20000个文件,当使用该应用程式时存储数量会增加到大约25000个文件。浏览器前端是用于上传和下载的PL/SQL插件(PL/SQL cartridge)页面。一开始,会有400到500人几乎同时访问该应用程式,两周内每天将有300人访问(分散访问)。 文件本身在数据库中作为BLOB存储。
?
从使用方面考虑,你觉得这样的选项好吗?他会过多占用系统全局区(SGA)吗?考虑到应用程式的需求及前端(基于浏览器),除了保存为BLOB,更有没有其他选择,如文件系统?
?
我什么都存在数据库里。就是这样。如果数据就是你的一切,无论他们有什么样的值,事实上都要放到数据库中,在那里数据能得到专业化的管理、备份,恢复而且安全。除了这些实实在在的好处,你还能索引及搜索文件。(诚然,用文件系统也能做这些,但在索引和文件之间不存在完整性。)在数据库中,你能转换文件格式(例如,上传一个DOC文件,而显示为HTML格式)。你的数据是完全集成的、安全的、有备份的而且随时供你使用。
?
在Oracle公司内部,我们将一个几千G字节的数据库作为整个公司的一个单一的文件服务器。公司所有文件都存在那里,存在这样一个单一的地方,能对这些文件进行备份、搜索、建立索引和访问。在常规的文件系统中管理成千上万的文件是不可能的。
以上内容由 华夏名网 搜集整理,如转载请注明原文出处,并保留这一部分内容。