本篇文章作為第二週的第二篇,
我們本週將用我們比較熟悉的 Excel ,來說明對照資料庫的角色。
--------系列簡介--------
網站系統可說是現在最多學子與新人想要入門的一個領域,
這個原本屬於新興的領域,這幾年來也累積許多年的知識與 pattern ,
在有限的環境(stateless)與有限的伺服器端、瀏覽器資源下,
成為許多人進入程式的一塊入門鐵板(?)。
這個系列希望能夠就網站系統設計幾個門檻著手,
這是設定給初心者作為學習,給同好們作為回顧,
重新認識有關網站系統的每個環節。
這篇開始我們要慢慢進入資料庫的思維,
因為本系列原本就是設定給完全不懂得出學者看的入門指南,
所以我會假設您完全不懂 Database 。
那對於完全不懂 Database 的讀者,
直接說明什麼是 SQL ,好像不是那麼理想對吧?
在此筆者想先回頭說明「資料」(data),到底是怎麼一回事。
首先,有幾個原則:
* 資料是有單位的,不管是一份、一個、一筆,資料一定是有單位的。
* 資料是可能有複合特性的,也就是一筆資料裡面可能會不同資料,
比方說,時間這個資料裡面可能又可以細分為日期、小時、分、秒等子細節。
個人資料裡面,也可能再分出姓名、地址、電話等。
* 資料是定義出來的,隨著人給予他的不同意義,一樣的資料可以有不同意義。
* 資料並不侷限於特定形式,像是摩斯電碼的長短符號也可以作為資料的載體。
(前提是您看得懂)
OK 上面的東西相信應該足夠把大家弄迷糊了,(喂)
我們最常接觸到的資料是什麼呢?
大概是散文或文章之類的文字資料,
像是 blog 、新聞、BBS 文章、Facebook 訊息等等,
幾乎都是一筆一筆的文字資料,這是比較偏給人閱讀的資料。
基本上單就文字資料是沒有辦法作什麼的,所以我們就先暫且跳過。
如果是用來作為統計資料或是統整資料,
一般大概就是使用 excel (spreadsheet) 作為輔助,
所以就決定是您啦,Excel ,這就是我們今天的主角。XD
上面說得東西太抽象了,我們得舉個更切實的例子,
像底下這個艱辛的民生問題,台北居、大不易。XD
舉例如果我們將每天的收入按照項目整理起來,
就可以變成很有用的記帳本,提醒我們每天的收入與支出。
在這裡我們必須要就資料的本質繼續說明,
我們每天每次消費幾乎都會拿到發票,每個支出我們也都有印象,
但是如果我們不去整理這些資料,那這些東西對我們而言就只是無意義的雜訊。
資料必須有目的的去蒐集與整理歸檔才會變成資料。
另外即使您整理與蒐集了,還得進行細部的使用,
像是雖然紀錄了這些資料,但不閱讀這些資料、瞭解資料的細節,
那他就會跟一年一度的健康檢查一樣,只看是紅字或綠字不見得真的有幫助。
這裡提供另一個使用 excel 整理資料的例子:
到目前為止,應該都還算是很無聊而愚蠢的資料概論。XD
首先我們觀察以上兩個資料,我們會發現,這些資料有幾個特性:
1.都有一筆以上
2.可以清楚的定義出欄位
3.每一行彼此的差異性在這個欄位底下並不會太大
這並不是巧合,因為通常會需要紀錄的資料,
大多是超過一筆的,而且資料本身就會有不斷增長或減少的趨勢。
資料會隨著環境的變化(通常是時間造成的影響),
而不斷的增加資料或減少資料,所以資料本身是活的。
另外因為我們要分析這些資料,所以我們會將資料分類,
將資料分類的過程,就是我們稱之為一般化 (generalize ) 的過程。
像是將多樣化的人類,簡單的分為雄性跟雌性或將以年齡區分,
取代將複雜的母體進行分析,就是一般化的過程。
將複雜的人類特徵,簡化為以生日、性別、身份證字號、姓名、Email 作為管理上的識別,
也是一種一般化的作法。
將複雜的交易行為,簡化成支出(付出金錢)與收入(收回金錢),
也是一種針對我們最在意的資料(現金)進行一般化的過程。
一般化的過程與對象,會隨著不同的需求而有所不同;並沒有絕對的是非。
資料的邏輯很單純,簡言之:
具有相同特徵的資料會被放在一起,反之則分開。,
我們花了這麼多篇幅,要說明的是,
為什麼很容易在沒有約定的情況下,就很自然的變成以表格組織資料。
因為這是一種二維的資料模型,
我們可以用定義一列中每個欄位的資料與內容(meta-data),再用每一行來存放這些資料,
就可以一次達成對資料的分類與儲存的效果,而這種效果又非常有利於人來讀取資料。
觀念派一向不是筆者的喜好,
而且從實戰上才能夠瞭解操作的真諦啊,
所以接下來我們還是直接進行資料的實戰吧。XDDDD
首先假設我們今天要作一個留言板,那我們假設程式就是我們自己,
朋友對我們說話,我們就紀錄到留言板資料裡面,
我們自己想說的話,也手動紀錄到留言板資料裡面。
底下的操作,只要您是個正常會用 Excel 的人應該都可以進行。
不需要先學會什麼資料庫,關聯式資料庫或什麼的,
統統不用,我們只是在用 excel 進行資料的操作。
我們今天該怎麼進行資料的存放呢?
首先,我們要先定義「留言」這件事情我們需要的資料。
留言我們當然要有留言內容這個欄位囉,
接著我們希望知道這句話是誰說得,所以我們會有作者欄位,
最後我們希望知道留言的時間以利日後追蹤,所以我們會有留言時間欄位。
所以我們就可以畫出這麼樣一個表格。
接著我們要開始操作資料囉!
底下每段都是一個情境,跟對應的操作。
首先朋友「小王」在 2012/10/2 14:58 時對我們說:
「最近那個鐵人賽好像很紅捏,您有沒有去參加啊??」
我們新增了(insert)一筆資料,如下圖:
我們在 2012/10/2 15:00 回應說:
「有啊,我每天晚上下班後都在寫文章,哭哭。」
還是繼續新增(insert)一筆資料,如下圖:
朋友「小王」在 2012/10/2 15:05 時對我們說:
「是喔~~那加油啦」
還是繼續新增(insert)一筆資料,如下圖:
「老闆」在 2012/10/2 15:15 時對我們說:
「欸欸,專案後天要交啊~~記得要把東西準備好」
一樣新增(insert)一筆資料。
到這邊都很正常,資料看起來都很單純,
直到發生了以下這個意外:
「老闆」在 2012/10/2 15:20 時對我們說:
「我剛剛有跟您說專案明天要交吧??」
我們在 2012/10/2 15:25 時回應說:
「剛剛您是說後天啊啊啊」
「老闆」在 2012/10/2 15:30 時對我們說:
「哪有,我明明就是說明天,您記錯了!回去修正。」
此時資料紀錄:
呃,雖然有白紙黑字還能錯也是很怪,不過這種事情本來就是職場很常見的。(茶)
既然這樣我們就來修正一下剛剛的資料吧。
糟糕了,那剛剛的資料我到底要修正哪一筆呢?
讓我翻一翻,我想應該是**「2012/10/2 15:15」時由「老闆」留下的留言**吧,
我用這兩個條件去查詢找到「第五行」的資料並且將內容做了修正。
這是修正完的資料
正當我們總算把資料修改完以後:
「老闆」在 2012/10/2 15:40 時對我們說:
「我剛剛應該跟您說專案是今天晚上要交吧?」
我們在 2012/10/2 15:45 時回應說:
「剛剛您是說明天啊啊啊」
「老闆」在 2012/10/2 15:50 時對我們說:
「剛剛說的當我沒說過,XX 才是明天要交,您今天下班前把專案交出來」
好吧,既然老闆都這麼說了,
那我們只好找到名字是"老闆"的紀錄,把它全部刪掉了。QQ
筆者想從這個不太好笑的冷笑話(喂)表達的事情是,
1.IT 界很辛苦(喂喂喂)
2.建出一個表格其實很簡單,只要定義我們需要的資料就可以了。
3.新增/刪除資料就操作上也很簡單,如果您知道資料的用途。
4.對資料的操作通常需要伴隨著條件,如剛剛的操作中,以下標明粗體的部份:
* 「2012/10/2 15:15」時由「老闆」留下的留言
* 名字是"老闆"的紀錄
如果傳達錯誤的條件會導致更新錯誤的資料,雖然人很聰明不太會弄錯,
但是人可能會手滑刪到不該刪的資料,確實按照條件檢查是很重要得。
然後因為資料刪除時,您可能會擔心老闆明天又說希望能把資料找回來,
所以我們也會根據需求去進行「備份」(複製一份文件)的動作。
當然我們不可能每作一個動作就備份一次,所以會有備份的週期與保存週期。
@ 我只看到一個很愚蠢又簡單的 excel 表格,這跟資料庫有什麼關係?
嗯,基本上關聯式資料庫裡面有個東西叫做資料表,
資料表就是以行列的方式進行設計,
而原理跟這個這麼簡單的資料表並沒什麼兩樣。
用這個 excel 表的欄位格式,與我們剛剛的操作,
是可以真的做出一個留言板系統來模擬剛剛的情境,雖然說這樣不是非常正統。
@ 可是我聽說資料庫就是要設定一個很複雜的伺服器,然後還要 join 來 join 去,還有什麼 select 的?
資料庫伺服器是讓資料庫運作的方式,但本質上在我們寫程式操作時,
伺服器是按個紐讓他啟動,在程式裡面設定好帳號密碼以後,就可以不用管他了。
資料庫是由資料表構成的,每個資料表都是以像剛剛那樣簡單的二維表格進行操作。
select 是我們用來查詢資料表的方式,
因為程式不長眼,沒辦法用眼睛「看」資料表,
所以我們必須要「選」(select)出資料讓程式看,
join 則是多個資料表之間的關聯,
如果像是我們剛剛那麼簡單的留言板操作是用不到 join 的,
因為只有一個資料表就可以完成。
但正常操作的狀況下,是通常都會用到 join 的。
有關 join 的操作,明天的主題中我們會介紹到更多。
@ 既然只有這樣,為什麼我們不用純文字檔或 excel 讓程式操作就好,要用資料庫?
因為我們常常需要很多資料的分析,像是資料的關聯(明天會詳述),
或是統計資料,像是計算到底有多少人留言之類的,這些都需要運算引擎。
另外還有交易管理(如果大量資料新增時有一個資料失敗,可以將已經新增的資料取消新增。),
這些種種的優點讓我們會寧願選擇資料庫。
不過就筆者的寫作歷程而言,
最一開始時筆者的確是用純文字檔作為資料存放的媒介。
(因為當時還沒學到資料庫是什麼。XD)
以此撰寫簡易的日記、保齡球成績紀錄系統,也是有模有樣。
以檔案系統作為資料的存放,必須要自己實作一些資料管理的細節,
如果能確實達到目的,就實驗精神而言也不失為是一個選項。
(當然,真正拿來賺錢的東西要這樣搞,請先確定自己真的知道在幹麼。XD)
事實上, BBS (電子佈告欄)為求高效率的處理,
就以資料夾、檔案、索引檔案的方式,來存放看板、每篇文章與看板文章列表,
所以才能用非常基本的機器及非常快得反應效率,來承載這麼多同時上線的人數。
資料庫是當前儲存資料的一種主流方式,但是兵貴精神而非工具,
瞭解資料的儲存與分析的細節,才能更適當地選用需要的工具。
之所以拿 Excel 作為資料庫入門的範例主要的原因有幾個,
一個是他是使用者除了資料庫以外,最常看到表格結構的地方。
另一個就是 Excel 的介面相當友善且功能強大,跟資料庫有某個程度上的相近。
事實上筆者就有認識一個強者前輩實作出以 Excel 為介面的資料服務,
稱之為 Ragic ,也歡迎大家去玩一玩。
http://www.ragic.com/intl/zh-TW/home
今天的介紹主要是單一資料表的操作,明天的講題將接續今天的主軸,
談論多個資料表與複雜操作下的情境,敬請期待。:)
我推薦給,最近要交接tiptop水晶報表的新人,
剛從網管切換角色,調到我們課上(目前還算兩邊的事都要做),
職場非教育單位,員工非專業教師,很難有系統的講解,以交接事項有講到為主。
直接切入sql,也許太硬了些,而資料庫又不知從何說起,
這樣的文章寫法,比我亂講半天好太多,又誤了雙方的時間,也達不到交接的進度。
繼續加油。