資料庫結構如下 : 學生資料表(學生編號, 身分證字號, 學生姓名, 科系編號, 年級, 班級) Student(sid, idno, sname, did, syear, sclass) 老師資料表(老師編號, 身分證字號, 老師姓名, 科系編號, 老師類別) Teacher(tid, idno, tname, did, ttype) 課程資料表(課程編號, 課程名稱, 科系代號, 學分數, 選修別) Course(cid, cname, did, ccredit, ctype) 開課資料表(開課編號, 課程編號, 老師編號, 修課年級限制, 教室編號) OpenCourse(oid, cid, tid, yearlimit, roomno) 時間資料表(開課編號, 開課時間編號) Schedule(oid, timeno) 選課資料表(學生編號, 開課編號, 成績) Roll(sid, oid, score) 科系資料表(科系編號, 科系名稱) Dept(did, dname) 資料內容如下 : 問題 : (1)請問如何找到學生s0001沒有衝堂…
資料庫的交易(Transaction)功能,能確保多個 SQL 指令,全部執行成功,或全部不執行,不會因為一些意外狀況,而只執行一部份指令,造成資料異常。 例如~ 當要轉帳時,會有一個交易資料,要從甲帳戶扣錢,把錢加到乙帳戶。如果這個交易從甲帳戶扣錢成功,結果乙帳戶的帳號錯誤,無法成功存入,怎麼辦? 如果有一個機制,可以把「從甲帳戶扣錢,把錢加到乙帳戶」當成一個完整的交易,只有兩個作業都成功,才進行交易(就是Commit),否則就取消交易(就是Rollback),這樣就不會出現錯誤。 要點 (1) MySQL 常用的兩個資料表類型:MyISAM 不支援交易功能,所以以下的整理,均是針對 InnoDB 的DML指令而言,DDL 的指令就不能 ROLLBACK。 怎麼知道我的資料表是MyISAM還是InnoDB? 請參考 https://www.mysql.tw/2017/06/innodb-foreign-key.html 開始進入交易模式,可以使用 START TRANSACTION 或是 BEGIN ,並等待 COMMIT 或是 ROLLBACK 來確定要不要確認交易。 要點 (2) SET AUTOCOMMIT=1; 表示每次的…
學生資料表(學生編號, 身分證字號, 學生姓名, 科系編號, 年級, 班級) Student(sid, idno, sname, did, syear, sclass) create table Student( sid char(5) not null, idno char(10), sname char(20), did char(5), syear int, sclass int, primary key (sid)); insert into Student(sid, idno, sname, did, syear, sclass) values ('s0001', 'A123456789', 'John01', 'd0001', 1, 1); insert into Student(sid, idno, sname, did, syear, sclass) values ('s0002', 'A123456780', 'John02', 'd0001', 1, 1); insert into Student(sid…
Customer (Name,Country,CreditLimit) Product (Product, Type, Price) Shipper (Name,Country) (1) Theta Join SELECT * FROM (SELECT * FROM Customer CROSS JOIN SELECT Product,Type FROM Product) WHERE CreditLimit > Price (2) Equi Join SELECT * FROM (SELECT * FROM Customer CROSS JOIN SELECT Product,Type FROM Product) WHERE CreditLimit =2500 (3) Equi Join SELECT * FROM Customer, Shipper WHERE Customer.Country=Shipper.Country (4) Natural Join (Inner Join) SELECT * FROM Customer Natural JOIN Shipper (5) Left Out…
EasyPHP的httpd.conf會有兩個,一個放在EasyPHP目錄下binaries\conf_files\httpd.conf,另外一個在EasyPHP目錄下binaries\apache\conf\httpd.conf。 原則上,我們是要編輯 EasyPHP目錄下binaries\conf_files\httpd.conf ,另外一個httpd.conf不要管他,他是系統會自動處理更新的檔案。 httpd.conf設定重點 : (1) ServerRoot "${path}/binaries/apache" 這是指http的伺服器啟動的根目錄,這個不需要去修改。 (2) Listen 127.0.0.1:80 這是指啟動的IP與PORT,如果避免衝到PORT,可以修改為 Listen 127.0.0.1:8080 或是其他的PORT。 (3) ServerName 127.0.0.1:80 這個跟上面一樣。 (4) DocumentRoot "${path}/data/localweb" 這是瀏覽器打開 localhost 之後,網頁的根目錄所在。
資料流圖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…
資料庫的好處有哪些? (1) 達成資料的一致性 (Data Consistency) 例如如果學號A0001的學生,姓名從「王曉明」改為「王大明」,則所有地方抓出學號A0001的學生,姓名都會是「王大明」。 (2) 達成資料的共享性 (Data Sharing) 指同一份資料可以共享給多個人員或是應用程式。 (3) 達成資料的獨立性 (Data Independence) 資料與應用程式是分開的,修改應用程式並不會影響資料。 (4) 達成資料的完整性 (Data Integrity) 例如當資料不能刪除時,不會因為操作錯誤而引起錯誤。也就是資料會因為其間的關聯,而維持應該有的關係。 (5) 達成資料的安全性 (Data Security) 例如資料可以加密,或是可以分為不同權限等。 (6) 降低資料的重複性 (Redundancy) 不需要相同資料一再出現,只需要關聯即可。 (7) 避免紙張的浪費 (Paper Waste) 可以數位式儲存,不需要列印出來。