SQL Clearly Explained 3rd Edition – Jan L. Harrington

sqlclearlyexplained

學習架設網站,要一步步慢學,不要妄想一步登天。原本學完Ruby後,打算直接學寫RAILS,然後發現自已不懂SQL。沒有SQL的基本功夫,不能有效地架設網站,任何網站都要用database來儲存資料啊。說起database程式,很多年前我學過dBase III,在中學電腦科被迫學了一個學期。當年覺得學一個過時的軟件很浪費時間,想不到database程式設計的最基本慨念,廿幾年後會從封塵的記憶中找出來有用。

我挑選了好幾本學習SQL的書,思前想後到底用那一本好,最後決定用這本SQL Clearly Explained為主幹,再用兩本O’Reilly的書為輔助參考。很多SQL的書只會教某一個SQL server的應用,很容易見樹不見林,分不清到底那些是SQL語言本身,那些是某一個server的syntax。這本書從SQL標準入手,第一章不是教你安裝軟件,而是很有系統地講解relational database的理論。只要基本知識清楚明白,學syntax很簡單,可以邊用邊學,查document摸摸下就上手。那兩本O’Reilly的書,一本教SQLite,另一本教MySQL,兩大常用的database。那兩本書不是好的入門書,內容太著重講syntax,不過卻是十分有用的reference書。

51vowxhiiul learning_sql_2nd_ed

Relational database的理論,說難不難,說易不易,領悟到就一理通百理明。Database是什麼,不外乎一堆table。Table就好似Excel的spreadsheet咁,打橫打直一行行,每格就是一項資料。每一行有一格係primary key,用來look up那一行。一行之又可以有foriegn key,連結另外一個table的primary key,表明table與table之間行與行的關係,謂之relation是也。檢查搜尋database只有6個基本操作,所有都只是萬變不離其中。6個操作包括,filter行(WHERE)或filter列(SELECT),把兩組行的行加起來(UNION),找出相同的行(INTERSECT),找出不同的行(EXCEPT),而最重要的操作是JOIN,即係連結起primary key同foreign key既relation。

此書的第二部份教SQL Syntax,實習第一部份的SQL理論。這本書的另一個優點,是書中附帶現成的database,一間二手書店的存貨買賣資料,不似其他書只講空談syntax。我把書中的例子輸入了SQLite檔案,並附上各table的csv檔案,有興趣的朋友可以在此下載SQL Clearly Explained Sample Database。學習SQL的次序,最先學搜查,如何在database中找出你想要的資料,其次學如何更新資料,最後才學如何建立設計database的table。所以有一個現成的database,再跟著書中的不同應用例子,學搜查很方便,事半功部。更新資料的syntax很簡單,有很輔助function讓你可以寫少幾行code,最重要的慨念是ACID transaction,說穿了就是multi-threads的synchronization problem,只是改了個好聽的acronym。設計table那一章教CREATE的syntax,不過我想沒有人會用SQL去直接起table,不是有其他GUI工具更好用嗎。起一個有效率的table是門很高深的學問,入門書教syntax只是教了table design的皮毛。

餘下的第三部份和第四部份,我只是快速略讀。SQL本身是一個turing-complete的程式語言,第三部份教SQL寫一般程式的syntax,只是我不明白有什麼人會用,SQL的PROCEDURE和TRIGGER只是search filter的輔助工具,真正要做heavy lifting資料運算,為什麼不把資料讀出來後,用host功能更強大的programming langauge去process。第四部份教SQL中XML的功能和Object Relational Data Model,不過除了Oracle或Microsft那些商用級的server,SQLite和MySQL都不支援這些功能,不過要搜查更新XML,用DOM不是更方便嗎?我想不到有什麼理由,要把XML直接當數據儲存在database中,為什麼不先解讀了XML中的資料,再有系統地儲放入table中呢?Open Source的server中,只有PostgreSQL支援Object Relational Data Model,簡單來說就是把OOP中的object儲存在database中,懂OOP的人學Object Model很簡單。Object Relation就在table的一格內,可以儲存一個object,或array,set等等,原本table的一格只可以儲存一個數值。另外一行可以用pointer直接link去另一行度,比用foreign key更有效率,因為不用做search。

學完SQL,忽然引起我對database的興趣,暫時放下RAILS,(反正要等RAILS-5的新書出版,沒有理由走去學RAILS-4),決定先學其他No-SQL database,看看還有什麼其他儲存資料的其他方法,才決定網站該採用那種database最好。

維多利亞自由行(四) – Colwood海景民宿,昆蟲館摸蟲蟲

IMG_9868

最後一天行程,我們離開維多利亞市中心,前往西方三十分鐘車程的海邊小鎮Colwood,入住無敵海景的Birds of a Feather B&B。這間B&B不是很大,只有三個房間,坐落於Esquimalt Lagoon雀島自然保護區湖邊。房中備有望遠鏡,方便住客觀鳥,或者看對岸燈塔和海軍基地的景色。B&B有私家碼頭,碼頭盡頭放了兩張木椅,可以坐在湖水中賞鳥。B&B提供獨木舟和救生依借用,可以划出湖中親近雀鳥。可惜那天大風不能出海,我們只好在屋前湖畔的花園過了一個悠閒的下午,坐在鞦韆木椅上和阿仔讀故事書,躺在吊床上,吹著海風睡午覺。B&B還有露天海景hot-tub,可惜我忘記帶泳褲,無緣享受。

IMG_9867 湖(準確來說是礁)畔B&B

IMG_9888 睡吊床,看海景

IMG_9862 每間房也有望遠鏡

Esquimalt Lagoon的地理環境很獨特,幾萬年前原本只是一個海灣,但長年累月河流把浸積物沖入海灣,慢慢變成一道天然堤壩,把海灣隔開成了一個湖(準確來說是礁)。堤壩盡頭有一小缺口與大海相連,海水隨潮夕漲退湧入湖內,湖內鹹淡水交會,孕育很多豐富魚類,繼吸引覓食的季候鳥,成為鳥類的棲息處。堤壩向海那一邊是長沙灘,太平洋海水很冷,不太適合游泳,遊人多數是吹海風日光浴,也有小朋友在玩沙和放風箏。

IMG_9907 Esquimalt Lagoon沙灘

IMG_9908 雀鳥自然保護區

Colwood有兩大名勝古蹟,Fisgard Lighthouse和Hatley Castle。Fisgard燈塔是加拿大西岸最古老的燈塔,燈塔公園內還有二次大戰的海防炮臺,而燈塔內側的海港是加拿大海軍太平洋艦隊的基地。不過因為天雨關係,我們只好路過其門而不入。Hatley堡壘由十九世紀卑詩省首富兼省長Dunsmuir興建,與歐洲的古堡當然沒法相比,它可是加拿大唯一的蘇格蘭式堡壘,而且X-Men電影更在此取景拍攝,充當光頭教授的變種人基地。可惜我們去參觀的時間,正好撞正堡壘放午飯關門,堡壘外的花園當日亦被租用作婚宴場地關閉了,只好拍幾張相便繼續行程。

IMG_9901 加拿大西岸最古老的燈塔

IMG_9944 Hatley堡壘

IMG_9951 不開屏的孔雀

由於天雨關係,戶外活動的計劃被迫取消。原本我極努力迴避去看昆蟲館,看來無可避免,難逃一劫了。維多利亞的昆蟲館Bug Zoo,大慨是很多害怕昆蟲的人的惡夢。館內除了有三十多種珍貴奇異的昆蟲外,遊客還可以把昆蟲拿在手上,體驗觸摸昆蟲的感覺,想起都打冷震。昆蟲館地方比想像中細,只有兩個大廳,跟隨導賞員講解,看畢全部昆蟲,大約需一個小時。導賞員每種昆蟲都說故事,告訢參觀者不為人知的特性,如某甲蟲的爪很大力,可以打穿人的手指,又如雌性螳螂在交配時會把雄性吃掉,而雄性螳螂被咬掉頭後還可以努力交配直任務完成。

IMG_9976 昆蟲館

IMG_9980 巨型毛蜘蛛

IMG_9990 摸蟲蟲

若果只是聽故事就很沉悶,最有趣的部份當然是摸昆蟲。導賞員把昆蟲很小心從箱子拿出來,然後叫觀眾申出手板,把昆蟲放在手板上,又或者申出手指,輕 輕的摸昆蟲的甲殼。我發現小朋友很湧躍地去摸蟲,反而大人們則反應冷淡,不是出於害怕還是壓惡。我怕蟲,所以我沒有摸,阿仔也有摸毛毛蟲,反而老婆最大 膽,把巨型毛蛛蜘捧在手上。昆蟲館設有禮物店,除了有關昆蟲的書籍和益智玩具外,最吸引人想買就是昆蟲零食,蟲蟲波板糖,一盒盒不同味道的炸螞蟻等。買回去當然不是自己食,而是最佳的旅行手信,尤其是請公司同事吃,看看誰最大膽。

IMG_9976

IMG_0003 毛毛蟲鬍鬚

IMG_9997 蟲蟲糖

五天四夜維多利亞之旅暫告一段落,維多利亞的主要旅遊景點都去過了,下次再去維多利亞渡假,可以主攻溫哥華島的大自然生活了。

維多利亞自由行(三) – 在皇后酒店嘆下午茶,乘馬車漫遊市中心

IMG_9533

維多利亞除了必遊三寶外,其他的景點各花入各眼,時間充裕的可以看多些,沒有時間只好選擇來看。市中心有hop-on-hop-off旅遊巴總站,幾間巴士公司車身不同風格,但路線其實大同小異。自助旅遊循環巴士線在市中心上車,穿梭往來市內各主要景點,購了票可以全日任搭。每個景點喜歡停留多久就多久,看夠了便坐下一班巴士去另一個景點,不過始終不及自己駕車方便。

我們前往維多利亞的那個週未,正好舉行Northwest Deuce Days老爺車展,那是三年一度的車壇盛事,北美西岸最大型的同類活動。超過一千多輛老爺車,從加美各地前來參展,老爺車收藏家聚首一堂,交流車經收藏心得,星期日市中心還會封路巡遊,在街上開嘉年華會。街上泊滿不同年代的老爺車,每輛都細心打理如新一般,若果不是路上有新車行走,會以自己坐了時光機回到過去。因為露天車展會封路的關係,我們提早離開維多利亞,不然那天又迫又塞車,什麼地方都不用去。

IMG_9483 紅色雙層巴士

IMG_9427 老爺車展

皇后酒店是維多利亞的地標,加拿大其中一橦最歷史悠久的酒店。酒店建築是法式城堡設計,面向維多利亞港,很有古典氣派,當年英女皇曾經下榻。皇后酒店咖啡室的正宗維多利亞式下午茶很出名,每位茶費盛惠七十五加元,比吃頓豪華晚餐還貴,不過仍然大排長龍,一定要網上預早訂枱。我老婆小時候與父母遊維多利亞時吃過,她很懷緬當年吃下午茶的味道,於是我們一家便去喝下午茶當午餐,那三層蛋榚點心三明治,絕對可以食到飽飽。平常在溫哥華喝high-tea也要五十加元,皇后酒店的雖然價錢貴一半,但值得一試更高級的下午茶享受。茶譜的設計有別緻,除了文字說明外,還有茶葉的樣本看,不過看看茶葉就知杯茶好不好飲嗎?茶壼端出來,附上沙漏計時,讓客人準確計算最佳的泡茶時間。阿仔也有自己的花果茶(無咖啡因)和兩層點心,兒童餐價錢是大人的一半。坐在咖啡店大窗前,看著海景一邊喝茶一邊吃點心,很優悠地消磨二個小時。

IMG_9457 皇后酒店咖啡茶座

IMG_9460 茶譜

IMG_9470 飲茶

IMG_9474 三層下午茶美食塔

省議會大樓旁的街上停了很多馬車,遊客可以坐馬車看風景。在市中心海旁馬路繞個圈,十五分鐘要五十加元,坐遠一點有不同路線選擇,我們坐了四十五分鐘的路線,去看維多利亞北岸的燈塔公園。馬車司機穿得很師氣,乘客感覺像古代的貴族。她沿途充當導遊,介紹市內的街道景色,說些關於當地的小故事,如這橦屋的著名畫家的老家,那橦屋的主人有什麼歷史,這間教堂以前的市內第一間女子學校等等。原來維多利亞市中心的房子,有很多是法定古蹟,雖然依然是一般人的住宅,但必需要保持古式古香的外觀,不能隨便折御起新樓。我這麼大個人第一次坐馬車,馬蹄行走時格咯格咯聲響,在馬路上左搖右擺緩緩慢行,其他汽車見到馬車都要讓路,還有不少孩子向我們揮手。大慨小朋友天生喜歡動物,阿仔坐馬車十分開心,下車後還要和拉我們的馬Betty合照,結果我抱起他拍照時,隻馬低頭我的褲子,弄得我條褲一陣馬口水味。

IMG_9407 坐馬車

IMG_9566 這隻馬叫Betty

IMG_9556 名畫家Emily Carr的老家

這次旅程我們沒有特別挑選餐廳,行到邊肚餓便食到邊,除了去皇后酒店下午茶外,就只有這間Floyd’s Diner指定要吃。餐廳沒有得訂位,想食就要排隊,排隊時待應會請你飲咖啡,可以一邊排隊一邊飲。全日供應大件夾抵食的美式早餐,很典型美式菜單,各類蛋與早餐,漢堡,奶昔,薯條,家庭式餐廳的味道。最特別是菜單中的早晨全餐,非常大碟什麼也有,到埋單的時候,食客可以選擇玩擇銀仔,贏了早晨全餐免費,輸了要付雙倍價錢。

IMG_9667 著名的Floyd’s Diner

IMG_9668 大大碟全日早餐

維多利亞自由行(二) – 維多利亞三寶:植物公園,博物館,省議會

IMG_9286

去溫哥華島旅行,若不介意住得貴些少,住民宿Bed & Breakfast比住酒店更有風情。住酒店大多是千篇一律的沉悶房間,住B&B則可以體驗不同屋主的品味。當然若果去旅行,早出晚歸玩到盡,住宿只求一張床睡覺,住B&B便有點兒浪費了,住B&B一定要留些時間hea在B&B。在維多利亞我們入住Albion Manor B&B,地址在市中心西端,離市中心只有十五分鐘腳程,很方便不用駕車。它是一橦維多利亞式大屋,有九間房間出租。屋子四週是很漂亮的英式庭園,小橋流水,鮮花樹蔭,完全不覺得身在鬧市之中,彷如置身鄉郊田園。另外這間B&B的早餐十分出名,精心飪調豐富美味,有如fine dining般的早餐。高級餐廳通常只做午市晚市,普通餐廳的早餐又很行貨,很少機會食到高級早餐。

IMG_9392 位於市中心的Ablion Manor B&B

IMG_9611 B&B的庭園

IMG_9394 英式客廳

IMG_9398 美味的早餐

維多利亞有三寶:植物公園、博物館、省議會,基本上任何旅行團都一定包括的景點。我第一次來維多利亞,又怎能不去三寶打卡簽到呢。植物公園Butchart Gardens在維多利亞以北三十分鐘車程的Brendwood Bay,每次吸引超過百萬遊客參觀。園內分為不同主題的花園,有意大利花園,日本花園,玫瑰園,水池花園等。你問我植物公園有什麼好看,我真的答不上來,不外乎有好多好多花。我老婆就說那兒的花很漂亮,又很有心機研究什麼季節開什麼花,我想大慨女人天生比男人喜歡花。

IMG_9386 植物公園

IMG_9318 日式禪園

IMG_9331 清幽水池

IMG_9340 顏色鮮艷的花朵

植物公園除了賞花外,還有其他一些靜態活動。園內有座古董旋轉木馬,正確點來說不是木馬,而是各種不同的木動物,小朋友阿仔當然要玩了。我們去參觀的那天,剛好植物公園舉行露天音樂會,以花為伴的戶外舞台上,有好幾隊爵士樂隊表演,而遊人則隨便坐在草地上欣賞音樂。有些住在附近買了年票的公公婆婆,還帶了私家摺凳來坐。植物公園的餐廳十分出名,價錢亦不算很貴,在優雅的花園嘆下午茶,是旅遊書的精選推介。可惜我們錯過了時間,反正玩到晚餐時間,索性在植物公園食fine-dining。晚餐的菜單很有特色,每一道菜都以花為主題,採用食用花為烹調材料,其他餐廳很少機會吃到。

IMG_9253 旋轉木馬

IMG_9298 公園內的餐廳

IMG_9357 用鮮花做的菜式

卑詩皇家博物館是一間中型博物館,一個下午兩三個小時可以行完。博物館分三個展館,第一個展館是每定更新的主題展覽,這一期是冰河時期的長毛象,有一幅完整骸骨和冰封遺體的石化,還有不少模型和多媒體展出。原來古代的大笨象的鼻子很短,看起來似一隻長鼻的豬。第二個展館是卑詩省的自然生態,有很多動物標本,放在假樹林和海灘佈景之中,加上背景音效,有點置身大自然其中的感覺。第三個展館是卑詩省的歷史,從原住民開始講起,一路到英國殖民時代,直至加拿大立國。有很多從前原住民的長尋,西部拓荒者,採礦,起鐵路的生活情景,帶遊客回到過去認識歷史。博物館附屬的花園上有間鬼屋,是維多利亞最古老的建築物之一,相傳前屋主的鬼魂在二樓走廊出沒。日間鬼屋開放給遊客參觀,屋內擺設重現十九世紀的日常生活,不過二樓則遊人止步,相信不是因為猛鬼,應該只是為免麻煩。

IMG_9504 長毛象化石

IMG_9496 長毛象標本

IMG_9522 溫哥華船長的船發現號

省議會大樓在皇家博物館旁邊,正前方是市中心公園,面對維多利亞港,旅遊巴士停車拍團體照的指定地點。議會大樓開放給遊人參觀,不過老實說,沒有什麼好看,不過就是一橦英式的議會大樓。大樓大部份地方是政府辦公室謝絕參觀,可以看的只有側門大廳,到圓頂底下的大堂,若省議會當日沒有議程,還可以上隔著鐵柵看議事廳大堂。議會大樓沒有什麼展品,只有些掛畫和彩色玻璃,當年她出巡時來宣示主權用過的權杖。免費導遊每半小時出發,好似講故佬般加鹽加醋說歷史典故,那幅畫有什麼來頭,那塊玻璃是什麼人捐贈等等,我沒有什麼心機留神去聽,要看著阿仔不要四處亂走。

雖說三寶不能不到此一遊,植物公園很值得去,博物館見仁見智,視乎你是否愛看知識性的東西,至於省議會大樓很搵笨,在門口拍張照打卡就夠了。

IMG_9618 市中心公園

IMG_9437 省議會大樓

IMG_9634 議事廳

維多利亞自由行(一) – 海邊小鎮Sidney,蒸汽火車Duncan

IMG_9222

位於溫哥華島的維多利亞,一個充滿英國風情的小鎮,亦是卑詩省首府。它距離溫哥華只是一步之遙,只需個半小時渡輪加半小時車程,是夏天週未渡假放鬆的好去處。我住在溫哥華十多年,竟然從來沒有去過,去過溫哥華島幾次旅行,每次都經過維多利亞過門而不入,今年夏天終於有機會到此一遊。

每次去溫哥華島,坐汽車渡輪總是特別興奮,把車子駛進船倉甲板上,好像一隻大海怪把車子吞進肚子裏。汽車搭BC Ferries,一定要上網訂位,雖然每隻船可容納三百多架汽車,但若繁忙時段沒有預約留位,隨時要等兩至三班船才有排到隊上船,每小時只開一班船,便要在碼頭乾等兩三小時,旅程被延誤多無癮。今次搭船我有預約兼早到,我的車子有幸坐船頭第一排,從擋風玻璃向前看,海浪隨船前進迎面而來,感覺自已好像在開船一樣,很有趣。

IMG_9197 汽車渡輪

IMG_9220 汽車甲板

渡輪不是郵輪,隨了快餐店和咖啡店外,沒有什麼特別娛樂設施,不過上甲板吹海風看風景,看溫哥華海灣上眾多小島,與對岸開來的渡輪嗚汽笛打招乎,偶然追著渡輪的海豚,個半小時的船程毫不沉悶。上次坐渡輪時阿仔還膽小,不敢出甲板行怕跌落海,今天他膽子大了,拉著我圍繞甲板走。夏天卑討省郊野公園部門,在渡輪上安排導遊,向小朋友介紹島上的野生動物,有個大姐姐在說故事,假裝划船到不同海灘,遇上毛公仔扮的野生動物,阿仔看得十分開心。

IMG_9207 吹海風,看風景

IMG_9692 說故事介紹野生動物

渡輪碼頭位於Swartz Bay,附近有一個海邊小鎮Sidney,下船後到此稍停留休息吃個午餐。在海邊的遊艇會旁有幾間餐廳,我們隨便選擇一間有露天茶座進去。食物是很大路的鬼佬西餐,沒有什麼特別,不過吹著海風,曬著太陽,看著海上的遊艇,倒十分舒服寫意。吃完午飯可以參觀Sidney僅有的兩個景點,遊艇會旁有間小型小族館,與溫哥華水族館是蚊比與牛比,不過阿仔也玩一個小時。另外Sidney市中心大街有個Book Town,其實只是六間書店,一個小朋友專門書店,一間賣新書的大書店,四間不同類型的二手書店。其中一間二手書店專門賣軍事和歷史類書藉,我進去溜灠大開眼界,發掘很多有趣的題材。可惜家中已很多本書等著看,只好忍手不買新書,舊(書)債未清,新(書)債免問。

IMG_9227 遊艇會

IMG_9707 停車場停了一輔坦克車

第一天晚上我們住在維多利亞以北一小時車程的Duncan市,住宿沒有什麼特別,上priceline訂Ramada有折扣。專程前來Duncan,只是為了參觀BC Forest Discovery Centre,那兒每逢週未,便會出動鎮館之寶古董蒸汽火車頭,載遊客沿鐵道暢遊博物館。這座博物館原的展品本是林木業大享Gerry Wellburn的私人真藏,他的嗜好很獨特,喜歡收集古舊的林木業重型機械,從火車到貨車,巨型機械臂樹鋸,工人的流動房間等。他晚年時捐出珍藏,成立這間林木業博物館,讓公眾認識林木業的歷史。上兩個世紀砍樹很破壞生態環境,卑詩省很多原始森林便這樣消失了。現代砍樹有點似種菜,比較環保,分別只是要十幾年才收成。砍一棵樹製成原木的過程很有趣,不同的木材有不同的切割方法,這些冷知識很有教育意義。

IMG_9739 最古老的燒木火車頭

IMG_9747 古董蒸汽火車頭

IMG_9754 蒸汽貨車

IMG_9826 戶外火車頭展品

平時去火車博物館,蒸汽火車頭多是不能動的展品,還能運作良好的蒸汽火車頭比較罕見,據我所知全卑詩省只有三台能動的蒸汽火車頭。阿仔十分喜歡Thomas,平時帶他搭普通火車已經十分開心,今次乘坐與Thomas差不多樣子的蒸汽火車,他出發前便已經萬分期待,去完旅行更加念念不忘,說坐蒸汽火車是他最愛的節目。坐蒸汽火車是一件很浪漫的事,從煙囪噴出的水蒸氣,讓人置身霧中。從水箱汽笛發出的嗚嗚聲,比起柴油或電動火車的假汽笛聲,更柔和更有層次質感。坐蒸汽火車每半小時開一班,環繞博物館一週,其中一段鐵道建築在湖上,火車忽然從樹林走出水面,看著藍天綠地清水,那一刻很心曠神怡。鐵道只有兩個車站,在博物館大樓上車,可以坐去湖邊的公園下車,在鐵道主題的小朋友遊樂場玩半小時,然後坐下一班火車回去,或者沿著樹林中的小征步行回去亦不是很遠。林木博物館可以消磨一個上午,在Duncan吃過午餐後,便南下前往維多利亞。

IMG_9829 今年一百零五的火車頭Samson

IMG_9787 乘坐蒸汽火車

IMG_9813 火車頭到水塔喝水