表:數據持久化的基本單元,擁有段、區、塊物理存儲。
視圖:一個或多個表的邏輯映射,不佔用數據段空間 (除物化視圖),本質是預編譯的 SELECT 查詢。
CREATE TABLE products (
prod_id NUMBER(4) PRIMARY KEY,
prod_name VARCHAR2(20) NOT NULL,
stock_qty NUMBER(5,3) DEFAULT 0,
created_dt DATE DEFAULT SYSDATE,
status CHAR(1) CHECK (status IN ('A','I')),
category_id NUMBER(3) REFERENCES categories(cat_id)
);
ORD_ITEMS、IDX_ORD_ITEMS_PROD)CREATED_BY, CREATED_DT) 必加默認值,減少應用層邏輯。PK_表名, FK_表名_引用表, UK_表名_列, CK_表名_業務規則| 類型 | 關鍵字 | 典型場景 | 版本 |
|---|---|---|---|
| 分區表 | PARTITION BY RANGE/LIST/HASH | 大表生命周期管理、分區剪枝 | 8i+ |
| 索引組織表 (IOT) | ORGANIZATION INDEX | 主鍵訪問為主、無二級索引、節省空間 | 8i+ |
| 外部表 | ORGANIZATION EXTERNAL | 平文件直接查詢 (ETL 階段)、無需導入 | 9i+ |
| 臨時表 | GLOBAL TEMPORARY TABLE | 會話/事務級中間結果、自動清理 | 8i+ |
| 對象表 | 基於 OBJECT TYPE | 面向對象應用、嵌套集合 | 8i+ |
| 混合列壓縮 (HCC) | COMPRESS FOR QUERY/ARCHIVE | 數據倉庫、歸檔數據 (Exadata/ZFS) | 11gR2+ |
CREATE OR REPLACE VIEW v_emp_dept AS
SELECT e.empno, e.ename, e.sal, d.dname, d.loc
FROM emp e JOIN dept d ON e.deptno = d.deptno
WHERE e.sal > 2000
WITH READ ONLY; -- 防止誤通過視圖修改基表
| 類型 | 定義 | 可更新性 | 用途 |
|---|---|---|---|
| 簡單視圖 | 單表、無聚合/分組/Distinct/Join | ✅ (含 CHECK OPTION) | 權限控制、列掩碼 |
| 複雜視圖 | 多表 Join、聚合、集合操作 | ❌ | 報表查詢、邏輯封裝 |
| 物化視圖 | CREATE MATERIALIZED VIEW ... BUILD IMMEDIATE REFRESH FAST ON COMMIT | ✅ (特定條件) | 查詢加速、數據複製、匯總預計算 |
| 版本啟用視圖 | 用於 Workspace Manager | ✅ | 長事務、版本控制 |
WITH READ ONLY:禁止 DML,純查詢入口WITH CHECK OPTION:插入/更新必須滿足視圖 WHERE 條件,防止「穿透」產生不符合視圖定義的數據FORCE:基表不存在也可創建 (延遲編譯)QUERY REWRITE (10g+ 自動重寫)。-- 重命名表
RENAME old_table TO new_table;
ALTER TABLE old_table RENAME TO new_table;
-- 修改列
ALTER TABLE t MODIFY (col VARCHAR2(100));
ALTER TABLE t RENAME COLUMN old_col TO new_col;
ALTER TABLE t DROP COLUMN col; -- 10g+ 支持,舊版 SET UNUSED + DROP UNUSED COLUMNS
-- 截斷/刪除
TRUNCATE TABLE t; -- 保留結構、釋放空間、不可回滾
DROP TABLE t CASCADE CONSTRAINTS; -- 連同約束、索引、權限一起刪
-- 視圖重編譯
ALTER VIEW v_name COMPILE;
總結: 表是「骨架」,視圖是「面孔」。優秀的數據庫設計師懂得:用表承載事實,用視圖表達業務語義,用物化視圖換取查詢速度。掌握進階表類型與視圖選項,是從「建表工」進階為「數據架構師」的必經之路。