【數據建模與程序設計】實驗報告合集

若本文對你有幫助,請點贊、關注我呦!

我用的是Eclipse + Visio2010 +MySQL Workbench,你也可以用EA(Enterprise Architect)、VP(Visual Paradigm)或在線畫圖工具代替Visio。Visio畫折線的“智能”真的很讓人絕望,新版取消了很多功能。

每個人選一個題目構建數據庫的概念模型、邏輯模型和物理模型:

我選的是10,下方有所有題目的實驗資料和10的詳細報告
1、客戶訂購登記(customer order entry) 9、學生住宿(student accommodation)
2、庫存控制(inventory control) 10、客戶運送(client transportation)
3、資產管理(asset management) 11、出版商印刷(publisher printing)
4、項目管理(project management) 12、國家圖書館(country library)
5、課程管理(course management) 13、房地產租賃(real estate rentals)
6、人力資源管理(human resource management) 14、旅行代理(travel agent)
7、工資管理(payroll management) 15、學生管理(student results)
8、車輛租賃(vehicle management)  

有些同學一看到實驗、課設就打退堂鼓,其實花些時間認真研究老師給的實驗模板後都能懂。

實驗一  熟悉使用數據建模工具

一、實驗目的

  1. 掌握數據建模工具EA的使用;
  2. 掌握數據建模工具Visio的使用;
  3. 掌握數據建模工具VP的使用。

二、實驗內容

1. 實驗要求(以下三種工具任選一個)

     1)安裝數據建模工具EA,根據EA使用文檔熟悉Visio工具軟件。練習建立簡單的數據模型。

     2)安裝數據建模工具Visio,根據Visio使用文檔熟悉Visio工具軟件。練習建立簡單的數據模型。

     3)安裝數據建模工具VP,根據VP使用文檔熟悉VP工具軟件。練習建立簡單的數據模型。

2. 以Visio爲實驗示例

實驗二 利用數據建模工具創建概念模型和邏輯模型

一、實驗目的

  1. 根據實際案例構建數據庫的概念模型;
  2. 根據概念模型構建邏輯模型。

二、實驗內容

  1. 建立概念模型(實體屬性圖,二元關係的ER圖)。
  2. 將局部ER圖合併爲一張整體ER模型。
  3. 在ER模型中填加多樣性約束。
  4. 建立顯示主鍵的ER模型。
  5. 標識實體的屬性,確認主鍵、外鍵、備用鍵

三、實驗實現

     1. 部分ER模型

     2. 整體ER模型

 

     3. 在ER圖中填加多樣性約束

     4. 在ER圖中標識主鍵

     5. 標識實體屬性,確認主鍵、外鍵、備用鍵

 實驗三  利用數據建模工具創建物理模型

一、實驗目的

  1. 掌握某一個數據庫操作系統的使用;
  2. 根據邏輯模型創建物理模型。

二、實驗內容

      當我們完成邏輯設計時,它包含的實體和屬性都是用完整的描述性文字作爲名字。因此,第一個任務就是:

      1)要縮短實體和屬性的這些名字,使之變得簡單,並保證在實現物理模型時不會造成任何表名或列名的長度問題。

      2)對於命名規則,特別是對於縮寫風格,一致性最爲重要。儘可能使用簡單的名字,不要使用關鍵字或者保留字。

      3)分隔單詞可使用下劃線(_)或者詞首字母大寫的形式。

三、實驗實現

實驗四  根據物理模型在Mysql上創建數據庫

一、實驗目的

  1. 掌握數據庫系統的使用;
  2. 根據物理模型,熟練掌握在數據庫系統上創建數據庫。

二、實驗內容

     應用所學內容,創建Mysql數據庫。要求:

  1. 熟練安裝及使用Mysql;
  2. 在Mysql管理系統上根據物理模型,創建系統數據庫;
  3. 導出創建的數據庫的腳本;
  4. 根據建好的數據庫,應用自己熟悉的程序設計語言(如Java、C++、C#等)編寫連接數據庫語句,實現對每個表格的增刪改查,並實現表關聯關係。

三、實驗實現

     1. 根據物理模型,創建的系統數據庫爲:

需掌握的知識:     

①定義外碼操作

       外碼定義爲 restrict 關鍵字時,如果從class表中刪除一條數據(即刪除一個班級),student表中恰好有該班級的學生,則會報錯,不允許刪除。

        外碼定義爲 cascade 關鍵字時,表示級聯刪除,刪除class表中的一條數據時,會把student表中對應的數據一起刪除掉。

        外碼定義爲 set null 關鍵字時,表示刪除class表中的一條數據時,若student表中有對應的數據,則把這些對應的數據的cno設置爲空值NULL。

②數據類型

        Binary[(n)] 是 n 位固定的二進制數據。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4 個字節。
        Varbinary[(n)] 是 n 位可變長度的二進制數據。其中,n 的取值範圍是從 1 到 8000。其存儲窨的大小是 n + 4個字節,不是n 個字節。
        在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。

        日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個數據類型是日期在前,時間在後;後一個數據類型是時間在前,日期在後。在 Microsoft SQL Server中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期範圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲字節)。使用 Smalldatetime 數據類型時,所存儲的日期範圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節)。
        日期的格式可以設定。設置日期格式的命令如下:
        Set DateFormat {format | @format _var}
        其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認情況下,日期格式爲MDY。
        例如,當執行 Set DateFormat YMD 之後,日期的格式爲年 月 日 形式;當執行 Set DateFormat DMY 之後,日期的格式爲日 月 年 形式。

        Timestamp 用於表示SQL Server 活動的先後順序,以二進投影的格式表示。Timestamp 數據與插入數據或者日期和時間沒有關係。
        Uniqueidentifier 由 16 字節的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。

 

        數字數據只包含數字,數字數據類型包括正數和負數、小數(浮點數)和整數。
        整數由正整數和負整數組成,例如 39、25、0、-2 和 33967。在 Micrsoft SQL Server 中,整數存儲的數據類型是 Int,Smallint 和 Tinyint。Int 數據類型存儲數據的範圍大於 Smallint 數據類型存儲數據的範圍,而 Smallint 據類型存儲數據的範圍大於Tinyint 數據類型存儲數據的範圍。使用 Int 數據類型存儲數據的範圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個字節存儲空間)。使用 Smallint 數據類型時,存儲數據的範圍從 -32 768 到 32 767(每一個值要求2個字節存儲空間)。使用Tinyint 數據類型時,存儲數據的範圍是從0 到255(每一個值要求1個字節存儲空間)。
        精確到小數點的數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這種數據所佔的存儲空間根據該數據的小數點後的位數來確定。
        在SQL Server 中,近似小數的數據類型是 Float (雙精度) 和 Real (單精度) 。例如,三分之一這個分數記作 0.3333333,當使用近似數據類型時能準確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。

        字符數據是由任何字母、符號和數字任意組合而成的數據。    

        Varchar 是變長字符數據,其長度不超過 8KB。

        Char 是定長字符數據,其長度最多爲 8KB。超過 8KB 的ASCII 數據可以使用Text數據類型存儲。例如,因爲 Html 文檔全部都是 ASCII 字符,並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。

        在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型允許使用由特定字符集定義的字符。在 SQL Server安裝過程中,允許選擇一種字符集。使用 Unicode 數據類型,列中可以存儲任何由Unicode 標準定義的字符。在 Unicode 標準中,包括了以各種字符集定義的全部字符。使用Unicode數據類型,所佔用的是使用非 Unicode 數據類型所佔用的大小的兩倍。
        在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該使用 Nchar 字符類型,同樣,這時最多可以存儲4000 個字符。當使用 Ntext 數據類型時,該列可以存儲多於 4000 個字符。

 

        Bit 由 1 或者 0 組成。當表示真或假、ON 或 OFF 時,使用 Bit 數據類型。例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。

注意:

        在本實驗中,我的外碼全設爲Cascade On Delete和Cascade On Update方便管理。主鍵 no(代號)全設爲INT(8),你也可以設爲VARCHAR類型的。

     2. 導出創建的數據庫的腳本爲:

     若MySql導出時報錯:

WARNING
 
mysqldump.exe is version 5.5.16, but the MySQL Server to be dumped has version 5.6.13.
 
Because the version of mysqldump is older than the server, some features may not be backed up properly.
 
It is recommended you upgrade your local MySQL client programs, including mysqldump to a version equal to or newer than that of the target server.
 
The path to the dump tool must then be set in Preferences -> Administrator -> Path to mysqldump Tool:
 
11:22:10 Dumping db-bug (all tables)
 
Running: mysqldump.exe --defaults-extra-file="c:\users\admini~1\appdata\local\temp\tmpilpxbj.cnf"  --user=root --max_allowed_packet=1G --host=localhost --port=3306 --default-character-set=utf8 --single-transaction=TRUE "db-bug"
 
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)

      解決方法:

      設置Edit ->Preferences -> Administrator -> Path to mysqldump Tool爲自己安裝的mysql路徑D:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe

      3. 連接數據庫的語句爲:

import java.sql.Connection;
import java.sql.DriverManager;

public class Test {
	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?characterEncoding=UTF8&useSSL=false", "root", "jk198205");
		System.out.println("連接成功");
		conn.close();
	}
}

      4. 表格增刪改查的實現:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

public class Test {
	public static void main(String[] args) throws Exception {
		Connection conn = null;
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection("jdbc:mysql://localhost/test?characterEncoding=UTF8&useSSL=false", "root","");
		System.out.println("連接成功");
		insertData(conn);
		fetchData(conn);
		upData(conn);
		fetchData(conn);
		deleteData(conn);
		fetchData(conn);
		conn.close();
	}

	public static void fetchData(Connection conn) {// 讀取數據
		try {
			Statement stm = (Statement) conn.createStatement();
			String sql = "select * from office";
			ResultSet re = stm.executeQuery(sql);
			while (re.next()) {
				int no = re.getInt("no");
				String address = re.getString("address");
				String tel = re.getString("tel");
				String fax = re.getString("fax");
				System.out.print("no: " + no);
				System.out.print(", address: " + address);
				System.out.print(", tel: " + tel);
				System.out.print(", fax: " + fax);
				System.out.print("\n");
			}
			re.close();
		} catch (SQLException se) {
			se.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("成功讀取數據!" + "\n");
		}
	}
	
	public static void insertData(Connection conn) {// 插入數據
		try {
			String sql = "insert into office (no,address,tel,fax) values(?,?,?,?)";
			PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
			pst.setInt(1, 20170418);
			pst.setString(2, "北京市朝陽區233弄");
			pst.setString(3, "12344455523");
			pst.setString(4, "33333333333");
			pst.executeUpdate();
			pst.close();
		} catch (SQLException se) {
			se.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("成功插入數據!" + "\n");
		}
	}

	public static void upData(Connection conn) {// 修改數據
		try {
			String sql = "update office set fax = ? where no = ?";
			PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
			pst.setString(1, "55555555555");
			pst.setInt(2, 20170418);
			pst.executeUpdate();
			pst.close();
		} catch (SQLException se) {
			se.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("成功修改數據!" + "\n");
		}
	}

	public static void deleteData(Connection conn) {// 刪除數據
		try {
			String sql = "delete from office where no = ?";
			PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
			pst.setInt(1, 20170418);
			pst.executeUpdate();
			pst.close();
		} catch (SQLException se) {
			se.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("成功刪除數據!" + "\n");
		}
	}
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章