資料庫程式設計 – PHP+MySQL :第 二章 網頁資料庫簡介與 course_db 下一頁 |
第二章 網頁資料簡介與 course_db
我們利用下面幾個章節來簡述資料庫的基本概念。 顧名思義,資料庫是儲存資料的地方,就好像材料倉庫是存放材料的地方,但如果材料沒有分類排列放置的話,當材料數量過多時,我們將很難在一個大倉庫裡找尋所要的東西。另一方面,也很難清點、計算、統計材料的數量。當然啦,資料數量、種類不夠多的話,根本不要考慮用到資料庫儲存,但目前任何一家公司,不論客戶資料、工作項目、員工人數、貨品、、等等,數量與種類都非常的大,如不用資料庫來儲存的話,在增加、修改、擷取、刪除、、等等管理上會非常困難。
圖 2-1 資料庫內容 圖 2-1 是一般公司行號的資料庫環境。目前任何公司行號內的作業,大多仰賴資訊系統來整合管理。由電腦來管理公司內人事、生產、行銷、客戶等等運作事項。亦是,有一大堆的資料需要擲入電腦內,讓電腦來分類管理。彙整管理所有資料的裝置就是『資料庫』。可以說,資料庫是公司所有運作的核心,它的重要性是無可倫比的。因此,學習資料庫是現代資訊人員不可或缺的基本能力。 從簡單的構思,大量資料一定要將它分類儲存,才會比較容易搜尋、更新或刪除等等管理。資料庫也不例外,它也是將資料分類再儲存。因此,在一個資料庫內必須建立許多『資料表』(table),再將資料分類儲存在各個資料表內。圖 2-2 是一般資料庫的結構。
圖 2-2 一個資料庫內有若干個資料表 當資料表夠多時,我們希望資料表之間建立關聯,才比較容易由一個資料表找到另一個資料。這樣的設計,可以減低資料表的欄位與數量,也可降低不一致性問題(這裡不討論如何降低)。我們以圖 2-3 說明資料表的關聯性,我們為了簡化資料表的數量,將與客戶有關的資料分為四個資料表存放。客戶資料表專門存放與公司往來的客戶資料,客戶訂單表存放客戶的訂單,只要這兩個資料表建立關聯,在訂單資料表內就不需放置客戶的詳細資料,譬如客戶地址、電話、負責人、甚至信用度等等。另一方面,在客戶資料表內就不需放置有關客戶訂購的詳細清單。另外,再加上產品出貨與出貨收款兩個資料表,就可以將所有客戶的資料、訂貨、出貨、收款等資料分類收集。只要四個資料表之間建立關聯,我們就很容易可以查詢出:某位客戶訂購哪些東西、要寄到甚麼地方、已經出貨了沒有、出貨後是否已經收款、、、等等。
圖 2-3 資料表之間的關聯 資料庫內所有資料表都建立完善的關聯,我們就可以利用這些關聯製作出一套完美的資訊管理系統。圖2-4 是資料庫內資料表之間的關聯。
圖 2-4 資料庫內資料表之間的關聯 基本上,一個資料表描述一個獨立的『實體』 (Entity) 或『個體』(Body),它可能是有形、抽象、或無形的事件或實體東西。譬如:客戶資料是描述有形的實體,銷售業績是無形的個體。另外,到底要如何描述一個實體呢?這是一個很實際的問題,可能要依照系統的需求而定。譬如:描述員工資料可能需要:姓名、員工代號、地址、電話號碼、、等等現象,這些現象就稱為資料表的『屬性』(Attribute)。以員工資料為例,如在銷售管理、生產管理、人事管理或會計管理,它們所要的資料也許不同,建構員工資料的屬性也不會相同。 簡單的說,一個資料表是由若干個屬性所構成,選擇哪些屬性才滿足系統需求,這是另外一門學問不在此探討。另外,每一個屬性是由一個資料來表示,這表示此資料需要一個有規範的資料型態,譬如:整數、浮點數、字串、時間、日期、、等等,每一種資料型態也會規範其大小,譬如字串有可能是 20 字元(VARCHAR(20))、40 字元(VARCHAR(40))等等;甚至,規定某一屬性是否允許『空白』 (NULL)。如果違反屬性的規範,資料庫系統將不允許存入,否則即破壞規則。 『屬性』這個名詞並不親民,習慣上都稱為資料表的『欄位』(Field)。圖 2-5 是 classes 資料表的結構,它由四個欄位所構成,分別是班級代碼(class_ID)、班級名稱(class_name)、所屬系別的代碼(Dep_ID)與入學年度(year),也分別限定它們的資料型態與範圍。
圖 2-5 資料表的屬性(欄位) 在一個資料表內大多會放置若干筆資料,這些資料都是由相同的欄位描述著。但不同資料內的欄位內容可能相同,甚至兩筆以上資料的所有欄位都相同也有可能。因此,我們有需要在眾多欄位中至少設定一個欄位的內容,不允許與其他資料相同,甚至可以代表該筆資料,這些欄位就稱為『主鍵』(Primary Key)。以班級資料表為例,class_ID(班級代碼)就是主鍵,它不可以重複,也不允許空值,如圖 2-6 所示。
圖 2-6 資料表的主鍵 大致上,我們知道一個資料庫是由多個資料表所構成,一個資料表是由若干個欄位(或稱屬性)所結合而成。然而,又希望這些資料表之間能夠建立關聯,我們才能整合多個資料表,經過處理後才能得到珍貴的訊息(利用 SQL 工具),正因如此,才能開發出完善的資訊管理系統。但到底要如何讓資料表之間產生關聯呢?很簡單,就是建立『外來鍵』(Foreign Key)。 外來鍵是在資料表內選擇一個欄位參考其他資料表的某一欄位。以圖 2-7 為例,譬如 students 的 class_ID 欄位參考到 classes 的 class_ID 欄位,是表明學生是屬於哪一個班級,如此一來,在 students 資料表內就不需要列出班級名稱 (class_name)、哪一系(dep_ID) 等資料。另外,teachers 的 Dep_ID 欄位參考到 department 的 dep_ID 欄位,是說明某位老師是屬於哪一系的。
圖 2-7 資料表的外來鍵 |
翻轉工作室:粘添壽 資料庫程式設計:
翻轉電子書系列:
|