ETH官方钱包

創作內容

28 GP

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

作者:狐尾貓@キツネコ│2020-06-10 19:42:25│巴幣:56│人氣:713
大家好!我是主人呦!(??????)??


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


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


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




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

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


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

  所謂的『關聯式資料庫』,是指建立在關聯模型基礎上的資料庫[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資料庫來執行。這麼做的用意正如前面所提到的,可以讓速度更快節省效能。




參考資料


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






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





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

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

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

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

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



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



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





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

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

羽奈:畫?你說甚麼?

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





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

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

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

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



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

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

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

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

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

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





感謝看到這裡的你~ (?>?<?)?
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=4812181
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:夜雨的資訊小教室|自動化系統|MySQL|SQL|關聯式資料庫|資料庫|夜雨|小教室系列

留言共 13 篇留言

楓夜喵
我正在期待合作科普唷~加油喵

06-10 22:58

狐尾貓@キツネコ
謝謝楓夜喵喔~ (???)
關於合作的部分就像上次私信說的那樣喔~ ?ω?
就是我們不一定有時間可以準備~06-13 21:29
樂小呈
痾...
完全不懂[e28][e28][e28][e28]

06-10 23:00

狐尾貓@キツネコ
謝謝樂小呈喔~ (???)
其實樂小呈平時製作的遊戲感覺也好深奧呢~ > <06-13 21:29
真川しん
不是專業領域看了真的會頭痛[e6]

06-10 23:05

狐尾貓@キツネコ
謝謝真川しん喔~ (???)
真的是這樣呢~ > < ((頭痛痛06-13 21:29
S彩S
狐尾大好厲害啊><
我都看不懂QQ

06-10 23:10

狐尾貓@キツネコ
謝謝彩S喔~ (???)
厲害的是主人喵~ (?>?<?)?06-13 21:29
芯玥兒
滿滿的英文
眼花了呀

06-10 23:18

狐尾貓@キツネコ
謝謝芯玥兒喔~ (???)
滿滿不孰悉的語言,看了之後腦袋脹脹的~ _(′?`」 ∠)_06-13 21:30
次元使者
最近也在忙程式
bug多到靠北
今天de很久
發現隊友在雷
BUG解決掉我.jpg
把我變數名稱改掉code裡面沒改

06-10 23:39

狐尾貓@キツネコ
謝謝次元使者喔~ (???)

主人:
我有時候程式BUG找了很久都找不到......

找到之後才發現好像不是甚麼困難的大問題......

可是又想想自己在上面花了那麼多時間......[e21]

BUG解決掉我.jpg06-13 21:30
闌尾
狐尾大整理的好厲害[e39]
可惡
我看不懂(〒︿〒)

06-11 00:24

狐尾貓@キツネコ
謝謝闌尾喔~ (???)
厲害的是主人喵~ (?>?<?)?
順帶一提,這個自動化系統是主人設計的喔~~~ (*′?`*)06-13 21:30
路邊的野貓
資料整理辛苦狐尾貓了><
真是非常詳細呢!
資料庫太久沒用 以前學到的皮毛我也全都忘光了說(ˊ?艸?ˋ)

06-11 02:21

狐尾貓@キツネコ
謝謝路貓喔~ (???)
辛苦的是主人喵~ (?>?<?)?
有時些知識太久沒使用,就從腦袋中消失了...... (??﹏?)06-13 21:30

資料庫的知識很有用呢 工作上因為要一直接觸資料庫
真的不解決BUG 就會被BUG解決呢
期待下一個教學[e16]

06-11 11:52

狐尾貓@キツネコ
謝謝雪雪喔~ (???)

主人:
資料庫其實是相當方便的工具,可以儲存許多各式各樣的資料,並且透過查詢語法精準的找出當下想要的資料。

我們會盡快出下一篇教學的,感謝雪的期待![e16]

我已經被BUG解決掉了...... \|/06-13 21:30
井爵
太厲害了,雖然上大學的時候有接觸程式語言,但是學得霧煞煞囧rz

辛苦夜雨和狐尾貓了,有了這些專業知識,進行植物的培養應該會很順利吧?@@

06-11 13:23

狐尾貓@キツネコ
謝謝井爵喔~ (???)
程式語言感覺真的不簡單呢~ > <
要孰悉語法熟記函數名稱......
然後還有大量的英文...... _(′?`」 ∠)_ ((暈

夜雨和主人也都辛苦了呢~ (*′?`*)
對喵~據說這是可以讓某些工作自動運行的系統呢~ (? ω ?)


夜雨:
  嗨嗨!井爵大安安!

  舉例來說的話,就是在資料庫的植物資料表中,存入所有植物生長所需的環境參數,溫度、濕度......之類的。

  接下來,我們的感測器也會將測量到的溫度、濕度......存入監控的資料表中。這時,資料庫中就擁有『最適溫度』與『當前溫度』這樣兩個資料了。

  接下來,只要透過SQL語法進行條件判斷:
    如果 『當前溫度』 小於 『最適溫度』
      則 開啟暖爐
    否則如果 『當前溫度』 大於 『最適溫度』
      則 開啟風扇
    否則
      關閉溫控裝置

  類似這樣,如此一來植物的培養,確實會變得相當順利喲~?06-11 23:21
胡地
看起來好像有點複雜XD
對於不是本科系的我來說有種無字天書的感覺

06-11 22:11

狐尾貓@キツネコ
謝謝胡地喔~ (???)
對啊~感覺好複雜喵~ > <

主人:
如果胡地大大有興趣的話,也許可以從基礎了解看看。06-13 21:31
愛德莉雅.萊茵斯提爾
夜雨好厲害。(*′ ?`)

06-13 08:09

狐尾貓@キツネコ
謝謝愛德莉雅喔~ (???)
夜雨超超超厲害的喵~~~ (〃?〃)06-13 21:31
貓貓風 ?●ω●?
[e19]

12-25 23:11

我要留言提醒:您尚未登入,請先登入再留言

28喜歡★kitsuneoneko 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【塗鴉】天才化驗師... 後一篇:【賀圖】路貓5000GP...


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

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