確保受保護欄位組合在任兩列不相同。單欄可列層級定義;多欄須表層級定義。由 B-Tree 索引強制。
CREATE TABLE INSURED_AUTOS(
POLICY_ID NUMBER CONSTRAINT PK_POLICIES PRIMARY KEY,
VIN VARCHAR2(10),
COVERAGE_BEGIN DATE,
COVERAGE_TERM NUMBER,
CONSTRAINT UNIQUE_AUTO UNIQUE (POLICY_ID, VIN)
USING INDEX TABLESPACE IDX_TS STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);
管理:
ALTER TABLE INSURED_AUTOS DISABLE CONSTRAINT UNIQUE_AUTO;
ALTER TABLE INSURED_AUTOS DROP CONSTRAINT UNIQUE_AUTO;
不可刪除被外鍵參考的唯一鍵,需先停用/刪除外鍵。
避免效能損失策略:
表僅一主鍵,可跨多欄,隱含 NOT NULL + UNIQUE,同由 B-Tree 索引強制。
CREATE TABLE POLICIES(
POLICY_ID NUMBER CONSTRAINT PK_POLICIES PRIMARY KEY,
HOLDER_NAME VARCHAR2(40),
GENDER VARCHAR2(1),
MARITAL_STATUS VARCHAR2(1),
DATE_OF_BIRTH DATE
);
-- 多欄主鍵
CONSTRAINT PK_NAME PRIMARY KEY (COL1, COL2)
USING INDEX TABLESPACE IDX_TS STORAGE (...);
建立父子表參考關係,確保子表外鍵值存在於父表主鍵/唯一鍵中。
-- 子表定義
CONSTRAINT FK_NAME FOREIGN KEY (COL) REFERENCES PARENT_TABLE(PK_COL)
[ON DELETE CASCADE|SET NULL];
ON DELETE CASCADE:刪除父列連帶刪除子列
ON DELETE SET NULL:刪除父列將子列外鍵設為 NULL
單列布林條件,至少一欄為 NULL 即通過。可跨同列欄位,不可跨列、不可呼叫 SYSDATE/UID/USER/USERENV。不支援 LOB/物件/巢狀表/VARRAY/REF 型別。
CONSTRAINT CHK_GENDER CHECK (GENDER IN ('M','F'))
CONSTRAINT CHK_MARITAL CHECK (MARITAL_STATUS IN ('S','M','D','W'))
單欄強制非空。語法特殊:
ALTER TABLE POLICIES MODIFY HOLDER_NAME NOT NULL;
ALTER TABLE T ENABLE CONSTRAINT CONS_NAME;
ALTER TABLE T DISABLE CONSTRAINT CONS_NAME;
ALTER TABLE T DROP CONSTRAINT CONS_NAME;