這篇的重點要談到以下幾個 : (1)資料表單設計的一些實務程序。 (2)資料欄位中代碼的設計。 (3)資料表單中外鍵約束的例外。 (4)資料表單有時需要違反正規化。 (5)資料表單中有時還是需要必要的冗餘資料。 在前面 這篇 已經談過將實體表單轉換為資料庫表單,但是並沒有說明過程。這篇來說明一下過程,並且再修正一下之前的答案。 要把紙面資料電子化,先把紙面資料的欄位整理出來,然後再看各欄位適合放在哪些資料表單中。我們從上面「出貨單」,看到以下的資訊 : (1) 公司資訊 (公司名稱、電話、傳真、地址) (2) 客戶資訊 (客戶名稱、電話、傳真、送貨地址) (3) 出貨日期、出貨單號 (4) 產品資訊 (產品編號、品名及規格、數量、單價、金額、備註) (5) 經手人資訊 (助理、業務) (6) 備註 (7) 簽收資訊 (簽收狀態、誰簽收、簽收日期) 通常「出貨單」資料都會從「訂單」資料轉過來,因此之前文章產生以下表單 客戶資料表 customer(cusno, cusname, cuszipcode, cusaddress, custel, cusfax, cuscontact) 職員資料表 employee(empno, empname, deptno, emptitle) 公…
需求~要列出符合【某個條件】的【某項資料】,應該如何寫出SQL指令呢? 第一步 : 找齊資料表。 【某項資料】是在哪個資料表? 以及【某個條件】中的判斷條件是在哪個資料表? 所以這個步驟 ,就可以把資料表都找齊了。 第二步 : 篩選出來【正確的資料表】。 但是許多情況,【某項資料】會存在許多資料表中,這個時候就要判斷,哪個資料表才是正確的。 方法就是把第一步找到的資料表,畫出關聯性,【某項資料】一定會存在具有關聯性的資料表中。所以就可以把不在關聯的資料表刪除。 第三步 : 套用再調整。 套用 SELECT 【某項資料】 FROM 【正確的資料表】 WHERE 【某個條件】AND 主鍵外鍵的關聯 其他部分 (如GROUP BY、HAVING、ORDER BY等等) 調整 看看那些欄位需要冠上 ~ 資料表.資料欄,例如 學生資料表.學生姓名 例如~ 要列出開課編號為o0001的「開課編號」、「學生姓名」。 由第一步,相關的欄位是 「 開課編號 」 、「學生姓名」。 「學生姓名」存在於學生資料庫, 「 開課編號 」存在於 選課資料表、 開課資料表、 時間資料表。 由第二 步,學生資料庫與 選課資料表,透過 學生編…
資料流圖DFD是描述系統中資料流程的一種圖形工具,它標誌了一個系統的邏輯輸入和邏輯輸出,以及把邏輯輸入轉換邏輯輸出所需的加工處理。 資料流圖是從資料的角度來描述一個系統,他只描述WHAT而不描述HOW。所以資料流圖並不會看到詳細的程序流程,只看到程序與資料流的關係。 如果系統的規模較大,為了降低系統的複雜性,一般採取「逐層分解」的方法,繪製分層的DFD。 DFD的表示法 : DFD的範例 : 訂餐系統 Level 0 DFD (通常不包含 data store) Level 1 DFD (拆解Level 0 的程序) DFD 與 ERD 有何關係呢? 可以透過DFD的實體(Entity)與Data Store,知道應該包含那些資料。 在DFD之後,如果要更清楚的描繪整個系統,就可以使用 UML Diagram 。
(1) 把每個[實體]都做成一個[表單],實體的[屬性]就是[欄位] , 並訂下主鍵(PK)。 例如 : Person (person_id, Name, Lastname, Email, Phone) (2) 當存在多值屬性時(如Phone),該多值屬性也變成一個表格。 例如 : Person (person_id, Name, Lastname, Email) 以及 Phone (person_id, phone_id, phone_number) (3) 當出現弱屬性時,該弱屬性可以由其他屬性得知,則該弱屬性不必成為一個欄位。 例如 : age可以由生日計算得知,age則不必成為一個欄位。 (4) 當實體A與實體B為 1:1 時,A表單加上FK連到B表單PK,或是B表單加上FK連到A表單 PK。 A(aid,a1,a2 …, bid) B(bid,b1,b2 …) 或是 A(aid,a1,a2 …) B(bid,b1,b2 …, aid) 以上A表單的bid為FK連接到B表單的bid (PK) 以上B表單的aid為FK連接到A表單的aid (PK) 例如 顧客 ~ 購物車關聯是1:1 (一個購物車對應一個顧客,一個顧客只能有一個購物車…
(1)資料庫需求收集與分析 Requirement Collection and Analysis 使用的工具就是DFD (Data Flow Diagram 資料流程圖),DFD是描述系統中資料流程的一種圖形工具,它標誌了一個系統的邏輯輸入和邏輯輸出,以及把邏輯輸入轉換邏輯輸出所需的加工處理。 值得注意的是,資料流圖不是傳統的流程圖或框圖,資料流也不是控制流。 參考 : https://www.visual-paradigm.com/tutorials/data-flow-diagram-dfd.jsp http://web.ydu.edu.tw/~alan9956/docu3/0992sa/sa04_dfd.pdf (2)資料庫概念設計 Conceptual Database Design 概念塑模(Conceptual Data Model)使用的工具,就是實體關係模型(Entity Relationship Model),最後會產生實體關係圖(Entity Relationship Diagram)。 參考 : https://www.mysql.tw/2013/03/entity-relationship-model.html http…
假設出貨單表單如下,你應該如何設計資料表,來表示這個表單? 正規化後,資料結構應該如何呢? 客戶資料表 customer( cusno , cusname, cuszipcode, cusaddress, custel, cusfax, cuscontact) 職員資料表 employee( empno , empname, deptno, emptitle) 公司部門表 department( deptno , deptname) 產品資料表 product( prodno , prodname, prodprice, prodamount) 訂單主檔資料表 myorder( ordno , cusno, orddate, ordtotal, salesno, assistno) 訂單品項資料表 myorderitem( ordno, serial , prodno, prodqty, prodprice) 以下的需求應該如何達成呢? (1)某個客戶在某個日期,訂購那些商品? SELECT p.prodno, p.prodname FROM product p, myorder m, myorderitem mi…
Data Modeling (資料塑模) 就是一種程序,用來定義跟分析資料需求,來支援某個商業程序。 下面就是維基百科所描述的資料塑模方法: 但是以上的方法,先經過邏輯塑模(Logical Data Model),再經過概念塑模(Conceptual Data Model),最後進行實體塑模(Physical Data Model)。 我們建議資料塑模,使用下圖的方式: 也就是先經過概念塑模(Conceptual Data Model),然後進行邏輯塑模(Logical Data Model),最後進行實體塑模(Physical Data Model)。 概念塑模(Conceptual Data Model)使用的工具,就是實體關係模型(Entity Relationship Model),最後會產生實體關係圖(Entity Relationship Diagram)。 邏輯塑模(Logical Data Model)使用的工具,就是關聯模型(Relational Model),最後會產生資料表的定義關聯綱目(schema)。 實體塑模(Physical Data Model)使用的工具,就是資料庫管理系統,或是 SQL語法,最後會產生真…
如下的資料,我們應該如何進行正規化呢? 如果無正規化,對於處理上有何問題呢? 資料表1: 問題在於欄位並非atomic(基元值),學號、學生姓名、成績欄位中有多個數值,所以並不符合1NF的條件。改成資料表3,所有記錄中的項目都是基元值,即無重覆資料項目,就可符合1NF的條件。 資料表2: 問題在於無法決定學生1、學生2、學生3 ... 到底需要多少個欄位,成績亦同,所以這個資料表無法決定相依關係。 資料表3: 問題在於不符合2NF的條件,也就是每一個非鍵屬性無法完全相依於主鍵。 所以必須拆開成幾個表單~ 如資料表4,以符合2NF的條件。 課程資料表 ( 課程編號 , 課程名稱, 教師編號, 教師姓名) , 學生資料表 ( 學號 , 學生姓名) , 成績資料表 ( 課程編號 , 學號 , 成績)。 資料表4: 但是上面的課程資料表,尚不符合3NF,所以再拆成如下資料表5。 資料表5: 所以就得到 .... 課程資料表 ( 課程編號 , 課程名稱, 教師編號) , 老師資料表 ( 教師編號 , 教師姓名) , 學生資料表 ( 學號 , 學生姓名) , 成績資料表 ( 課程編號, 學號 , …