小屋創作

日誌2020-06-10 19:42

【系統開發】《夜雨的資訊小教室》水耕自動化系統雛形(二) – 資料庫

作者:狐尾貓@キツネコ

大家好!我是主人呦!(๑•̀ㅂ•́)و✧


也就是狐尾貓和貓耳狐的主人!


前一陣子因為別人委託的機器人,遇到了些問題,導致我花了不少時間在上面,所以其實就沒怎麼整理《夜雨的資訊小教室》系列的資料了。


今天稍微有些時間,就整理整理,然後發上來。那就廢話不多說了,直接上文啦!(๑•̀ㅂ•́)و✧




《夜雨的資訊小教室》
水耕自動化系統雛形(二)–資料庫

嗨嗨!大家好,是我 夜雨喲~


  資料庫,此系統使用的主要是『關聯式資料庫』,當然,除此之外還有另一種叫做『非關聯式資料庫』的資料庫,不過這裡主要針對『關聯式資料庫』進行說明。

  所謂的『關聯式資料庫』,是指建立在關聯模型基礎上的資料庫[1]。一個資料庫軟體裡面可能會有好幾個資料庫,一個資料庫裡面通常會有好幾個資料表,一個資料表中會有好幾筆紀錄(資料)與欄位。

  所謂的資料表是由欄位與紀錄(資料)組成的。


  

  舉例來說,今天我要建立一個存放動漫人物的資料表,一般人有可能會像下面這樣建立。




  但是有些明顯重複性高的資料,在重複輸入的過程中,有可能會輸入錯誤。




  或是在我們要將『SHOW BY ROCK!!』修改成『SB69』,那麼我們就必須要一筆一筆的修改。顯然這是沒有效率的事情。




  而所謂的資料關聯,簡單的說,就是可以將不同資料表的資料,透過關聯的方式建立關係。因此,我們先將大量重複的資料,獨立移動到新的資料表中。






  之後只要透過查詢語法,將擁有相同ID,但是在不同資料表中的資料,讓他們關聯起來,就可以顯示出一整張我們想要的資料表。但不同的是,我們只要修改『作品資料表』中的『作品名稱』,就可以一次修改成所有顯示出來的『SB69』作品名稱。




  這樣根據索引鍵以及外來鍵,來繪製出資料表之間的關聯,也就是『資料模型』或是『資料關聯圖』。


附註:上面這些圖的表格,是使用EXCEL繪製的,並非真正的資料庫畫面。


  而這樣拆分資料表的動作,一般稱之為『正規化』。『正規化』的部分,一般普遍只做到『第三正規化』,其中一個原因是做到第四第五正規化,資料表維護起來會十分複雜且困難。

  至於『正規化』、『SQL資料庫語法』等等的部分,有興趣的人可以上網查資料。因為這部分說明起來,會花費相當多的版面,因此,未來有機會再來說。而且這部分,網路上的資料非常多,應該不難查到。

  『關聯式資料庫的部分,一般常見的是微軟的Microsoft SQL Server』,以及免費開源軟體的『MySQL』。以下將以『MySQL』進行說明,雖然兩者差別不算太大,但是『MySQL』有不用錢、可靠、效能高等等的特點。

  MySQL是一種資料庫軟體,屬於開源軟體,結構化查詢語言(SQL)是很常使用的標準化資料庫語言,MySQL是用CC ++程式語言撰寫的。由於可靠、成本低、效能高,使之成為流行的資料庫開源軟體之一,而被廣泛應用在Internet中的各種中小型網站上。且也因為MySQL資料庫不斷成熟,逐漸有許多大規模的網站或其他軟體的應用,像是GoogleFacebook、維基百科等網站。[19]

  由於許多平台皆可以使用,如:WindowsLINUX……等作業系統。且許多程式語言皆可以使用API進行與MySQL資料庫的連接,如:C#JAVAPHP……程式語言,也因此使用上相當的方便。[20]

  MySQL資料庫在水耕自動化系統中,不僅用來儲存感測器所測得的資料,也可以用來儲存使用者的排程、指令、帳密以及植物參數等資料。

  在系統登入帳號時,程式會抓取帳號與密碼進行比對。以及在要進行自動監控的時候,系統也會抓取現在的環境參數,與資料庫中的植物生長參數等環境資料進行比對。在使用者要下達指令的時候,會將我們要系統進行的動作儲存到資料庫中,之後微電腦會抓取自料庫中的指令,並做出使用者要系統做出的動作。

  除此之外,在進行自動監控的條件判斷時,所使用的判斷方法是MySQL內建的指令。因為若有非常多條件要判斷,甚至可能要執行迴圈,若是使用其他程式語言執行迴圈,不斷比對條件與判斷,可能會使得系統消耗大量資源與時間。因此使用MySQL語法進行條件判斷,會比使用程式跑回圈比對條件的效率還要高。



本系統當前的資料模型(資料關聯圖)



  資料字典,也就是將資料表名稱、欄位名稱、資料型別、範例、索引鍵列表列出來。

  欄位名稱有分成英文與中文,一般在系統中是使用英文的,因為若是使用中文欄位,在程式中可能會因為使用中文,而出現原因不明的BUG

  因此資料字典的中文欄位名稱,就是給人方便看而已,並沒有實質上的作用。

  以下將附上系統的資料字典,當前系統雖然有進行修改,不過新版的系統架構與程式碼,未來有機會再公開。



以下開始放上系統的資料字典

資料字典(一般資料表)

使用者User資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
UserID 使用者編號 INT 1 P
UserName 使用者名稱 VARCHAR(20) 王小明
AccountID 帳戶編號 INT 1 F


帳戶Account資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
AccountID 帳戶編號 INT 1 P
Account 帳號 VARCHAR(30) abc1234
RoleID 角色編號 INT 1 F
Password 密碼 VARCHAR(20) pass1234
Memo 備註 VARCHAR(50)
IsDelete 是否刪除 TINYINT 0


角色Role資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
RoleID 角色編號 INT 1 P
RoleName 角色名稱 VARCHAR(20) 系統管理員
Memo 備註 VARCHAR(50)


權限Competence資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
CompetenceID 權限編號 INT 1 P
CompetenceName 權限名稱 VARCHAR(20) 系統管理員水耕控制
RoleID 角色編號 INT 1 F
FunctionID 功能編號 INT 1 F
OpenOrClose 開啟關閉 TINYINT 1
Memo 備註 VARCHAR(50)


功能Function資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
FunctionID 功能編號 INT 1 P
FunctionName 功能名稱 VARCHAR(20) 水耕系統控制
FunctionIntroduction 功能簡介 VARCHAR(30) 對水耕系統的控制功能
Memo 備註 VARCHAR(50)


微電腦MCU資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
MCUID 微電腦編號 INT 1 P
MCUName 微電腦名稱 VARCHAR(20) Arduino1
MCUTypeID 微電腦類型編號 INT 1 F
Memo 備註 VARCHAR(50)
IsDelete 是否刪除 TINYINT 0


微電腦腳位MCUPin資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
MCUPinID 微電腦腳位編號 INT 1 P
MCUPinName 微電腦腳位名稱 VARCHAR(20) Arduino1D1
MCUID 微電腦編號 INT 1 F
PinTypeID 腳位類型編號 INT 1 F
Memo 備注 VARCHAR(50)


微電腦類型MCUType資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
MCUTypeID 微電腦類型編號 INT 1 P
MCUTypeName 微電腦類型名稱 VARCHAR(20) Arduino
MCUSpecification 微電腦規格 VARCHAR(30) 8bit 1.6GHz
Memo 備註 VARCHAR(50)


設備廠商DeviceManufacturers資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
DeviceManufacturersID 設備廠商編號 INT 1 P
DeviceManufacturersName 設備廠商名稱 VARCHAR(20)
ManufacturersTel 電話 VARCHAR(12)
Memo 備註 VARCHAR(50)


即時監控RTSurveillance資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
RTSurveillanceID 即時監控編號 INT 1 P
RTSurveillanceName 即時監控名稱 VARCHAR(20) 抽水馬達
MCUPinID 微電腦腳位編號 INT 1 F
SurveillanceGroupID 即時監控群組編號 INT 1 F
DeviceID 設備編號 INT 1 F
SurveillanceTypeID 監控種類編號 INT 1 F
StatusTypeID 狀態類型編號 INT 1
SurveillanceStatus 監控狀態 VARCHAR(20) 1
Unit 單位 VARCHAR(14) 位元
CycleTime 循環時間() INT 0
Memo 備註 VARCHAR(50)


設備店家DeviceShop資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
DeviceShopID 銷售店家編號 INT 1 P
DeviceShopName 銷售店家名稱 VARCHAR(20) 中將電子
ShopTel 電話 VARCHAR(12) (00)00000000
ShopAddress 地址 VARCHAR(50)
Memo 備註 VARCHAR(50)


設備Device資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
DeviceID 設備編號 INT 1 P
DeviceName 設備名稱 VARCHAR(20) 抽水馬達
DeviceTypeID 設備類型編號 INT 1 F
DeviceManufacturersID 設備廠商編號 INT 1 F
DeviceShopID 設備店家編號 INT 1 F
DeviceSpecification 設備規格 VARCHAR(40) 12V 600mA
Memo 備註 VARCHAR(50)


排程Schedule資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
ScheduleID 排程編號 INT 1 P
ScheduleName 排程名稱 VARCHAR(20) 植物燈開啟
ScheduleTypeID 排程類別 INT 1 F
Date 日期 DATE 2017-12-25
Week 星期 VARCHAR(13) 1,3,5
Time 時間 TIME 09:30
IsOpen 是否開啟 TINYINT(1) 1
Memo 備註 VARCHAR(50)


排程動作ScheduleAction資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
ScheduleActionID 排程動作編號 INT 1 P
ScheduleID 排程編號 INT 1 F
DeviceID 設備編號 INT 1 F
Status 狀態 VARCHAR(20) 255


自動條件AutoCondition資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
AutoConditionID 自動條件編號 INT 1 P
AutoConditionName 自動條件名稱 VARCHAR(20) 火災警報
WeightsType 權重類型 TINYINT(1) 0 or 1(一次or直到解除)
AutoCondition 自動條件 TEXT
Priority 優先權 INT 0表示不執行,其他表順序
LastStatus 上次狀態 TINYINT(1) 1(前一次條件是否符合)
Memo 備註 VARCHAR(50)


自動動作AutoAction資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
AutoActionID 自動動作編號 INT 1 P
AutoConditionID 自動條件編號 INT 1 F
DeviceID 設備編號 INT 1 F
Status 狀態 VARCHAR(20) 255


資料字典(參數設定資料表)

監控種類SurveillanceType資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
SurveillanceTypeID 即時監控種類編號 INT 1 P
SurveillanceTypeName 即時監控種類名稱 VARCHAR(20) 環境、消防、保全
Memo 備註 VARCHAR(50)


腳位類型PinType資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
PinTypeID 腳位類型編號 INT 1 P
PinTypeName 腳位類型名稱 VARCHAR(20) InputPWMAnalog
Memo 備註 VARCHAR(50)


監控群組SurveillanceGroup資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
SurveillanceGroupID 監控群組編號 INT 1 P
SurveillanceGroupName 監控群組名稱 VARCHAR(20) 主臥室、水耕系統
Memo 備註 VARCHAR(50)


設備類型DeviceType資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
DeviceTypeID 設備類型編號 INT 1 P
DeviceTypeName 設備類型名稱 VARCHAR(20) SensorIR
Memo 備註 VARCHAR(50)


狀態類型StatusType資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
StatusTypeID 狀態類型編號 INT 1 P
StatusTypeName 狀態類型名稱 VARCHAR(20) OCOOUnit%
Memo 備註 VARCHAR(50)


排程類型ScheduleType資料表
欄位名稱 中文名稱 資料型別 欄位範例 索引鍵
ScheduleTypeID 排程類型編號 INT 1 P
ScheduleTypeName 排程類型名稱 VARCHAR(20) 一次、每天、每周X、日期
Memo 備註 VARCHAR(50)



欄位名稱 中文名稱 資料型別 欄位範例 索引鍵


  接下來這邊稍微解說一下,這些資料表的設計目的,並非單純只是存放資料而已。

  首先,先來說最主要的功能之一,也就是即時監控。當使用者需要立刻開啟某設備,那麼使用者的指令會存入『即時監控RTSurveillance資料表,的『監控狀態』欄位中。

  那麼系統本身,到底該如何判斷,需要開啟哪個設備呢?所以我們就需要透過這些資料表告知系統。

  例如:我現在要開啟植物燈,系統就必須知道,這個植物燈接在『XX微電腦』上的『OO腳位』。如此一來,我們可以直接透過手機開啟植物燈,系統就直接讓『XX微電腦』上『OO腳位』的『YY設備通電


  接下來要說的是『自動條件判斷』功能的實現方法。完整的自動執行動作流程未來會在『Python自動監控程式』中提到。

  現在只是先說,所謂的『自動條件』,也就是用來判斷條件是否符合的依據,是以SQL語法的形式,存放於『自動條件AutoCondition資料表,的『自動條件』欄位中。

  意思也就是說,當需要判斷條件時,我們會直接執行那個欄位中的SQL語法,執行SQL語法之後所得到的回傳數值,基本上是『0』或是『1』。如此一來,就可以將大量且複雜的判斷條件,直接由SQL資料庫來執行。這麼做的用意正如前面所提到的,可以讓速度更快節省效能。




參考資料

[1]關聯式資料庫 - WIKI

[2]Mysql.com,(n.d.)。Guide to Scaling Web Databases with MySQL Cluster

[3]Mysql.com,(n.d.)。Mysql





文章目錄:
【系統開發】水耕自動化系統雛形(一)–系統架構
【系統開發】水耕自動化系統雛形(二)–資料庫
【系統開發】水耕自動化系統雛形(三)–PHP API
【系統開發】水耕自動化系統雛形(四)–NodeMCU
【系統開發】水耕自動化系統雛形(五)–Python自動監控程式
【系統開發】水耕自動化系統雛形(六)–Python排程程式
【系統開發】水耕自動化系統雛形(七)–APP即時監控
【系統開發】水耕自動化系統雛形(八)–
【系統開發】水耕自動化系統雛形(九)–





  若是上面都看不懂的,可是依然想要實做看看,那也沒有關係!

  後續會附上程式碼以及電路接線方法。

  只要有辦法一一將系統環境建立起來,剩餘的部分程式碼貼上,我想應該都可以成功弄得出來的~

  後續文章將會列出系統所有的電路、接線、程式碼,不過文章更新速度可能會有些緩慢,還請有興趣的各位敬請期待。

  若是各位有更好的建議與方法,也歡迎在留言區提出來跟大家討論喲~



今天《夜雨的資訊小教室》就到這裡
大家下次見囉~



據說在工程師之間流傳著一句話:
「你不解決BUG,BUG會解決掉你!」





羽奈:夜雨你看起來好矮......

夜雨:聽說是因為狐尾貓最近在趕繪圖作業,所以沒空畫出我的下半身。

羽奈:畫?你說甚麼?

夜雨:嘛!沒差啦。也許下次看到我就突然變高了~





大家晚上好喵~我是狐尾貓~ (๑>ᆺ<๑)✧

是的,正如夜雨所說......

因為最近還在趕繪圖作業,所以沒辦法更新太多圖片~ > <

這次只是簡單的把夜雨加進場景而已~ (*´꒳`*)



小教室系列,因為會耗掉我們非常大量的時間......

所以目前小教室系列更新非常緩慢~ (ㅇㅅㅇ❀)

未來除了《夜雨的資訊小教室》、《冬白的植物小教室》之外~

還有其他幾位活耀於《善與惡的正義》中的人物,會出來與大家分享些有趣的事物喵~~~ (ᗒᗊᗕ)

所以大家如果對於植物與資訊系統沒有興趣......

未來還有其他領域的分享喔~~~ (✪ ω ✪)





感謝看到這裡的你~ (๑>ᆺ<๑)✧

26

13

LINE 分享

相關創作

【SQL】一些常用的SQL語法

神族之劍v4 程式碼分享(開發中)

【閒聊】經營部落格的緣由

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】