# 資料庫系統 僑光科技大學 資訊科技系 2021/02/22 ~ 2021/06/26 授課老師:高吉隆 電子信箱:[kevinkao888@gmail.com](mailto://kevinkao888@gmail.com) --- ![](https://i.imgur.com/QV7GTb2.png =500x650) --- # 課程介紹 * 課程大綱 * 每週目標 * 成績計算 * 期末報告(忠班):[連結](https://hackmd.io/wsxoCaQCQE26zf-dhHnsag) * 期末報告(孝班):[連結](https://hackmd.io/Xnn9gFeHQKujLXdzSzQk_A) ---- ## 課程大綱 1. 資料庫的概念 2. 關聯式資料庫的介紹 3. 資料庫的設計與分析 4. 資料庫的查詢與實作 5. 資料庫的交易與管理 6. 資料庫實作與報告 ---- ## 每週目標 * 前 9 週上課目標 (上課講解、作業繳交、測驗) * 後 9 週上課目標 (分組討論、專題報告) ---- |週| 前 9 週上課目標 | 作業、小考 |:-:| --------------- |:--: | 1 | 第1章 資料庫導論 | 2 | 第2章 關聯式資料庫 | 3 | 第3章 實體關係圖 | | 4 | 第1次作業、小考 | 第1-2章 | 5 | 第4章 資料庫正規化 | | 6 | 第5章 關聯式資料運算 | | 7 | 06/19畢業典禮補課 | | 8 | 第1次作業、小考 | 第3-4章 | 9 | 期中考 | 第1-5章 ---- | 週 | 後 9 週上課目標 | 備註 | |:--:| --------------- |:--:| | 10 | 第6章 結構化查詢語言 | | 11 | 第7章 SQL的查詢語言 | 第5-6章作業 | 12 | 第8章 合併理論與實作 | | 13 | 第9章 T-SQL程式設計 | 第7-8章 | 14 | 第10章 觸發、預存程序 | 規劃報告 | 15 | 分組討論與分析 | | 16 | 分組討論與分析 | | 17 | 期末成果報告 | | 18 | 期末成果報告 | ---- ## 資料庫系統補課公告 * 開課班級:107孝班,每週一早上09:00~12:00 * 原18週06/29(一)課程,調整至畢業典禮06/21(日)上課 * 為了讓大家星期日好安排行程,因此調整至平日時間補課 * 預訂分別在以下時間補課,原課程3小時 * 05/13(三):班會時間13:10~15:00(2小時) * 05/20(三):班會時間13:10~14:00(1小時) * 上課教室:圖資9樓8907 ---- ## 資料庫系統加課公告 * 開課班級:107孝班,每週一早上09:00~12:00 * 技優領航計畫加課:技優入學同學請務必簽到 * 全部同學皆可來上課,期末報告問題可以詢問 * 預訂分別在以下時間加課, * 06/01(一):第8節16:10~17:00(1小時) * 06/08(一):第1節08:10~09:00(1小時) * 06/08(一):第8節16:10~17:00(1小時) * 上課教室:圖資9樓8906 ---- ## 資料庫系統加課公告 * 開課班級:107忠班,每週二早上09:00~12:00 * 技優領航計畫加課:技優入學同學請務必簽到 * 全部同學皆可來上課,期末報告問題可以詢問 * 預訂分別在以下時間加課, * 06/02(二):第1節08:10~09:00(1小時) * 06/02(二):第8節16:10~17:00(1小時) * 06/09(二):第1節08:10~09:00(1小時) * 上課教室:圖資9樓8907 --- ## 教學用書 * 書本名稱:動畫圖解資料庫系統理論-使用SQL Server實作 * 出版社:全華圖書 * 作者:李春雄 ![](https://www.opentech.com.tw/gif/cbook/06188037.JPG =250x350) ---- ## 評分標準 * 平時成績:60% * 上課互動:10% (出席狀況) * 作業繳交:20% (第4、6、9、11週) * 小考:30% (第4、6、11週) * 期中成績:10% * 期中考 (第9週) * 期末成績:30% * 規劃報告:5% (第15週) * 期末報告:25% (第18週) ---- #### 投影片網址 * 請同學登入zuvio平台,下載投影片 * 帳號:s10715XXX@ocu.edu.tw * 密碼:123(登入後請更改密碼) * 上傳版投影片使用原則 * 本上傳版簡報檔已經出版商授權 * 只授權教師上傳至有帳號及密碼的平台 * 只可讓本課程上課學生使用 * 不能公開上傳至其他平台 * 若有侵害原作者版權,請同學自行負責 --- ## 期末報告 * 以1-4人為1組:[分組名單](https://hackmd.io/3U3iL8CkQhC-w-wsDwB3JQ) * 完成以下內容: * 建立資料庫:列出所有資料表(至少3個) * 製作E-R關聯圖:標示出主鍵、外鍵等資訊 * 程式:以 Visual Studio 2019撰寫程式 * 用條件查詢、新增、修改、刪除等功能 * 資料庫:以單機/線上資料庫平台建置 * 報告方式:製作PPT簡報,錄製5分鐘報告影片 * 繳交方式:錄製擷取螢幕及錄音成影片上傳 * 資料參考:政府資料開放平台[連結](https://data.gov.tw/) * 評分方式:自評(20%)+互評(20%)+老師(60%) ---- ### 第一次小考成績統計(108忠) ||平均|最高|最低|未到考|不及格 |:-:|-:|-:|-:|-:|-:| |原始分數|48|73|21|0人|38人 |加20分後|66|92|40|30|12人 ![](https://i.imgur.com/IM9bPJX.png =800x400) ---- ### 第二次小考成績統計(108忠) ||平均|最高|最低|未到考|不及格 |:-:|-:|-:|-:|-:|-:| |原始分數|45|89|19|2人|37人 |加20分後|64|100|40|30|16人 ![](https://i.imgur.com/f62iJim.png =800x400) ---- ### 期中考成績統計(108忠) ||平均|最高|最低|未到考|不及格 |:-:|-:|-:|-:|-:|-:| |原始分數|48|87|29|1人|37人 |加20分後|67|100|49|40|13人 ![](https://i.imgur.com/275QtCd.png) ---- ### 第三次小考成績統計(108忠) ||平均|最高|最低|未到考|不及格 |:-:|-:|-:|-:|-:|-:| |原始分數|20|72|20|6人|34人 |加20分後|61|92|40|30|20人 ![](https://i.imgur.com/Fk9n396.png) --- ## 課程前之準備 * 安裝 Visual Studio 軟體(必備) * Visual Studio Community 2019:[下載](https://visualstudio.microsoft.com/zh-hant/vs/older-downloads/) * 如果同學希望把資料建立你自已的電腦請安裝 * 安裝 SQL Server 軟體 * SQL Server Express 2016:[下載](https://www.microsoft.com/zh-TW/download/details.aspx?id=56840) * SQL Server Management Studio 18:[下載](https://docs.microsoft.com/zh-tw/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15) ---- ### 安裝 Visual Studio Community 2019 #1 * 安裝前安裝設定 ![](https://i.imgur.com/K2nc5FC.png) ---- ### 安裝 Visual Studio Community 2019 #2 ![](https://i.imgur.com/S7BVKri.png) ---- ### 安裝 Visual Studio Community 2019 #3 * 選擇傳統型與行動裝置:.NET桌面開發,再按安裝 ![](https://i.imgur.com/OYV0zzy.png) ---- ### 安裝 Visual Studio Community 2019 #4 ![](https://i.imgur.com/oWVUyzy.png) ---- ### 安裝 Visual Studio Community 2019 #5 ![](https://i.imgur.com/TOqFrXH.png) ---- ### 安裝 Visual Studio Community 2019 #6 * 選擇暫不登入 ![](https://i.imgur.com/FlQgX2Z.png) ---- ### 安裝 Visual Studio Community 2019 #7 * 啟動 Visual Studio ![](https://i.imgur.com/XB7UFdP.png) ---- ### 安裝 Visual Studio Community 2019 #8 * 建立新的專案 ![](https://i.imgur.com/lf3JGwp.png) ---- ### 安裝 Visual Studio Community 2019 #9 * 選擇Windows Form應用程式(C#/Windows/桌面) ![](https://i.imgur.com/q1Xc8Iy.png) ---- ### 安裝 Visual Studio Community 2019 #10 * 選擇目標Framework .NET 5.0 ![](https://i.imgur.com/kHk3jl8.png) --- ### 安裝 SQL Server Express 2016 #1 * 選擇安裝類型:基本 ![](https://i.imgur.com/ujyNIqS.png =800x500) ---- ### 安裝 SQL Server Express 2016 #2 * 選擇:接受授權條款 ![](https://i.imgur.com/UW3UGtf.png =800x500) ---- ### 安裝 SQL Server Express 2016 #3 * 選擇:安裝 ![](https://i.imgur.com/5UbwvD4.png =800x500) ---- ### 安裝 SQL Server Express 2016 #4 * 下載安裝封裝 ![](https://i.imgur.com/meb5K47.png =800x500) ---- ### 安裝 SQL Server Express 2016 #5 * 正在安裝 ![](https://i.imgur.com/jNguolO.png =800x500) ---- ### 安裝 SQL Server Express 2016 #6 * 結束安裝 ![](https://i.imgur.com/hKe2qwB.png =800x500) ---- ### 安裝 SQL Server Management Studio 18 #1 * 選擇位置後按安裝 ![](https://i.imgur.com/zdfhEq1.png) ---- ### 安裝 SQL Server Management Studio 18 #2 * 安裝進度 ![](https://i.imgur.com/n1TS1CT.png) ---- ### 安裝 SQL Server Management Studio 18 #3 * 結束安裝 ![](https://i.imgur.com/MPM6FHh.png) --- ## 資料庫實務操作 * 開啟 SQL Server Management Studio * 伺服器名稱:db.ocu.tw,2433 * 驗證:SQL Server 驗證 * 登入:s+學號 * 密碼:s+學號@ocu.edu.tw * 連接:點選前可按記住密碼 ![](https://i.imgur.com/veCFDbi.png =350x250) ---- ### 範例資料庫 * 新增順序1:老師->課程 * 新增順序2:科系->學生->教務處->學務處 * 新增順序3:選課 ![](https://i.imgur.com/ep2Lb72.png) ---- ### 老師資料表 ```sql= CREATE TABLE 老師資料表( 老師編號 nvarchar(5), 老師姓名 nvarchar(8), 研究領域 nvarchar(100), PRIMARY KEY (老師編號) ) INSERT INTO 老師資料表 VALUES (N'T0001', N'張三', N'數位學習') , (N'T0002', N'李四', N'資料探勘') , (N'T0003', N'王五', N'知識管理') , (N'T0004', N'李安', N'軟體測試') ``` ---- ### 課程資料表 ```sql= CREATE TABLE 課程資料表( 課號 nvarchar(5), 課名 nvarchar(10), 學分數 int, 老師編號 nvarchar(5), PRIMARY KEY (課號), FOREIGN KEY (老師編號) REFERENCES 老師資料表 (老師編號) ) INSERT INTO 課程資料表 VALUES (N'C001', N'程式設計', 4, N'T0001') , (N'C002', N'資料庫', 4, N'T0001') , (N'C003', N'資料結構', 3, N'T0001') , (N'C004', N'系統分析', 4, N'T0002') , (N'C005', N'計算機概論', 3, N'T0002') , (N'C006', N'數位學習', 3, N'T0003') , (N'C007', N'知識管理', 3, N'T0004') ``` ---- ### 科系代碼表 ```sql= CREATE TABLE 科系代碼表( 系碼 nvarchar(4), 系名 nvarchar(10), 系主任 nvarchar(10), PRIMARY KEY (系碼) ) INSERT INTO 科系代碼表 VALUES (N'D001', N'資管系', N'林主任') , (N'D002', N'資工系', N'陳主任') , (N'D003', N'工管系', N'王主任') , (N'D004', N'企管系', N'李主任') , (N'D005', N'幼保系', N'黃主任') ``` ---- ### 學生資料表 ```sql= CREATE TABLE 學生資料表( 學號 nvarchar(5), 姓名 nvarchar(4), 系碼 nvarchar(4), PRIMARY KEY (學號), FOREIGN KEY (系碼) REFERENCES 科系代碼表 (系碼) ) INSERT INTO 學生資料表 VALUES (N'S0001', N'張三', N'D001') , (N'S0002', N'李四', N'D002') , (N'S0003', N'王五', N'D003') , (N'S0004', N'陳明', N'D001') , (N'S0005', N'李安', N'D004') ``` ---- ### 教務處資料表 ```sql= CREATE TABLE 教務處資料表( 序號 int, 學號 nvarchar(5), 學業成績 int, PRIMARY KEY (序號), FOREIGN KEY (學號) REFERENCES 學生資料表 (學號) ) INSERT INTO 教務處資料表 VALUES (1, N'S0001', 60) , (2, N'S0002', 70) , (3, N'S0003', 80) , (4, N'S0004', 90) ``` ---- ### 學務處資料表 ```sql= CREATE TABLE 學務處資料表( 序號 int, 學號 nvarchar(5), 操性成績 int, PRIMARY KEY (序號), FOREIGN KEY (學號) REFERENCES 學生資料表 (學號) ) INSERT INTO 學務處資料表 VALUES (1, N'S0001', 80) , (2, N'S0002', 93) , (3, N'S0003', 75) , (4, N'S0004', 60) ``` ---- ### 選課資料表 ```sql= CREATE TABLE 選課資料表( 學號 nvarchar(5), 課號 nvarchar(5), 成績 int, PRIMARY KEY (學號, 課號), FOREIGN KEY (學號) REFERENCES 學生資料表 (學號), FOREIGN KEY (課號) REFERENCES 課程資料表 (課號) ) INSERT INTO [選課資料表] VALUES (N'S0001', N'C001', 56) , (N'S0001', N'C005', 73) , (N'S0002', N'C002', 92) , (N'S0002', N'C005', 63) , (N'S0003', N'C004', 92) , (N'S0003', N'C005', 70) , (N'S0004', N'C003', 75) , (N'S0004', N'C004', 88) , (N'S0004', N'C005', 68) , (N'S0005', N'C005', NULL) ``` --- ### DROP TABLE * 因為有關聯,刪除資料表也有分順序 ```sql= DROP TABLE 選課資料表 DROP TABLE 學務處資料表 DROP TABLE 教務處資料表 DROP TABLE 學生資料表 DROP TABLE 科系代碼表 DROP TABLE 課程資料表 DROP TABLE 老師資料表 ``` ---- ### CROSS JOIN * 同時讀取老師和課程資料表 ```sql= SELECT * FROM 老師資料表, 課程資料表 WHERE 老師資料表.老師編號=課程資料表.老師編號 ``` * 可以用別名來代替資料表名稱 ```sql= SELECT * FROM 老師資料表 AS A, 課程資料表 AS B WHERE A.老師編號=B.老師編號 ``` * 也可以只列出部分欄位 ```sql= SELECT A.老師編號, 老師姓名, 課號, 課名 FROM 老師資料表 AS A, 課程資料表 AS B WHERE A.老師編號=B.老師編號 ``` ---- ### CROSS JOIN WITH GROUP BY * 同時讀取學生和選課資料表並做統計 ```sql= SELECT A.學號, 姓名, AVG(成績) AS 平均成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A.學號=B.學號 And B.成績>=70 GROUP BY A.學號, 姓名 HAVING AVG(成績)>=90 ORDER BY AVG(成績) ASC; ``` ---- ### INNER/LEFT/RIGHT/FULL JOIN ```sql= SELECT * FROM 老師資料表 AS A INNER JOIN 課程資料表 AS B ON A.老師編號=B.老師編號; SELECT * FROM 老師資料表 AS A LEFT JOIN 課程資料表 AS B ON A.老師編號=B.老師編號; SELECT * FROM 老師資料表 AS A RIGHT JOIN 課程資料表 AS B ON A.老師編號=B.老師編號; SELECT * FROM 老師資料表 AS A FULL JOIN 課程資料表 AS B ON A.老師編號=B.老師編號; ``` --- ### 使用 Visual Studio 連接資料庫 * 開啟 Visual Studio 2017 * 開啟新專案 * 選擇C#->傳統桌面->Windows Form應用程式 ![](https://i.imgur.com/omvz6Le.png =600x400) ---- ### 使用工具箱建立按鈕(執行新增指令) * 開啟檢視->工具箱視窗 * 在Form1中建立button1,標題:執行SQL ![](https://i.imgur.com/qZnfLxg.png) ---- ### 在按鈕中建立程式 * 在按鈕中點擊兩下開啟程式視窗 * 在程式視窗中加入 ```csharp= using System.Data.SqlClient; // 2019 請使用 Microsoft.Data.SqlClient ``` * 在 button1_Click 輸入以下程式 ```csharp= string str = "Server=db.ocu.tw,2433;"; str += "User ID=s10815XXX;"; // 請同學自行改成自已的學號 str += "Password=s10815XXX@ocu.edu.tw;"; str += "Initial Catalog=db10815XXX;"; using (SqlConnection con = new SqlConnection(str)) { con.Open(); // 請確定資料表中沒有 T0006 這筆 string sql = "insert into 老師資料表 values ('T0006', '宋七', '人工智慧')"; using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.ExecuteNonQuery(); } } MessageBox.Show("OK"); ``` ---- ### 使用工具箱建立按鈕及文字 * 在Form1中建立label1(老師編號)、textBox1 * 在Form1中建立label2(老師姓名)、textBox2 * 在Form1中建立label3(研究領域)、textBox3 * 在Form1中建立button2,標題:新增1筆 ![](https://i.imgur.com/Zp0XRpD.png) ---- ### 在桌面中建立程式 * 在桌面中點擊兩下開啟程式視窗 * 在類別中輸入通用變數之宣告 ```csharp= public string Connection = ""; ``` * 在 Form1_Load 中輸入以下程式 ```csharp= Connection = "Server=db.ocu.tw,2433;"; Connection += "User ID=s10715101;"; Connection += "Password=s10715101@ocu.edu.tw;"; Connection += "Initial Catalog=db10715101;"; ``` ---- ### 在按鈕中建立程式 * 在 button2_Click 輸入以下程式 ```csharp= using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); string sql = "insert into 老師資料表 values ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "')"; using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.ExecuteNonQuery(); } } MessageBox.Show("OK"); ``` ---- ### 使用工具箱建立按鈕-刪除 * 在Form1中建立button3,標題:刪除1筆 ![](https://i.imgur.com/vFYZgBe.png) ---- ### 在按鈕中建立程式 * 在 button3_Click 輸入以下程式 ```csharp= using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); string sql = "delete from 老師資料表 where 老師編號 = '" + textBox1.Text + "'"; using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.ExecuteNonQuery(); } } MessageBox.Show("OK"); ``` ---- ### 使用工具箱建立按鈕-修改 * 在Form1中建立button4,標題:修改1筆 ![](https://i.imgur.com/9wf7IB7.png) ---- ### 在按鈕中建立程式 * 在 button4_Click 輸入以下程式 ```csharp= using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); string sql = "update 老師資料表 set 老師姓名 = '" + textBox2.Text + "', 研究領域 = '" + textBox3.Text + "' where 老師編號 = '" + textBox1.Text + "'"; using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.ExecuteNonQuery(); } } MessageBox.Show("OK"); ``` ---- ### 使用工具箱建立按鈕-查詢1欄 * 在Form1中建立button5,標題:依編號查姓名 ![](https://i.imgur.com/therJOE.png) ---- ### 在按鈕中建立程式 * 在 button5_Click 輸入以下程式 ```csharp= using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); string sql = "select 老師姓名 from 老師資料表 where 老師編號 = '" + textBox1.Text + "'"; using (SqlCommand cmd = new SqlCommand(sql, con)) { textBox2.Text = cmd.ExecuteScalar().ToString(); } } MessageBox.Show("OK"); ``` ---- ### 使用工具箱建立按鈕-查詢多欄 * 在Form1中建立button6,標題:依編號查多欄 ![](https://i.imgur.com/n28nTK5.png) ---- ### 在按鈕中建立程式 * 在 button6_Click 輸入以下程式 ```csharp= using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); string sql = "select 老師姓名, 研究領域 from 老師資料表 where 老師編號 = '" + textBox1.Text + "'"; using (SqlCommand cmd = new SqlCommand(sql, con)) { using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { textBox2.Text = reader.GetString(0); textBox3.Text = reader.GetString(1); } } } } MessageBox.Show("OK"); ``` ---- ### 使用工具箱建立按鈕-查詢多筆多欄 * 在Form1中建立button7,標題:依編號查多筆多欄 * 在Form1中建立dataGridView1 ![](https://i.imgur.com/pTFfwz1.png) ---- ### 在按鈕中建立程式 * 在 button7_Click 輸入以下程式 ```csharp= using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); string sql = "select * from 老師資料表 where 老師編號 like '" + textBox1.Text + "'"; using (SqlCommand cmd = new SqlCommand(sql, con)) { using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataTable table = new DataTable(); adapter.Fill(table); dataGridView1.DataSource = table; } } } MessageBox.Show("OK"); ``` ---- ## 資料庫的基礎 * 資料與資料處理 * 資料庫 * 資料庫管理系統 * 資料庫系統發展的歷史演進 * 資料庫技術的發展趨勢 ---- ### 資料與資料處理 * 資料(Data) * 定義:指收集但沒有經過整理和分析的原始數值、文字或符號,屬於資訊的原始型態。 * 範例:學校整班學生必修課程的一疊成績資料 * 資訊(Information) * 定義:經過處理的資料,資料在經過整理和分析後,可以成為有用或可供決策的資訊。 * 資料處理(Process) ![](https://vignette.wikia.nocookie.net/computing2k16/images/0/05/Data_Processing_Chart.jpg/revision/latest?cb=20160202223403 =40%x40%) ---- ### 資料儲存的階層 * 總共分為六個階層:位元(bit)、位元組(Byte)、欄位(Field)、記錄(Record)、檔案(File)和資料庫(Database) ![](http://images.slideplayer.dk/16/5118742/slides/slide_7.jpg =70%x70%) ---- ### 資料庫的組成與定義 * 資料庫(Database) * 資料庫管理系統(Database Management System,DBMS) * 定義:是一個儲存資料的電子文件檔案櫃 ![](http://slideplayer.com/5383533/17/images/36/Organizational+Database+Systems.jpg =700x400) ---- ### 資料的模型建置 * 資料塑模:將真實東西轉換成模型,這是一種分析客戶需求的技術。 ![](http://4.bp.blogspot.com/-rDUIxT2zMes/VUGJTIDpAJI/AAAAAAAAPqg/Qhla9F1pdvQ/s1600/data-model2.png =500x400) ---- #### 資料塑模的元素 * 實體:在真實世界識別出的東西 * 如:學生、老師、員工、課程 * 屬性:每一個實體擁有一些特性 * 如:學生的學號、姓名、電話、地址 * 關聯性:在二個或多個實體之間擁有的關係 * 如:一對一(老師-員工) * 如:一對多(老師-學生) * 如:多對多(學生-課程) ---- #### 資料塑模的羅輯關聯性 ![](http://slidesplayer.com/11539852/62/images/13/1-1-2+%E8%B3%87%E6%96%99%E5%A1%91%E6%A8%A1-%E9%82%8F%E8%BC%AF%E9%97%9C%E8%81%AF%E8%B3%87%E6%96%99%28%E9%97%9C%E8%81%AF%E6%80%A72%29.jpg) ---- #### 檔案處理方式的問題 * 結構與資料相依 * 資料分隔與孤立 * 資料沒有集中管理。 * 檔案格式不相容。 * 更新系統困難。 * 資料重複與不一致 * 多使用者問題 * 安全問題 * 資料完整性問題 ---- #### 使用資料庫的目的 * 多人使用,資料共享。 * 資料一致和最少的資料重複。 * 資料獨立(相反的是資料相依)。 * 改進資料完整性問題。 * 更佳的資料安全管理。 * 同步與交易管理。 * 資料備份與回復。 ---- #### 資料庫系統的發展流程 * 資料庫系統的演進 * 網路與階層式資料庫 * 關聯式資料庫模型 * SQL結構化查詢語言 * 物件導向式資料模型與主從架構 --- ### 資料庫系統 * 四大組成元件 * 資料庫系統架構 * 資料庫綱要間的對映 * 邏輯資料庫獨立 * 實體資料庫獨立 ---- #### 四大組成元件 * 使用者(User)、資料(Data) * 軟體(Software)、硬體(Hardware) ![](http://player.slidesplayer.com/62/11475834/slides/slide_3.jpg =800x600) ---- #### 資料庫綱要(Schema) * 外部綱要(External) * 概念綱要、邏輯綱要(Conceptual/Logical) * 內部綱要(Internal) ![](http://player.slidesplayer.com/61/11307854/slides/slide_26.jpg) ---- #### 資料庫系統架構說明 * 外部綱要(External) * 使用者觀點(View) * 依不同使用者篩選條件 * 過濾部分欄位和資料代碼轉換 * 概念綱要(Conceptual) * 管理師觀點(Design) * 最完整的邏輯性設計、規劃描述 * 包括資料所有欄位和及關聯性 * 內部層(Internal) * 實際儲存(Data) * 定義資料各欄位型別、長度 * 定義那些欄位需要建立索引 ---- #### 資料庫綱要間的對映 ![](http://player.slidesplayer.com/61/11307854/slides/slide_31.jpg) ---- #### 邏輯資料獨立 * 外部層<->概念層 ![](http://player.slidesplayer.com/61/11307854/slides/slide_35.jpg =600x400) ---- #### 實體資料獨立 * 概念層<->實體層 ![](http://player.slidesplayer.com/61/11307854/slides/slide_36.jpg =600x400) --- ### 資料庫設計 * 三層資料模型 ---- * 概念資料模型(Conceptual) * 邏輯資料模型(Logical) * 內部資料模型(Internal) ![](https://image-private.slidesharecdn.com/database03-180315035915/95/slide-4-638.jpg?hdnea=acl=/database03-180315035915/95/slide-4-638.jpg*~exp=1521086816~hmac=b49e5b55005ffe40b7c330fe149843092225e0231c477aaea568c5fb6555ee46&cb=1521086469 =800x600) --- #### 概念資料模型 * ERM:實體關聯模型(E-R Model) * 實體(Entity):真實世界的物件 * 屬性(Attribute):物件的特性 * 關聯(Relationship):兩實體間的關係 ![](http://slidesplayer.com/11725544/65/images/8/3-1-1+%E6%A6%82%E5%BF%B5%E8%B3%87%E6%96%99%E6%A8%A1%E5%9E%8B-%E5%9C%96%E4%BE%8B+%E8%B3%87%E6%96%99%E5%BA%AB%28DB%29+ch03.jpg =700x400) ---- #### 邏輯資料模型 * 關聯式資料模型:Relational Data Modal * 資料結構:欄位名稱定義(中文) * 資料操作或運算:資料檢查、動作 * 完整性限制條件:資料內容檢查 ![](https://image-private.slidesharecdn.com/database03-180315061132/95/slide-11-638.jpg?hdnea=acl=/database03-180315061132/95/slide-11-638.jpg*~exp=1521094660~hmac=7f3f9dda8c967cf6528da05d8bd2eea04eab524945bddcb8579e7dcf7bbb15ec&cb=1521094357 =700x400) ---- #### 實體資料模型 * 資料庫管理系統建立 * 欄位定義:型別、長度(英文) * 關聯設定:建立關聯表(Relation) * 索引設定:建立索引表(Index) ![](http://www.ocu.tw/class/database/slide-13-638.jpg =700x400) --- ### 資料庫設計軟體 * Microsoft資料庫管理系統:SQL Server * 版本:SQL Server R2 Express With Tools * 網址:[下載](http://120.109.105.10:8080/download/SQLEXPRWT_x64_CHT.exe) * MySQL資料庫 * 網址:[下載](http://120.109.105.10:8080/download/xampp-win32-5.6.32-0-VC11-installer.exe) * 資料庫規劃:Navicat Data Modeler * 網址:[下載](http://120.109.105.10:8080/download/modeler021_ct_x64.exe) * 資料庫管理:Navicat for SQL Server * 網址:[下載](http://120.109.105.10:8080/download/navicat120_sqlserver_ct_x64.exe) --- ### 第一次作業題目 * 請以書面式繳交,打字或書寫皆可 * 請註明學號、姓名 * 請參考指定教科書的題目 * 繳交期限:2018/04/12 ---- 1. 第一章問答題第1, 2題 * 請說明何謂資料(Data)?何謂資訊(Information)? * 請說明何謂資料階層(Data Hierarchy)和各階層資料之間的關係? ---- 2. 第二章問答題第1, 6, 9題 * 請說明何謂資料庫系統(Database System)?資料庫環境的組成元件? * 請說明資料庫綱要分成幾種?和ANSI/SPARC資料庫系統架構有何關係? * 請說明資料庫系統的優缺點,至少各4項? ---- 3. 第三章名詞解釋第9題,問答題第1, 7題 * 名詞解釋主鍵(Primary Key)、超鍵(Superkeys)、候選鍵(Candidate Keys)、替代鍵(Alternate Keys)和外來鍵(Foreign Keys) * 請說明ANSI/SPARC資料庫系統架構對應的三層資料模型是什麼?這和資料庫設計有什麼關係? * 請說明什麼是空值(Null Values)?空值的意義為何? ---- 4. 第四章問答題第1, 2題 * 請簡單的說明資料庫系統開發生命周期的五個階段?完整資料庫設計可以分成哪兩部分? * 請使用圖例說明本書使用的資料庫設計方法論(Database Design Methodology)?邏輯資料庫設計的主要工作有哪兩項? ---- #### SQL結構化指令 * 請參考W3Schools:[連結](https://www.w3schools.com/sql/) * 建立資料庫:Create Database * 建立資料表:Create Table * 建立索引:Create Index * 修改資料表:Alter Table ---- #### 連結資料庫 * 執行Navicat for SQL Server * 新增連線:輸入以下帳號資訊:密碼為ocu ![](https://i.imgur.com/FZFw825.png =400x500) ---- #### 建立資料庫:Create Database * 新增查詢:在空白區輸入以下指令 * 語法: ```sql Create Database _databasename_; ``` * 練習:_databasename_請輸入自已的學號 ---- #### 建立資料表:Create Table * 語法: ```sql CREATE TABLE _table_name _( _    column1 datatype_, _    column2 datatype_, _    column3 datatype_,    .... ); ``` ---- #### 建立紀錄:Insert Into * 語法一: ```sql INSERT INTO _table_name_ VALUES (_value1_,_ value2_,_ value3_, ...); ``` * 語法二: ```sql INSERT INTO _table_name_ (_column1_,_ column2_,_ column3_, ...) VALUES (_value1_,_ value2_,_ value3_, ...); ``` ---- #### 查詢紀錄:Select From * 語法一: ```sql SELECT * FROM _table_name_; ``` * 語法二: ```sql SELECT _column1_,_ column2, ..._ FROM _table_name_; ``` --- ## Zuvio即時反饋系統 * 網址:[https://irs.zuvio.com.tw/](https://irs.zuvio.com.tw/) * 登入:已註冊過,可以直接登入 * 帳號:s105XXXXXX@ocu.edu.tw * 密碼:123 * 更改密碼:為保護課程權益請一定要修改 * 設定->帳號設定->變更密碼 * 請選擇課程:資料庫系統 --- ## 期末報告說明(105級) * 採分組報告:2-4人為一組,請選1人為組長 * 擬定系統名稱:以小型專案資料庫系統為優先 * 資料庫系統:ACCESS/MS SQL/MYSQL等 * 資料庫規模:5個資料表以上,每個資料表10筆 * 資料庫分析:ER關聯圖、資料表結構等文件 * 資料庫參考:可由政府資料開放平台擷取 * 系統規劃:PHP/ASP/C#/EXCEL VBA/ACCESS * 系統功能:至少1個表單,需繪製功能組織圖 * 系統設計:包括畫面設計、程式設計、功能測試 * 書面報告:以DOC及PPT繳交,PPT需以摘要列印 * 上台報告:每組報告5-10分鐘,依組數而定 ---- {%pdf https://www.ocu.tw/class/database/1062.pdf %} ---- ## 使用 Excel VBA * 下載Navicat for SQL Server:[下載](http://www.ocu.tw/class/database/navicat120_sqlserver_ct_x64.exe) * 連線名稱:ocu * 主機:ocu.database.windows.net * 初始資料庫:ocu * 使用者名稱:ocuguest * 密碼:Ocu27016855 * 下載範例檔:[下載](http://www.ocu.tw/class/database/ReadSQLDatabase.xls) ---- ### SQL 指令實例練習(Where) * 請捉取客戶資料表以下資料:Customer * 列出前1000筆姓氏為王的客戶 * 列出郵遞區號為404的客戶 * 列出地址為彰化市的客戶 * 列出姓名中有惠的客戶 * 列出手機號碼為0922的客戶 * 列出生日為8月的客戶 * 列出住在文心路上的客戶 * 列出郵遞區號為404和406的客戶 ---- ### SQL 指令實例參考(Where) * SQL 指令是唯一解,以下僅供參考 ```sql= select * from Customer where CName like '王%' select * from Customer where Zone like '404%' select * from Customer where ADDR like '彰化市%' select * from Customer where CName like '%惠%' select * from Customer where Mobile like '0922%' select * from Customer where BDate like '____08__' select * from Customer where ADDR like '%文心路%' select * from Customer where Zone like '404%' or Zone like '406%' select * from Customer where substring(Zone, 1, 3) in ('404','406') ``` ---- ### SQL 指令實例練習(Group) * 請捉取客戶資料表以下資料:Customer * 請列出各郵遞區號客戶的人數 * 請列出各姓氏的人數統計,且人數多的在前面 * 請列出各月份生日的人數統計,依月份順序列出 ---- ### SQL 指令實例參考(Group) ```sql= select substring(Zone, 1, 3), count(*) from Customer where Zone <> '' group by substring(Zone, 1, 3) order by count(*) desc select substring(CName, 1, 1), count(*) from Customer where CName <> '' group by substring(CName, 1, 1) order by count(*) desc select substring(BDate, 5, 2), count(*) from Customer where BDate <> '' group by substring(BDate, 5, 2) order by substring(BDate, 5, 2) ``` --- ### Excel VBA 專案實作 * Excel VBA範例檔:[下載](http://www.drmaster.com.tw/download/example/MI11601_Example.rar) * 專題演練範例檔:[下載](http://www.ocu.tw/class/database/ReadSQLDatabase.xls) * 功能實作: * 客戶資料:請實作廠商資料 * 客戶查詢:請實作廠商查詢 * 客戶刪除:請實作廠商刪除 * 客戶新增:請實作廠商新增 ---- ### Excel VBA 專案表單實作 * 專題演練範例檔:[下載](http://www.ocu.tw/class/database/ExcelVBAForm.xls) * 功能實作: * 系統首頁:請實作廠商資料管理 * 客戶資料管理:請實作廠商資料管理 --- ## 期末專題製作資料處理 * 資料擷取:政府資料開放平台[連結](https://data.gov.tw/) * 下載CSV檔:臺北世界美食餐廳名單[下載](https://beta.data.taipei/api/getDatasetInfo/downloadResource?id=d26b2e0e-ca5e-4989-8bb8-f028d043c42f&rid=c81d95d5-3249-4e5c-a5a4-8b87d8abd3e7) * 去除不必要資料:表頭、表尾、空白資料等 * 另存成Excel檔:檔案類型xls或xlsx檔 * 開啟Access空白資料庫檔: * 外部資料->新增資料來源->從檔案->Excel檔 * 選擇資料來源:選擇上面的Excel檔 * 選擇目的地:選擇資料庫的新資料表 * 選擇打勾:第一列是欄名 * 設定主索引欄位:若無則新增一欄識別欄 ---- ### Access資料庫 * 範例檔下載:[連結](http://www.ocu.tw/class/database/Pos.mdb) * Excel檔更正:[連結](http://www.ocu.tw/class/database/ExcelVBAAccess.xls) * 資料表:建立、修改欄位、資料匯入、資料刪除 * 設計模式:設定資料表欄位(Schema) * 檢視模式:瀏覽資料表紀錄(Select * from) * 查詢:建立、SELECT、INSERT、DELETE、UPDATE * SQL模式:以指令式寫出SQL指令 * 設計模式:以圖形界面設計SQL指令 * 表單:建立表單、表單精靈 * 報表:建立報表、報表精靈 ---- ### Access資料庫+Excel VBA案例說明 * 資料庫下載:ExcelVBAProject.accdb[連結](http://www.ocu.tw/class/database/ExcelVBAProject.accdb) * Excel檔下載:ExcelVBAProject.xlsm[連結](http://www.ocu.tw/class/database/ExcelVBAProject.xlsm) * 餐廳查詢:增加餐廳類別查詢 * 餐廳新增:增加流水號計算功能 * 餐廳刪除:依編號刪除
{"metaMigratedAt":"2023-06-14T15:47:34.570Z","metaMigratedFrom":"Content","title":"資料庫系統","breaks":true,"contributors":"[{\"id\":\"9eed60a5-6546-4dfd-8445-07f81bcfde52\",\"add\":21716,\"del\":9913}]"}
    6932 views