文章

目前顯示的是 四月, 2014的文章

資料庫正規化實作練習

圖片
如下的資料,我們應該如何進行正規化呢? 如果無正規化,對於處理上有何問題呢? 資料表1: 問題在於欄位並非atomic(基元值),學號、學生姓名、成績欄位中有多個數值,所以並不符合1NF的條件。改成資料表3,所有記錄中的項目都是基元值,即無重覆資料項目,就可符合1NF的條件。 資料表2: 問題在於無法決定學生1、學生2、學生3 ... 到底需要多少個欄位,成績亦同,所以這個資料表無法決定相依關係。 資料表3: 問題在於不符合2NF的條件,也就是每一個非鍵屬性無法完全相依於主鍵。 所以必須拆開成幾個表單~ 如資料表4,以符合2NF的條件。 課程資料表 ( 課程編號 , 課程名稱, 教師編號, 教師姓名) , 學生資料表 ( 學號 , 學生姓名) , 成績資料表 ( 課程編號 ,  學號 , 成績)。 資料表4: 但是上面的課程資料表,尚不符合3NF,所以再拆成如下資料表5。 資料表5: 所以就得到 ....  課程資料表 ( 課程編號 , 課程名稱, 教師編號) , 老師資料表 ( 教師編號 , 教師姓名) , 學生資料表 ( 學號 , 學生姓名) , 成績資料表 ( 課程編號, 學號 , 成績)。 再以SQL指令來處理資料表 ... 到mysql的bin目錄 (假設在Z磁碟的easyphp目錄下) Z: cd /easyphp/binaries/mysql/bin mysql -u root -p (1) 建立資料庫 create database my course character set utf8 collate utf8_general_ci;  (2) 開始使用 mycourse   這個資料庫。 use mycourse ; (3)  建立資料表 CREATE TABLE mystudent ( stud_no char(10) NOT NULL, stud_name varchar(255) NOT NULL, PRIMARY KEY (stud_no) ); CREATE TABLE myteacher ( tea_no char(10) NOT NULL, tea_name varchar(255) N