首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 數據庫核心對象認知:表與視圖的創建、管理與進階特性

     編輯:Oracle 資料庫基礎

核心定位

表:數據持久化的基本單元,擁有段、區、塊物理存儲。
視圖:一個或多個表的邏輯映射,不佔用數據段空間 (除物化視圖),本質是預編譯的 SELECT 查詢。

一、 表的創建與管理

1. 基礎創建語法

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)
);

2. 設計原則 (OFA 風格)

  • 列順序:主鍵、非空列、固定長列 前置;可空、可變長、大對象列 後置 (優化行寄存、減少空洞)。
  • 命名規範:業務前綴 + 實體名 + 後綴 (如 ORD_ITEMS、IDX_ORD_ITEMS_PROD)
  • 默認值:審計列 (CREATED_BY, CREATED_DT) 必加默認值,減少應用層邏輯。
  • 約束命名:PK_表名, FK_表名_引用表, UK_表名_列, CK_表名_業務規則

3. 進階表類型

類型關鍵字典型場景版本
分區表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+

二、 視圖的創建與管理

1. 標準視圖

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;  -- 防止誤通過視圖修改基表

2. 視圖分類與特性

類型定義可更新性用途
簡單視圖單表、無聚合/分組/Distinct/Join✅ (含 CHECK OPTION)權限控制、列掩碼
複雜視圖多表 Join、聚合、集合操作❌報表查詢、邏輯封裝
物化視圖CREATE MATERIALIZED VIEW ... BUILD IMMEDIATE REFRESH FAST ON COMMIT✅ (特定條件)查詢加速、數據複製、匯總預計算
版本啟用視圖用於 Workspace Manager✅長事務、版本控制

3. 關鍵選項

  • WITH READ ONLY:禁止 DML,純查詢入口
  • WITH CHECK OPTION:插入/更新必須滿足視圖 WHERE 條件,防止「穿透」產生不符合視圖定義的數據
  • FORCE:基表不存在也可創建 (延遲編譯)

三、 表與視圖的協同最佳實踐

  1. 權限隔離:應用賬號僅授予視圖 SELECT,不直接授表權限。
  2. 邏輯封裝:業務規則 (如「有效訂單」) 封裝在視圖 WHERE 中,應用只查視圖。
  3. 平滑演進:表結構變更 (增列、拆表) 時,視圖層吸收變化,應用 SQL 零修改。
  4. 物化視圖加速:高頻複雜聚合查詢 → 物化視圖 + QUERY REWRITE (10g+ 自動重寫)。

四、 常用管理 DDL

-- 重命名表
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;

總結: 表是「骨架」,視圖是「面孔」。優秀的數據庫設計師懂得:用表承載事實,用視圖表達業務語義,用物化視圖換取查詢速度。掌握進階表類型與視圖選項,是從「建表工」進階為「數據架構師」的必經之路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved