数据建模与程序设计实验报告【全集】- 客户运送

若本文对你有帮助,请点赞、关注我呦!

我用的是Eclipse + Visio2010 +MySQL Workbench,你也可以用EA(Enterprise Architect)、VP(Visual Paradigm)或在线画图工具代替Visio。Visio画折线的“智能”真的很让人绝望,新版取消了很多功能,建议用旧版的。

4学时实验:①熟悉使用数据建模工具;②利用数据建模工具创建概念模型和逻辑模型;③利用数据建模工具创建物理模型;④根据物理模型在Mysql上创建数据库

每个人选一个题目构建数据库的概念模型、逻辑模型和物理模型:

我选的是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)  

有些同学一看到实验、课设就打退堂鼓,其实花些时间认真研究老师给的实验模板后都能懂。

扫描二维码关注公众号,回复: 12799311 查看本文章

实验一  熟悉使用数据建模工具

一、实验目的

  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 个字节。

        Blob (Binary Large Object) 最大长度 65535Bit(2^16-1)即最大 65K,二进制大对象,是一个可以存储二进制文件的容器。典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。

        LongBlob 最大长度 4294967295Bit (2^32-1)最大 4G。

        MediumBlob 最大长度 16777215Bit(2^24-1)即最大 16M。

        TinyBlob 最大 255Bit (2^8-1)。         

        在 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 两种类型。

        Date(yyyy-mm-dd)所能存储的时间范围为:'1000-01-01' ~ '9999-12-31'。

        Datetime(yyyy-mm-dd hh:mm:ss)在SQL Server中所存储的日期范围是:' 1753-01-01 ~ 9999-12-31 ' (每一个值要求 8 个存储字节)。在MySQL中所能存储的时间范围为:'1000-01-01 00:00:00.000000' ~ '9999-12-31 23:59:59.999999'。

        Smalldatetime 所存储的日期范围是:'1900-01-01 ~ 2079-12-31 ' (每一个值要求 4 个存储字节)。   

        Time(hh:mm:ss)

        日期的格式可以设定。设置日期格式的命令如下:
        Set DateFormat {format | @format _var}
        其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。
        例如,当执行 Set DateFormat YMD 之后,日期的格式为 年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月 年 形式。

        Timestamp 时间戳(yyyy-mm-dd hh:mm:ss),用于表示 SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。在MySQL中所能存储的时间范围为:'1970-01-01 00:00:01.000000' ~ '2038-01-19 03:14:07.999999'。

        Year(yyyy)

        Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。

        Geometry 可以存储所有的几何类型

        GEOMETRYCOLLECTION 任何几何集合

        LINESTRING 简单线

        MULITILINESTRING 多线

        MULTIPOINT 多点

        MUILITIPOLYGON 很多方面

        Point 简单点

        POLYGON 简单面

        数字数据只包含数字,数字数据类型包括正数和负数、小数(浮点数)和整数。
        整数由正整数和负整数组成,例如 39、25、0、-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是 Int,Smallint 和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。

        BigInt[M] -2^63~2^63-1,UNSIGNED:0~2^64。

        Int[M] -2^31~2^31-1即-2 147 483 648 到 2 147 483 647,UNSIGNED:0~2^32(每一个值要求4个字节存储空间)。

        MediumInt[M] -8388608~8388607,UNSIGNED :0~16777215

        Smallint[M] -32768~32767,UNSIGNED:0~ 65535(每一个值要求2个字节存储空间)。

        Tinyint[M] -128~127,UNSIGNED:0~255(每一个值要求1个字节存储空间)。   

        精确到小数的数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的小数点后的位数来确定。
        在SQL Server 中,近似小数的数据类型是 Float (双精度) 和 Real (单精度) 。例如,三分之一这个分数记作 0.3333333,当使用近似数据类型时不能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。

        Float[(M,D)] -3.4E+38~3.4E+38( 约 )

        Double[(M,D)] -1.79E+308~1.79E+308( 约 )

注:M 为长度,D 为小数,Float 4 bytes,Double 8 bytes

        字符数据是由任何字母、符号和数字任意组合而成的数据。    

        Varchar(N)[binary] N=1~255 个字元,binary :分辨大小写。是变长字符数据,其长度不超过 8KB。

        Char(N)[binary] N=1~255 个字元,binary :分辨大小写。是定长字符数据,其长度最多为 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 个字符。

        LongText 最大长度4294967295Bit (2^32-1)

        MediumText 最大长度 16777215Bit(2^24-1)

        Text 最大长度65535Bit(2^16-1)

        TinyText 最大长度255Bit(2^8-1)

        Bit 由 1 或者 0 组成。当表示真或假、ON 或 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。

        Enum (Enumeration)单选,集合最大数目为65535。例:sex enum(1,0)。

        Set 复选,集合最大数目为64。例:habby set(‘玩电玩’,'睡觉’,'看电影’,'听音乐’)。

注意:

        在本实验中,我的外码全设为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");
		}
	}
}

 

 

猜你喜欢

转载自blog.csdn.net/qq_41587612/article/details/106990751