{%hackmd @wh91008/theme %} # Introduction - 資料庫 與 前後端 ###### tags: `GCP` `Firestore` `Python` [TOC] --- ## 前後端概念理解 對於製作一個網站或是App來說,「前端」與「後端」的初步概念顯示如下圖: ![](https://i.imgur.com/W6I9aqG.png) 最右側的軟體框架即是前端,而資料庫與伺服器為後端。 一般而言,不論是 Web 或是 App ,前端工程師會以頁面框架的部分製作操作介面或搭配動態的渲染效果,達到美化程式的部分。而後端工程師則是會擬定資料存儲與提取的架構與方式,並且撰寫程式背後較為複雜的運行原理。為了分散本機端運行的負擔與解決硬體規格的不足,會將資料的運算交由 伺服器/雲端伺服器 來做管理,達到良好的程式效能。 ### 軟體框架(Software Framework) 首先,根據 [維基百科](https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%A1%86%E6%9E%B6) 的說法,軟體框架(software framework),通常指的是「為了實現某個業界標準或完成特定基本任務的軟體組件規範,也指為了實現某個軟體組件規範時,提供規範所要求之基礎功能的軟體產品。」 軟體框架的功能就像「基礎設施」,根據「標準或軟體組建的規範」,提供並實現最為基礎的軟體架構和體系。以蓋房子來說,就像是有個規範好的模板讓你蓋出來的房子有良好的結構性,有方便的工具能讓你做得更快更輕鬆。不論是設計網頁或是製作App也都是一樣的道理,如果全部由自己從零開始撰寫程式一定相當費時,所以我們可以用別人寫好的 Framework 再加上一些調整來做出自己喜歡的樣子。 常見的軟體框架有:微軟的 .NET Framework、JavaScript 裡的 jQuery、Vue.js 與 Python 裡的 Django、Flask...等,而本文所要使用的 Flutter 也是屬於框架的一種。 Flutter框架是由 Google 所製作,使用的原生語言為 Dart ,它相對於一般的App開發套件而言,不但擁有更美觀的操作介面、更順暢的操作體驗,還具有跨越四端平台開發的優勢與趨勢性。 ### 資料庫(Database) 所謂的 「資料庫」簡單來說就是「電子化的資料櫃」,使用者用它來儲存電子化的資料或檔案,也可以對檔案中的資料執行新增、查詢、更新、刪除...等操作。除此之外,資料庫也常常會被做為「前端」與「後端」進行資料交換的場所。 目前來說,常見的資料庫可以分成: 1. **階層式資料庫**:樹狀結構, 將資料分門別類儲存在不同的階層下。 2. **關聯式資料庫**:目前使用上最為廣泛,主要以 2 維的矩陣來儲存資料 (可以說是將資料儲存在表格的欄、列之中), 而儲存在欄、列裡的資料必會有所 “關聯”, 所以這種儲存資料的方式才會稱為關聯式資料庫, 而儲存資料的表格則稱為"資料表"。 4. **物件導向式資料庫**:以物件導向的方式來設計資料庫, 包含物件的屬性、方法、類別、繼承等特性。(相對於自定義資料表間關聯的關聯式資料庫,在物件導向式資料庫中物件和物件之間的連繫, 是因其屬性而必然發生的) 前幾種資料庫中,常見用來撰寫資料庫的程式語言稱為「SQL」。SQL 全稱是 Structured Query Language,也就是「結構化查詢語言」,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯式資料庫系統。SQL語法雖然會因為各廠牌的資料庫軟體而有不一樣的變化,不過語法類型幾乎是大同小異。 除此之外,還有第4種常見的資料庫,稱為「NoSQL」。 NoSQL並非翻譯為No SQL(不是SQL),而是應該翻譯為 Not Only SQL(不只是SQL),對於 NoSQL 而言,除了資料的存儲外,它們還會額外追求更高的擴充性。 以本教程後續會教學的「Cloud Firestore」來說,這個資料庫本身並不像關聯式資料庫中有「資料表的概念」,而是以「文件夾」與「文件」的儲存方式來儲存我們匯進的資料,文件夾裡面除了文件還可再裝進文件夾,算是也結合了階層式資料庫的想法,不過更不同的地方是「它可以透過 Google 所提供的各種雲端服務,來達成更豐富的運用方式」。 ### 伺服器(Server) 「伺服器」的意義,就是要提供處理過的資訊,服務別人(Server for Service)。一般個人所使用的電腦,只需要服務一個使用者的需求就夠了,但是伺服器卻必須服務所有人,伺服器必須在或者很短的時間內,容納來自四面八方的工作要求,並且要馬上回覆結果、送出答案,這是一般個人電腦所做不到的。 因此,伺服器的最大特點,就是「運算能力非常強大」,在短時間內就要完成所有運算工作。 由於伺服器擁有強大的運算能力,我們可以用它來分散程式在 PC/手機端 運行的負擔,方法主要有兩種: 1. 將資料傳輸自實體伺服器,由伺服器運算好再回傳至本機端 2. 部署雲端伺服器,設定所需規格後代替實體伺服器做資料的運算再回傳至本機端 常見的雲端伺服器有 Amazon Web Service (AWS)、Microsoft Azure 、 IBM Bluemix 、 Google Cloud Platform (GCP)...等,而本篇後續將以 GCP 作為雲端伺服器的選擇。 ###### :book: 參考資料: ###### 1. http://spaces.isu.edu.tw/upload/19225/0/news/postfile_174.pdf ###### 2. https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93#%E9%9D%9E%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%88NoSQL%EF%BC%89 ###### 3. https://www.blueeyes.com.tw/knowledge_server.php ###### 4. https://www.fhl.net/main/mike/mike8.html