數據庫綜合實踐

目錄

一、實驗目的

二、實驗示例

1.系統設計

(1)系統功能需求

(2)數據庫需求分析

2、系統總體設計

(1)監測系統模塊設計

(2)系統數據庫設計

三、系統數據庫實現

(1)打開MySQL數據庫。

(2)MySQL 管理界面連接

(3)新建數據庫

四、將數據導入數據庫

(1)傳感器數據

(2)外網數據

五、實驗心得體會


 

   

一、實驗目的

l 瞭解環境監測系統的總體設計。

l 掌握系統數據庫設計。

l 熟悉數據庫連接和訪問。

l 熟悉系統功能模塊設計。

l 熟悉數據庫的存儲與讀取。

二、實驗示例

1.系統設計

對用戶的實時定位、環境檢測與預警顯示主要實現功能地圖顯示用戶的位置信息,同時地圖上顯示手機端的位置信息;周圍的溫度、溼度、煙霧濃度和天氣情況;關於溫度、溼度和煙霧濃度報警和對天氣、PM2.5等等的預警。

(1)系統功能需求

環境監測系統信息展示總表

當前時間

2018.06.17

00:00:00

位置

信息

用戶位置1

XXX

用戶位置2

XXX

 

 

位置1

溫度1

 

溼度1

 

煙霧濃度

 

 

位置2

天氣類型

 

溫度2

 

溼度2

 

PM2.5

 

 

 

預警

類型

當前值

閾值

備註

煙霧濃度

0

 

 

溼度

42

30

80

 

溫度

23

40

較舒適

PM2.5

103

100

輕度污染

管理

權限

賬號

密碼

①用戶模塊。、

用戶模塊有登陸,查詢數據和添加、刪除預警信息等功能。

②管理員模塊。

管理員模塊有增刪查改。

本案例針對用戶模塊進行重點分析。

(2)數據庫需求分析

①用戶登錄數據流圖

用戶註冊主要是對註冊表的操作,用戶要完成註冊,需要將自己的信息插入到註冊表中,同時也提供用戶對自己的註冊欄進行查詢、修改和刪除功能。

圖1 用戶登錄數據流圖

②用戶查詢數據流圖。

用戶查詢數據主要分爲兩種類型,分別訪問到兩個數據表,可以對大範圍的環境情況進行查詢的外網數據表,也可以對具體到室內的環境數據進行查詢的傳感器數據表。

圖2 用戶查詢數據流圖

 

③用戶設置數據流圖

用戶對數據庫的數據沒有增加、刪除和修改的權限,只能夠對數據進行查詢和做出反饋。

圖3 用戶設置數據流圖

 

2、系統總體設計

(1)監測系統模塊設計

圖4 系統模塊設計

(2)系統數據庫設計

根據系統的功能需求,要對數據庫進行合理設計。在本系統設計過程中,首先要對數據庫進行需求分析,然後進行概念結構設計、邏輯結構設計、物理結構設計和數據庫實施等操作。

概念結構設計中,經分析得到以下各個局部E-R圖。

 

①用戶與賬戶E-R圖如圖所示。同一個用戶可以申請多個賬戶,但是同一個賬戶只能有一個用戶,所以用戶申請賬戶時,生成新的註冊表。

圖5 用戶與賬戶E-R圖

 

②用戶與環境E-R圖如圖所示。同一個賬戶可以有多個外網的數據,也可以有多個傳感器採集數據,同時同一個數據表亦可以爲多個用戶提供數據來源,所以在用戶查詢環境時,生成新的外網數據表和傳感器採集數據表。

圖6 用戶與環境E-R圖

 

③傳感器與熱點E-R圖如圖所示,一個傳感器可以搜索獲取多個熱點的信息,同一個熱點信號也可以被多個傳感器接收到,生成新的熱點數據表。

圖7 傳感器與熱點E-R圖

 

④合成用戶模塊整體E-R圖

圖8 合成用戶模塊整體E-R圖

 

  1. 數據表設計

在次只介紹用戶模塊中的幾個數據表。其整體描述如表1所示。

表1 各數據表描述

數據表

描述

log_info

登錄表

Sensor_data

傳感器採集數據表

Net_data

外網數據表

AP

室內定位熱點表

接下來,分別對各個數據表進行描述。

①log_info表

該表描述登錄的身份基本信息,包括用戶ID、用戶名、用戶密碼和系統。Log_info表的邏輯結構如表2所示。

表2 登錄表log_info

序號

字段名

標識

類型

長度/Byte

精度

允許空

主鍵

1

user_id

用戶ID

int

 

 

 

2

use_name

用戶名

varchar

10

 

 

 

3

use_pw

用戶密碼

varchar

10

 

 

 

4

system

系統

varchar

10

 

 

 

創建表2的語句如下。

drop table if exists "log_info";

/*==============================================================*/
/* Table: "log_info"                     */
/*==============================================================*/
create table "log_info"
(
   "user id"          int not null,
   "user name"        varchar(10),
   "user pw"            varchar(10),
   system           varchar(10),
   primary key ("user id")
);

alter table "log_info" add constraint FK_Reference_1 foreign key ("user id")

②sensor_data表

該表描述傳感器採集數據信息,包括傳感器id、溫度、溼度和煙霧濃度的邏輯結構如表3所示。

表3 傳感器採集數據信息表sensor_data

序號

字段名

標識

類型

長度/Byte

精度

允許空

主鍵

1

sensor_DT

採集數據

Datatime

 

 

 

2

temperature

溫度

double

10

2

 

 

3

humidity

溼度

double

10

2

 

 

4

ingredient

煙霧濃度

double

10

2

 

 

5

longitude

經度

double

10

6

 

 

6

latitude

維度

double

10

6

 

 

 

創建表3的語句如下。

drop table if exists "sensor_data";

/*==============================================================*/
/* Table: "sensor_data"                   */
/*==============================================================*/
create table "sensor_data"
(
   Sensor_DT           datetime not null,
   temperature          double(10,2),
   humidity            double(10,2),
   ingredient           double(10,2),

      longitude                      double(10,6),

      latitude                       double(10,6),
   primary key (PI_DT)
);

ALTER TABLE `sensor_data` ADD CONSTRAINT `longitude` FOREIGN KEY (`longitude`) REFERENCES `ap` (`longitude1`) ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE `sensor_data` ADD CONSTRAINT `lagitude` FOREIGN KEY (`latitude1`) REFERENCES `ap` (`latitude1`) ON DELETE RESTRICT ON UPDATE RESTRICT;

③net_data表

該表描述了我們從互聯網上找到的數據信息表,包括id、溫度、溼度、PM2.5濃度、天氣類型、經度和緯度的邏輯結構如表4所示。

表4 外網數據信息表net_data

序號

字段名

標識

類型

長度/Byte

精度

允許空

主鍵

1

net_DT

外網數據

Datetime

 

 

 

2

temperature

溫度

double

10

2

 

 

3

humidity

溼度

double

10

2

 

 

4

Pm2.5

Pm2.5

double

10

2

 

 

5

longitude

經度

double

10

6

 

 

6

latitude

維度

double

10

6

 

 

7

Weather_type

天氣類型

varchar

10

 

 

 

 

創建表4的語句如下。

drop table if exists "net_data";

/*==============================================================*/
/* Table: "net_data"                     */
/*==============================================================*/
create table "net_data"
(
   net_DT            datetime not null,
   pm2.5             double(10,2)
   temperature          double(10,2),
   humidity           double(10,2),
   longitude2          double(10,6),
   latitude2           double(10,6),

      weather_type         varchar(10),
   primary key (net_DT)
);

 

④AP表

該表描述了我們的Access Point信息,用以室內的定位功能實現,包括熱點名、MAC地址、信號強度、精度和維度。AP表的邏輯結構如表5所示。

表5 熱點表AP

序號

字段名

標識

類型

長度/Byte

精度

允許空

主鍵

1

APname

熱點名

varchar

 

 

 

2

macaddress

MAC地址

varchar

50

 

 

 

3

longitude

經度

double

10

6

 

 

4

latitude

維度

double

10

6

 

 

 

創建表5的語句如下。

drop table if exists AP;

 

/*==============================================================*/

/* Table: AP                                                    */

/*==============================================================*/

create table AP

(

   APname               varchar(10) not null,

   macaddress           varchar(50),

   longitude            double(10,6),

   latitude             double(10,6),

   primary key (APname)

);

 

三、系統數據庫實現

 

(1)打開MySQL數據庫。

在DOS命令窗口輸入 mysql -hlocalhost -uroot -p回車 進入mysql數據庫,其中-h表示服務器名,localhost表示本地;-u爲數據庫用戶名,root是mysql默認用戶名;-p爲密碼,如果設置了密碼,可直接在-p後鏈接輸入,如:-p123456,用戶沒有設置密碼,顯示Enter password時,直接回車即可。注意,如果你的mysql沒有安裝在C盤下,你需要先使用DOS命令進入mysql的安裝目錄下的bin目錄中。以我的電腦爲例,方法如下:輸入D:進入D盤,在輸入cd D:\Works\MySQL5.5.25\bin進入到mysql的bin目錄下纔可以輸入 mysql -hlocalhost -uroot -p

圖9 打開MySQL數據庫

(2)MySQL 管理界面連接

Navicat for MySQL是一款強大的 MySQL 數據庫管理和開發工具,它爲專業開發者提供了一套強大的足夠尖端的工具,但對於新用戶仍然易於學習。Navicat for MySQL 基於Windows平臺,爲 MySQL 量身訂作,提供類似於 MySQL 的用管理界面工具。此解決方案的出現,將解放 PHP、J2EE 等程序員以及數據庫設計者、管理者的大腦,降低開發成本,爲用戶帶來更高的開發效率。

圖10 選擇“連接”對話框

(3)新建數據庫

①在Navicat導航視圖的左邊連接導航欄中的空白區域點擊右鍵就可以看到【新建數據庫】的命令,我們來建一個監測環境信息的數據庫:environ_inspector

圖11 新建數據庫

②【新建表】建完數據庫後接下來就是建用戶註冊表:log_info;

在建表過程中有一個地方要特別的注意,就是“欄位”,對於初次使用Navicat的新手來說,這個比較陌生,它的意思就是我們通常所說的“字段”,工具欄中的“添加欄位”即添加字段的意思,不要弄混了就成,添加完所有的字段以後要根據需求設置相應的“主鍵”。

圖12 新建用戶註冊表

圖13 新建net_data的SQL預覽

圖14 創建表的SQL語句方法

③建立數據庫完成。

圖15 各數據表

④查看圖表

圖17 模型圖表

四、將數據導入數據庫

(1)傳感器數據

①傳感器數據採集

圖18 傳感器數據採集

②數據導入數據庫

MySQLdb提供了connect方法用來和數據庫建立連接,接收數個參數,返回連接對象:

代碼如下:

conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="environ_inspector",charset="utf8")

(2)外網數據

①數據爬取

爬蟲是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本,使用java Jsoup框架寫一個獲取天氣數據的爬蟲。

 

爬取網址:http://www.tianqi.com/ 天氣網

 

Jsoup框架優勢:

1.實現了CSS選擇器語法,頁面內容提取非常方便。

2.解析算法不使用遞歸,而是enum(枚舉)配合狀態模式遍歷數據(先預設所有語法組合),減少性能瓶頸。另外,不需要任何第三方依賴。

 

Jsoup獲取文檔分三個步驟。

1.根據輸入構建DOM樹

2.解析CSS選擇字符串到過濾表中

3.用深度優先算法將樹狀節點逐一過濾

 

②數據解析

通過網頁源碼獲取到網頁的dom結構,可以知道,我們需要的數據,主要都存在於 weather_info 這個類選擇器所在的節點當中,Jsoup 的document類提供了非常方便的解析方式,即類似於jqury 的複合選擇器。

圖19 獲取到的文檔

Selector選擇器概述

tagname: 通過標籤查找元素,比如:a

ns|tag: 通過標籤在命名空間查找元素,比如:可以用 fb|name 語法來查找 <fb:name> 元素

#id: 通過ID查找元素,比如:#logo

.class: 通過class名稱查找元素,比如:.masthead

[attribute]: 利用屬性查找元素,比如:[href]

[^attr]: 利用屬性名前綴來查找元素,比如:可以用[^data-] 來查找帶有HTML5 Dataset屬性的元素

[attr=value]: 利用屬性值來查找元素,比如:[width=500]

[attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結尾或包含屬性值來查找元素,比如:[href*=/path/]

[attr~=regex]: 利用屬性值匹配正則表達式來查找元素,比如: img[src~=(?i)\.(png|jpe?g)]

*: 這個符號將匹配所有元素

圖20 解析獲取的數據

③數據存儲

調用上述conn數據接口將數據存入數據庫:

圖21 將外網數據導入數據庫

五、實驗心得體會

在當今信息化的社會裏,數據庫可以說已經融入到我們生活的方方面面中,如交通運輸、銀行金融、工商企業等等。只要有大量的數據要管理或者需要有大量數據支持的工作,都要使用到數據庫,它爲我們的生活帶來了便捷。                                                                                                                              

結合我所學習的內容,談談關於數據庫課程的總結。

我們首先從緒論瞭解了數據庫的概念,介紹了數據模型和三層模式數據庫。理解實體-聯繫方法,並學會繪製e-r圖。此外還應掌握概念數據模型的意義和傳統的三大數據模型,以及數據獨立性和數據庫三層模式結構。接着開始着重講述現在普遍使用的關係數據庫。包括關係數據模型的數據結構和基本術語,關係模型的完整性約束和關係代數運算。重點是關係模式完整性的分類和功能,以及關係代數中集合運算和關係運算。最後介紹了關係數據系統的三層模式結構。之後講述關係數據庫的標準語言sql的定義功能、查詢功能、操作和控制功能。重點在於數據查詢功能。另外還介紹了視圖的用法和動態sql中定義、操作和查詢功能。最後一章,介紹安全性,包括安全性措施的層次、數據庫管理系統的安全功能等,用戶管理和角色管理,權限管理。其他的安全問題包括:數據加密、審計、統計數據庫和用戶定義的安全性措施。介紹了事務的概念、性質以及sql對事務的支持。併發控制——干擾問題、可串行性、封鎖、死鎖、隔離級別、封鎖與隔離級別;恢復——故障類型、備份類型、日誌的概念、恢復模型、備份轉儲、還原。實驗課上,實際完成數據庫設計的過程,完善e-r模型中的概念,依賴關係,強制聯繫;主要掌握數據庫建立的步驟。

數據庫這一門課就要結束了,在老師的耐心教學和答疑中,這一學期的學習讓我收穫了很多,最後感謝老師的教導!

 

 

 

 

 

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