データモデリングとプログラム設計実験レポート[全集]-顧客への提供

この記事があなたに役立つなら、私を好きにしてフォローしてください!

私はEclipse + Visio2010 + MySQL Workbenchを使用しています。Visioの代わりにEA(Enterprise Architect)、VP(Visual Paradigm)、またはオンライン描画ツールを使用することもできます。Visioの描画ポリラインの「知性」は本当に必死です。新しいバージョンでは多くの機能がキャンセルされます。古いバージョンを使用することをお勧めします。

4時間の実験:①データモデリングツールの使用に精通している;②データモデリングツールを使用して概念モデルと論理モデルを作成する;③データモデリングツールを使用して物理モデルを作成する; 物理モデルに基づいてMysqlでデータベースを作成する

各人がトピックを選択して、データベースの概念モデル、論理モデル、および物理モデルを構築します。

私は10を選びました、そしてすべてのトピックのための実験データと以下の10のための詳細なレポートがあります
1.顧客の注文入力 9.学生寮
2.在庫管理 10.クライアントの輸送
3.資産管理 11.出版社の印刷
4.プロジェクト管理 12.国の図書館
5.コース管理 13.不動産賃貸
6.人的資源管理 14.旅行代理店(旅行代理店)
7.給与管理 15.学生の管理(学生の結果)
8.レンタカー(車両管理)  

実験やコースのデザインを見てすぐに退学する生徒もいますが、実は先生から渡された実験テンプレートをじっくりと勉強すれば理解できます。

実験1データモデリングツールの使用に精通している

1.実験の目的

  1. データモデリングツールEAの使用をマスターします。
  2. データモデリングツールVisioの使用をマスターします。
  3. データモデリングツールVPの使用をマスターします。

2.実験内容

1.実験要件(次の3つのツールのいずれかを選択してください)

     1)データモデリングツールEAをインストールし、EAの使用法ドキュメントに従ってVisioツールソフトウェアに精通します。簡単なデータモデルの作成を練習します。

     2)データモデリングツールVisioをインストールし、Visioの使用法ドキュメントに従ってVisioツールソフトウェアに精通します。簡単なデータモデルの作成を練習します。

     3)データモデリングツールVPをインストールし、VP使用文書に従ってVPツールソフトウェアに精通している。簡単なデータモデルの作成を練習します。

2.実験的な例としてVisioを取り上げます

実験2 データモデリングツールを使用して概念モデルと論理モデルを作成する

1.実験の目的

  1. 実際の事例に基づいてデータベースの概念モデルを構築します。
  2. 概念モデルに基づいて論理モデルを構築します。

2.実験内容

  1. 概念モデル(実体属性図、二項関係のER図)を確立します。
  2. 部分的なER図を組み合わせて全体的なERモデルにします。
  3. ERモデルに多様性制約を追加します。
  4. 主キーを表示するERモデルを構築します。
  5. エンティティの属性を識別し、主キー、外部キー、および代替キーを確認します

3つの実験的実現

     1.ERモデルの一部

     2.全体的なERモデル

 

     3.ER図に多様性制約を追加します

     4.ER図で主キーを特定します

     5.エンティティ属性を識別し、主キー、外部キー、および代替キーを確認します

 実験3データモデリングツールを使用して物理モデルを作成する

1.実験の目的

  1. 特定のデータベースオペレーティングシステムの使用を習得します。
  2. 論理モデルに基づいて物理モデルを作成します。

2.実験内容

      論理設計が完了すると、それに含まれるエンティティと属性はすべて名前としての説明テキストになります。したがって、最初のタスクは次のとおりです。

      1)エンティティと属性の名前を短くし、それらを単純にし、物理モデルがテーブル名や列名の長さの問題を引き起こさないようにするため。

      2)命名規則、特に省略形の場合、一貫性が最も重要です。できるだけ単純な名前を使用し、キーワードや予約語は使用しないでください。

      3)個別の単語には、アンダースコア(_)または大文字の形式で単語​​の頭文字を使用できます。

3つの実験的実現

実験4物理モデルに基づいてMysqlにデータベースを作成する

1.実験の目的

  1. データベースシステムの使用をマスターする。
  2. 物理モデルによると、データベースシステム上にデータベースを作成することに習熟している必要があります。

2.実験内容

     学んだことを適用して、Mysqlデータベースを作成します。請求:

  1. Mysqlのインストールと使用に習熟していること。
  2. Mysql管理システムの物理モデルに基づいてシステムデータベースを作成します。
  3. 作成したデータベーススクリプトをエクスポートします。
  4. 確立されたデータベースに従って、使い慣れたプログラミング言語(Java、C ++、C#など)を使用してデータベース接続ステートメントを記述し、各テーブルの追加、削除、および変更を実現し、テーブルの関連付け関係を実現します。

3つの実験的実現

     1.物理モデルによると、作成されるシステムデータベースは次のとおりです。

習得する知識:     

①外部コード操作を定義する

       外部コードがrestrictキーワードとして定義されている場合、クラステーブルからデータが削除された(つまり、クラスが削除された)場合、そのクラスの学生が学生テーブルに存在すると、エラーが発生します。報告され、削除は許可されていません。

        外部コードがcascadeキーワードとして定義されている場合、それはカスケード削除を意味します。クラステーブル内のデータを削除すると、studentテーブル内の対応するデータが一緒に削除されます。

        外部コードがsetnullキーワードとして定義されている場合、クラステーブルのデータを削除するときに、studentテーブルに対応するデータがある場合、これらの対応するデータのcnoはNULLに設定されます。

②データタイプ

        Binary [(n)]は、nビットの固定バイナリデータです。その中で、nの値は1から8000の範囲です。そのストレージの香りのサイズはn + 4バイトです。これは関数ではなく、型変換演算子であり、その後の文字列を強制的にバイナリ文字列にするために使用されます。これは、文字列を比較するときに大文字と小文字が区別されると理解できます。    

        Varbinary [(n)]は、nビットの可変長バイナリデータです。その中で、nの値は1から8000の範囲です。ストレージサイズはnバイトではなくn + 4バイトです。

        Blob(バイナリラージオブジェクト)の最大長は65535ビット(2 ^ 16-1)で、最大65Kです。バイナリラージオブジェクトは、バイナリファイルを格納できるコンテナです。一般的なBLOBは、画像または音声ファイルです。サイズが大きいため、特別な方法で処理する必要があります(たとえば、アップロード、ダウンロード、データベースへの保存)。Eric Raymondによると、BLOBを処理する主なアイデアは、ファイルプロセッサ(データベースマネージャーなど)がファイルの内容を気にせず、ファイルの処理方法を気にすることです。ただし、一部の専門家は、この大きなデータオブジェクトの処理方法は両刃の剣であり、大きすぎるバイナリファイルの保存などの問題を引き起こし、データベースのパフォーマンスを低下させる可能性があることを強調しました。データベースに大きなマルチメディアオブジェクトを格納することは、アプリケーションによるBLOB処理の典型的な例です。

        LongBlobの最大長は4294967295Bit(2 ^ 32-1)で、最大は4Gです。

        MediumBlobの最大長は16777215Bit(2 ^ 24-1)です。つまり、最大は16Mです。

        TinyBlobの最大値は255ビット(2 ^ 8-1)です。         

        Imageデータ型に格納されているデータは、SQL Serverによって解釈されないビット文字列として格納されますが、アプリケーションプログラムによって解釈される必要があります。たとえば、アプリケーションはBMP、TIEF、GIF、およびJPEG形式を使用して、データをImageデータ型に格納できます。

        日付と時刻のデータ型は、有効な日付と時刻で構成されます。たとえば、有効な日付と時刻のデータには、「4/01/98 12:15:00:00:00PM」と「1:28:29:15:01 AM8/17/98」が含まれます。前者のデータ型は日付の前であり、時刻は後です。後者のデータ型は時刻の前であり、日付は後です。Microsoft SQL Serverでは、日付と時刻のデータ型にはDatetimeとSmalldatetimeが含まれます。

        日付(yyyy-mm-dd)が格納できる時間範囲は、「1000-01-01」〜「9999-12-31」です。

        SQL ServerのDatetime(yyyy-mm-dd hh:mm:ss)に格納されている日付範囲は、「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つのストレージバイトが必要です)。   

        時間(hh:mm:ss)

        日付の形式を設定できます。日付形式を設定するコマンドは次のとおり         です。SetDateFormat
        {format | @format _var}
ここで、format | @format_varは日付の順序です。有効なパラメータには、MDY、DMY、YMD、YDM、MYD、およびDYMが含まれます。デフォルトでは、日付形式はMDYです。
        たとえば、Set DateFormat YMDを実行すると、日付形式は年、月、および日の形式になり、Set DateFormat DMYを実行すると、日付形式は日、月、および年の形式になります。

        タイムスタンプ(yyyy-mm-dd hh:mm:ss)。SQLServerアクティビティのシーケンスを示すために使用され、バイナリプロジェクション形式で表されます。タイムスタンプデータは、挿入されたデータや日付と時刻とは関係ありません。タイムスタンプは、1970年1月1日00:00:00、グリニッジ標準時(08:00、01:01、1970、北京時間)から現在までの合計秒数を指します。MySQLに保存できる時間範囲は、「1970-01-01 00:00:01.000000」〜「2038-01-19 03:14:07.999999」です。

        年(yyyy)

        Uniqueidentifierは、グローバル一意番号を表す16バイトの16進数で構成されます。GUIDは、テーブルのレコード行を一意にする必要がある場合に非常に役立ちます。たとえば、顧客識別番号列でこのデータ型を使用すると、さまざまな顧客を区別できます。

        ジオメトリはすべてのジオメトリタイプを保存できます

        GEOMETRYCOLLECTION任意の幾何学的コレクション

        LINESTRINGシンプルライン

        MULITILINESTRINGマルチライン

        MULTIPOINT 多点

        MUILITIPOLYGONの多くの側面

        シンプルなポイント

        ポリゴンシンプルヌードル

        デジタルデータには数値のみが含まれ、デジタルデータタイプには正と負の数値、10進数(浮動小数点)、整数が含まれます。
        整数は、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は-2147 483648から2147 483 647、符号なし: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の小数に正確なデータ型は、小数と数値です。このデータが占める記憶域は、データの小数点以下の桁数によって決まります。
        SQL Serverでは、概算小数のデータ型はFloat(倍精度)とReal(単精度)です。たとえば、3分の1のスコアは0.3333333として記録されますが、おおよそのデータ型を使用すると正確に表すことができません。したがって、システムから取得されたデータは、列に格納されているデータと完全に同じではない場合があります。

        フロート[(M、D)] -3.4E + 38〜3.4E + 38(概算)

        ダブル[(M、D)] -1.79E + 308〜1.79E + 308(約)

注:Mは長さ、Dは10進数、Float 4バイト、Double8バイト

        文字データは、文字、記号、数字の任意の組み合わせで構成されるデータです。    

        Varchar(N)[binary] N = 1〜255文字、binary:大文字と小文字を区別します。可変長文字データであり、長さは8KBを超えません。

        Char(N)[binary] N = 1〜255文字、binary:大文字と小文字を区別します。固定長の文字データで、最大8KBです。8KBを超えるASCIIデータは、テキストデータ型を使用して保存できます。たとえば、HtmlドキュメントはすべてASCII文字であり、通常は長さが8KBを超えるため、これらのドキュメントはSQLServerにテキストデータ型で格納できます。

        Microsoft SQL Serverでは、従来の非Unicodeデータ型では、特定の文字セットで定義された文字を使用できます。SQL Serverのインストールプロセス中に、文字セットを選択できます。Unicodeデータ型を使用すると、Unicode標準で定義されている任意の文字を列に格納できます。Unicode標準には、さまざまな文字セットで定義されているすべての文字が含まれています。Unicodeデータ型を使用すると、非Unicodeデータ型の2倍のサイズになります。
        SQL Serverでは、UnicodeデータはNchar、Nvarchar、およびNtextデータ型で格納されます。この文字タイプを使用して格納された列は、複数の文字セットで文字を格納できます。列の長さが変わる場合は、Nvarchar文字タイプを使用する必要があります。このとき、最大4000文字を格納できます。列の長さが固定されている場合は、Nchar文字タイプを使用する必要があります。同様に、この時点で最大4000文字を格納できます。Ntextデータ型を使用する場合、この列には4000文字を超える文字を格納できます。

        LongTextの最大長4294967295ビット(2 ^ 32-1)

        MediumTextの最大長16777215Bit(2 ^ 24-1)

        テキストの最大長65535ビット(2 ^ 16-1)

        TinyTextの最大長255Bit(2 ^ 8-1)

        ビットは1または0で構成されます。trueまたはfalse、ONまたはOFFを示す場合、ビットデータ型が使用されます。たとえば、訪問ごとにクライアントリクエストであるかどうかを確認することは、このデータタイプの列に格納できます。

        列挙型(列挙型)の単一選択。セットの最大数は65535です。例:性別列挙型(1,0)。

        セットチェック、セットの最大数は64です。例:ハビーセット(「ビデオゲームをする」、「寝る」、「映画を見る」、「音楽を聴く」)。

注意:

       この実験では、管理を容易にするために、外部コードをすべてCascade OnDeleteとCascadeOnUpdateに設定しています。主キー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)

      解決:

      [編集]-> [設定]-> [管理者]-> [mysqldumpツールへのパス]を設定して、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