利用函式索引解決複雜的約束問題
今天在pub上看到一個有意思的問題,需要建立一個複雜的約束條件。http://www.itpub.net/showthread.php?s=&threadid=707666
簡單描述一下問題,需要建立條件唯一約束。對於每個ACCOUNT,要求表中只能有一條記錄的標識位為1,標識位為0的記錄沒有限制。
Oracle的普通約束無法滿足這個條件。解決最常見的方法透過觸發器進行設定。帖子中西門吹牛採用了物化檢視的方法,建立一個彙總的ON COMMIT物化檢視,並在物化檢視上建立一個CHECK約束,這樣有問題的資料在提交時會報錯的。缺點是相對比較麻煩,而且錯誤檢查必須放到提交的時刻。
最簡單的解決方法是建立一個唯一函式索引。
看一個簡單的例子:
SQL> CREATE TABLE T (ACCOUNT NUMBER, NAME VARCHAR2(30), FLAG NUMBER(1));
表已建立。
SQL> CREATE UNIQUE INDEX IND_T_ACCOUNT ON T(DECODE(FLAG, 1, ACCOUNT, NULL));
索引已建立。
SQL> INSERT INTO T VALUES (1, 'A', 1);
已建立 1 行。
SQL> INSERT INTO T VALUES (1, 'A', 0);
已建立 1 行。
SQL> INSERT INTO T VALUES (2, 'A', 1);
已建立 1 行。
SQL> INSERT INTO T VALUES (1, 'B', 0);
已建立 1 行。
SQL> INSERT INTO T VALUES (1, 'C', 1);
INSERT INTO T VALUES (1, 'C', 1)
*第 1 行出現錯誤:
ORA-00001: unique constraint (TEST.IND_T_ACCOUNT) violated
開始的時候我給出的方案中,索引的建立方式為:
CREATE UNIQUE INDEX IND_T_ACCOUNT ON T(DECODE(FLAG, 1, ACCOUNT, NULL), DECODE(FLAG, 1, 1, NULL));
經zhouwf0726的提醒,發現索引後半部分沒有意義,因此改成上面的索引建立方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69142/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用函式索引構造特殊的約束函式索引
- 關於Hash 函式 雜湊索引表 解決位置衝突的問題函式索引
- 解決資料庫的索引亂碼問題,先刪除外來鍵約束,再刪除主鍵約束及其索引資料庫索引
- 函式索引的問題函式索引
- 簡單問題複雜著解決
- 建立聯合函式索引解決top sql效能問題函式索引SQL
- 結合EM快速解決複雜的配置問題
- 關於函式索引的問題?函式索引
- 分散式環境下利用快取解決重複性問題分散式快取
- ts函式約束定義函式
- 建約束(Constraint)時隱式建立索引(Index)及先建立索引後建立約束的區別AI索引Index
- 函式指標複雜的例子函式指標
- 最近解決了一個比較複雜的“死鎖”問題
- 0427建立Extended Statistics函式索引問題函式索引
- 0429建立Extended Statistics函式索引問題函式索引
- jquery的get()函式快取問題解決方案jQuery函式快取
- 關於解決博弈論問題的SG函式函式
- 解決中文問題的幾個常用的函式 (轉)函式
- 利用「系統思維」基本框架,拆解複雜的運營問題框架
- 批量註冊事件處理函式索引總是最後一個問題解決事件函式索引
- 利用errorstack event解決問題Error
- 不能建立降序索引的問題的解決索引
- 無順序約束的字串匹配問題字串匹配
- 【PK】Oracle 10g刪除主鍵約束後無法刪除唯一約束索引問題的模擬與分析Oracle 10g索引
- MySQL中的 UNIQUE約束和UNIQUE索引MySql索引
- 解決DDD核心的複雜性
- 分散式資料庫環境中,外來鍵約束的問題??分散式資料庫
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- C# 泛型 new()建構函式約束C#泛型函式
- 密碼複雜度設定函式密碼複雜度函式
- 常見問題--表的約束initially immediate 理解
- java函式陣列引數的複製問題Java函式陣列
- 降低程式碼的圈複雜度——複雜程式碼的解決之道複雜度
- 複合索引與函式索引優化一例索引函式優化
- Oracle如何管理帶約束的B樹索引Oracle索引
- Kimi探索版釋出,10倍搜尋量自主解決複雜問題
- 解決表單重複提交的問題
- 解決csdn登陸複製的問題