資料庫中三大問題約束 CASE語句和檔案(下)

2021-04-13 06:24:24 字數 2596 閱讀 1784

延遲約束用處

它主要用於物化檢視(快照)。這些檢視會使用延遲約束來進行檢視重新整理。在重新整理物化檢視的過程中,可能會破壞完整性,而且將不能逐句檢驗約束。但到執行commit時,資料完整性就沒問題了,而且能滿足約束。沒有延遲約束,物化檢視的約束可能會使重新整理過程不能成功進行。

使用延遲約束的另乙個普遍原因是,當**是否需要更新父/子關係中的主鍵時,它有助於級聯更新。如果你將外來鍵設為可延遲、但初始化為立即執行,那麼你就可以將所有約束設定為可延遲。將父鍵更新為乙個新值--至此子關係的完整性約束不會被驗證。將子外來鍵更新為這個新值。

commit:只要所有受更新影響的子記錄都指向現有的父記錄,這條命令就能成功執行。

此外,你可以在各種多語句事務中使用延遲約束,這些事務在處理的過程中需要暫時破壞完整性,但最後它們都會物歸原樣。

case語句

如何計算時間

你是如何計算asktom.oracle.com第一頁中age列顯示的時間的?我之所以問這個問題是因為我看到它有多種格式,如9個月3小時;2.3年;19個小時;等等。我是oracle新手,想知道你們在使用哪種日期計算法。

很好用的case語句:

select

case

when sysdate-timestamp < 1/24

then round(24*60*(sysdate-timestamp))

|| ' minutes old '

when sysdate-timestamp < 1

then round(24*(sysdate-timestamp))

|| ' hours old '

when sysdate-timestamp < 14

then trunc(sysdate-timestamp)

|| ' days old '

when sysdate-timestamp < 60

then trunc((sysdate-timestamp)/7)

|| ' weeks old '

when sysdate-timestamp < 365

then round(months_between

(sysdate,timestamp))

|| ' months old '

else round(months_between

(sysdate,timestamp)/12,1)

|| ' years old '

end age, ...

如果你想在oracle8i的pl/sql中使用case語句,則會出現乙個錯誤訊息,因為pl/sql語法分析程式不識別case語句。(請注意,在oracle9i不存在這樣的問題。)為了避開oracle8i的限制,你可以將case語句隱藏在檢視當中,並用pl/sql來查詢檢視。使用巢狀的decode語句來代替case語句。

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語句的功能完全相同,只是不太明顯。

檔案

從使用方面考慮,你覺得這樣的選項好嗎?它會過多占用系統全域性區(sga)嗎?考慮到應用程式的需求以及前端(基於瀏覽器),除了儲存為blob,還有沒有其他選擇,如檔案系統?

我什麼都存在資料庫裡。就是這樣。如果資料就是你的一切,無論它們有什麼樣的值,事實上都要放到資料庫中,在那裡資料可以得到專業化的管理、備份,恢復而且安全。除了這些實實在在的好處,你還可以索引及搜尋文件。(誠然,用檔案系統也可以做這些,但在索引和文件之間不存在完整性。)在資料庫中,你可以轉換文件格式(例如,上傳乙個doc檔案,而顯示為html格式)。你的資料是完全整合的、安全的、有備份的而且隨時供你使用。

在oracle公司內部,我們將乙個幾千g位元組的資料庫作為整個公司的乙個單一的檔案伺服器。公司所有文件都存在那裡,存在這樣乙個單一的地方,可以對這些文件進行備份、搜尋、建立索引和訪問。在常規的檔案系統中管理成千上萬的文件是不可能的。

資料庫模式中三大正規化

看了很多介紹三大正規化的資料,都很晦澀難懂,下面這個我覺得簡明易懂 1nf 字段不可分 2nf 有主鍵,非主鍵字段依賴主鍵 3nf 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴...

SQL Server資料庫開發十大問題

1 什麼是常見的對錶和字段的名字約束?2 有沒有可能在不了解t sql的情況下編寫儲存過程 3 t sql 中如何比較clr 儲存過程和函式的效能?4 我如何在乙個儲存過程中使用另乙個儲存過程產生的結果?5 我如何解決sql server 2005的併發問題?6 在sql server 2005中用...

Mysql資料庫約束和三大正規化

show databases use db show tables select from stu 約束 主鍵約束 primary key 非空且唯一 非空約束 not null 唯一約束 unique 外來鍵約束 foreign key create table stu2 id int prima...