iT邦幫忙

DAY 12
2

只談MySQL系列 第 12

只談MySQL (第十二天) Reference Key...

資料庫中的資料一致性與完整性是很重要的課題, 這是保持資料庫中的資料有著高可用度的重要指標, 而保持資料庫的一致性與完整性最常用的技巧就是Reference Key
讓我們以例子來說明...

  1. 銷貨單表頭Sales_Order_Header
    mysql> CREATE TABLE Sales_Order_Header
    (SalesID CHAR(10) NOT NULL PRIMARY KEY (SalesID),
    CustomerName VARCHAR(30) NOT NULL, SalesDate DATETIME NOT NULL,
    DueDate DATE, ShipDate DATETIME, Status CHAR(1) NOT NULL);
    其中Status欄位的內容值有: N:新單, P:處理中, R:退件, X:取消, S:交貨中, C:結案
    SalesID是索引主鍵
  2. 銷貨單表身Sales_Order_Detail
    mysql> CREATE TABLE Sales_Order_Detail
    (SalesID CHAR(10) NOT NULL, ItemID CHAR(10) NOT NULL,
    ItemName VARCHAR(50), Unit VARCHAR(10), Quantity INT,
    Price DECIMAL(10, 2), Amount DECIMAL(12, 2),
    INDEX SID (SalesID), FOREIGN KEY (SalesID) REFERENCES Sales_Order_Header(SalesID) ON DELETE CASCADE);
    我們在Sales_Order_Detail表中的SalesID欄位建立了一個Reference Key到Sales_Order_Header的SalesID, 這樣子, 當要刪除Sales_Order_Header中的資料時, 會先去看看Sales_Order_Detail中有沒有相同的SalesID, 如果有就會禁止刪除Header中的SalesID, 以確保資料一致與完整.
    我們是用Foreign Key的方式來建立Reference, 所以, Sales_Order_Detail的SalesID也要建立INDEX, 但因在Detail中的SalesID的值可重覆, 因此只建立簡單INDEX.
    利用Reference/Foreign Key的方式, 我們就可以在資料庫端控制資料刪除時的資料完整與一致性.

上一篇
只談MySQL (第十一天) MySQL的資料處理指令
下一篇
只談MySQL (第十三天) 更多資料定義的指令
系列文
只談MySQL30

尚未有邦友留言

立即登入留言