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

Oracle 外鍵(Foreign Key)完整應用指南(上)

     編輯:Oracle 教學

Oracle 外鍵(Foreign Key)完整應用指南(上)

在關聯式資料庫設計中,外鍵是維護資料參考完整性的核心機制。本文將系統性介紹 Oracle 資料庫中外鍵的建立、管理與實務應用,透過詳細的語法說明與範例代碼,幫助開發人員與 DBA 掌握外鍵的正確使用方式。

1. 學習目標

本文旨在示範如何在 Oracle 資料庫中有效使用外鍵約束,確保父子表之間的資料一致性與完整性。

2. 什麼是外鍵?

外鍵是實現參考完整性的關鍵機制之一。形象地說,外鍵約束要求子表中特定欄位的值,必須存在於父表的對應主鍵或唯一鍵中。

  • 父表(Parent Table):被參考的表,包含主鍵或唯一鍵。
  • 子表(Child Table):定義外鍵的表,其外鍵欄位關聯父表的主鍵。

外鍵可在建表時定義,也可事後透過 ALTER TABLE 陳述式新增。

3. 建表時定義外鍵

基本語法

CREATE TABLE table_name (
    column1 datatype NULL/NOT NULL,
    column2 datatype NULL/NOT NULL,
    ...
    CONSTRAINT fk_name FOREIGN KEY (column1, column2, ...)
    REFERENCES parent_table (column1, column2, ...)
);

範例一:單欄位外鍵

-- 建立供應商父表
CREATE TABLE tb_supplier (
    supplier_id NUMBER NOT NULL,
    supplier_name VARCHAR2(50) NOT NULL,
    contact_name VARCHAR2(50),
    CONSTRAINT pk_supplier PRIMARY KEY (supplier_id)
);

-- 建立產品子表,關聯供應商
CREATE TABLE tb_products (
    product_id NUMBER NOT NULL,
    product_name VARCHAR2(100),
    supplier_id NUMBER NOT NULL,
    CONSTRAINT fk_products_supplier FOREIGN KEY (supplier_id)
    REFERENCES tb_supplier(supplier_id)
);

範例二:複合外鍵(多欄位)

DROP TABLE tb_products;
DROP TABLE tb_supplier;

CREATE TABLE tb_supplier (
    supplier_id NUMBER NOT NULL,
    supplier_name VARCHAR2(50) NOT NULL,
    contact_name VARCHAR2(50),
    CONSTRAINT pk_supplier PRIMARY KEY (supplier_id, supplier_name)
);

CREATE TABLE tb_products (
    product_id NUMBER NOT NULL,
    product_name VARCHAR2(100),
    supplier_name VARCHAR2(50),
    supplier_id NUMBER NOT NULL,
    CONSTRAINT fk_products_supplier FOREIGN KEY (supplier_id, supplier_name)
    REFERENCES tb_supplier(supplier_id, supplier_name)
);

4. 使用 ALTER TABLE 新增外鍵

語法結構

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ...)
REFERENCES parent_table (column1, column2, ...);

實務範例

DROP TABLE tb_products;
DROP TABLE tb_supplier;

CREATE TABLE tb_supplier (
    supplier_id NUMBER NOT NULL,
    supplier_name VARCHAR2(50) NOT NULL,
    contact_name VARCHAR2(50),
    CONSTRAINT pk_supplier PRIMARY KEY (supplier_id, supplier_name)
);

CREATE TABLE tb_products (
    product_id NUMBER NOT NULL,
    product_name VARCHAR2(100),
    supplier_name VARCHAR2(50),
    supplier_id NUMBER NOT NULL
);

-- 事後新增複合外鍵約束
ALTER TABLE tb_products
ADD CONSTRAINT fk_products_supplier
FOREIGN KEY (supplier_id, supplier_name)
REFERENCES tb_supplier(supplier_id, supplier_name);

若在實作過程中遇到問題,或發現代碼有誤,歡迎指正交流。

聯絡信箱:david.louis.tian@outlook.com

版權聲明:轉載請註明出處。

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