網際網路與資料庫的對話錄
[ 目錄 ] / [ 本節目錄 ] [ 上一篇 ] [ 下一篇 ]


第五章、資料庫的歷史演進

陳尚寬

2002/06/18


第一節、資料架構的發展

最近小君任職的山水貿易公司要進行作業流程全面電腦化與標準化,所有公司內部的資料、文件與各式各樣的資訊經過整理與分類後均要儲存到公司新建置的電腦資料庫管理系統中,她雖然在學生時代有學過一些電腦語言與系統操作,有那麼一滴點兒的電腦基本概念,但還是聽不太懂資訊部門的同事們所談論的東東。因此,她特地利用這個週末來請教大學死黨裡電腦最在行的小博,請「電腦高手」小博告訴她一些關於「資料庫」的基本概念。

一見面,小君就握著小博的雙手,眼神十分誠懇,且語氣萬分輕柔地對小博說:『小博哥哥,我們公司最近要建立一套資料庫管理系統,可是妳也知道,我對資料庫真的是一竅不通,但老闆又下達一份緊急命令,要我們所有資訊部門的員工都要有充份的瞭解,你可要救救我啊!哥哥。』

聽完小君連珠砲似的求救與撒嬌,小博一臉恍然大悟、夢醒時分的模樣:「難怪喔,我才說嘛,你怎麼會這個週末不跟其他同學一起去Pub『嘿皮』,而要來這裡找我哩,原來是上面有事交辦喔。嘿嘿嘿…我說得對不對啊?」

被小博一語道中,還真是有點兒不好意思,小君只好拉長了聲音,繼續撒嬌下去:「唉唷,哥哥,你就別虧我了嘛,ㄣ…好心幫我個忙吧!ㄣ…你一定要幫我這個忙喔…好不好,哥哥…」

小博實在受不了小君這種又軟又綿的聲音,如果再這樣聽她『爹』下去,他待會鐵定發狂的,於是趕快一本正經地說:「平常叫妳多唸點書,妳就偏不愛唸,好吧,算我從學生時代開始就欠妳的債。讓我一個觀念一個觀念告訴妳吧。」

小博才話一說完,小君的眼神就突然發亮起來,她知道自己有救了,星期一去上班時,不必再提心吊膽被主管逮到了,於是化悲憤為「喜悅」,笑逐顏開地說:「我就知道小博哥哥對我最好了,是不是啊?哥哥…你最好了。」

小博眼神略帶點嚴肅,但嘴角邊已經揚起一個小小的微笑,他把一雙大手掌平放在小君的頭上,狀似要拍打小君:「哼,少來了!對了,妳以前在學校不是有選修過一門Basic程式設計的電腦課程嗎?」

小君裝出一副頭被用力槌後的痛苦樣子,邊摸頭邊像個古靈精怪似地轉動著眼睛回答:「有啊,有啊,哈哈,我想到了,還是你幫我惡補後才低空『趴司』的呢,我的恩師哥哥,對不對啊?」

小博擺出此生孺子可教也的嚴肅模樣,一副老氣橫秋地說:「算為師的沒有白教妳。好啦,言歸正傳,在講『資料庫』之前,我想先跟你談論一下『資料架構』的整個發展過程。妳準備好了嗎?我的大小姐。」

小君皺了一下眉頭,心想又要話說從前了,這下子整個下午都要耗在這件事情上面,為了不浪費大好的光陰,於是趕緊回答:「讓我猜,是不是因為資料架構是資料庫的基礎啊?」

小博完全沒有看到小君剛剛頑皮淘氣的動作,只自顧自地點點頭,很滿意地說:「很好,妳總算有點兒得到我的真傳了,我剛剛之所以會提到程式設計,是因為我接下來要以寫程式的角度來說明資料架構的幾個種類,你還記得學生時代你自己寫的第一個程式嗎?」

小君不加思索,很快地回答:「記得好像是要我們撰寫可以在螢幕上印出『HelloWorld』之類的程式吧。」

小博看了小君一眼:「沒錯,大部分的人學習程式語言,第一個程式就是練習撰寫出這個要求,你現在應該不會再寫這種程式了吧?」

小君睜大眼睛,一邊吐舌頭,一邊擠眉歪鼻扮鬼臉說:「那當然囉,像這樣子的寫法,每換一個句子,或者換個運算式,就要重新編譯一次後程式才能夠再次執行,真的是很麻煩ㄟ,本姑娘我早就不用這種寫程式的風格了…」

不等小君說完,小博立即一面鼓掌,一面接下話:「不錯嘛!妳越來越像個小小電腦專家了,其實我要說的重點是—像這樣的資料架構,程式與資料並未充份地完全分開,就是早期的『無綱要架構』模式。」

小君用手托著下巴,眼珠子往上吊,一副若有所思的樣子,想了好一會兒後才回過神地對著小博說:「嗯,是這樣子沒錯啊,我也記得以前在課堂上老師好像也曾經提過這件事,不過接下來呢?快點說嘛!別慢吞吞了。」

嗯,美女就是美女,小博發現就算是發呆,小君發呆的樣子都比許多女生要好看得多,他繼續說:「接下來,當妳的程式功力有一點進步後,妳應該會察覺到程式與資料分開處理是比較好的一種程式撰寫方式了。對不對?」

小君非常同意小博的說法,還一邊用力地點著頭一邊大聲地回答:「那是當然的囉,師父哥哥。」

看著小君俏皮的模樣,小博愈說愈來勁:「嗯,這也就是資料庫領域中所謂的『單一的綱要架構』模式了,啊哈,我好像忘了先告訴你甚麼是『綱要』了。」

小君雙手撐起臉頰,擺出一副正經八百,準備洗耳恭聽的樣子:「對啊,我還正想問妳蝦米是『綱要』呢,哥哥。」

小博被小君逗到發笑,好一會兒後才不急不徐地表示:「所謂的『綱要』就是『資料結構』及『定義』。就像我們在撰寫程式時會在程式裡宣告變數或型態,是一樣的道理。」

小博的話才稍一停頓,小君馬上轉了一下眼睛,像個精靈似地迅速突擊:「那麼…『陣列』或『結構』也可以算是一種『綱要』囉?對不對?」

小博伸直右手,舉出大姆指,比了一個『棒』的手勢,順帶點點頭且微笑地說:「嗯,不錯,很有概念喔,讓我再繼續說下去,妳在公司應該常有機會看到一些比較有規模的程式吧?」

小君緊閉著嘴巴,很無奈且表情超悲哀地點頭表示:「對啊,那些程式又臭又長又難懂,長到本小姐都不想看囉,不過我大概知道,現在大部分的程式設計人員好像都對資料的格式與結構不太感興趣,只在乎資料是不是能夠符合程式本身的要求而已。不過我猜是現在的人都太忙碌了,連寫程式都希望越簡單越好,像本小姐就是一個活生生的例子。」

小博拍拍小君的肩牓:「妳說的沒錯,因為現在的程式越來越複雜,功能也越來越多,如果說,樣樣都需從基礎開始做起,豈不是太浪費每個人的時間。而且現在是以使用者便利為最終導向來研發各種程式或系統,所以,給使用者看的資料格式,通常是與實際電腦在處理的資料格式會有所不同,因此,很自然地就產生了兩層式的綱要架構,來符合這樣的應用。」

小君忽然間覺得自己有點一個頭兩個大,輕輕地用手晃了晃腦袋瓜後,又停頓了一下子,才把雙手從頭上放下來,並有氣無力地問道:「兩層式的綱要架構?ㄟ,有點複雜呢,不過還可以理解,還有別的嗎?」

原本一直站著和小君說話的小博趕緊從旁邊拉了一張椅子放在小君旁邊並坐下:「ㄟ,妳可是問到重點了,底下的資料架構就是現今大部份的資料庫系統所使用的資料架構了,要注意聽了喔。」

聽到小博這麼說,小君不甘示弱,馬上從背包裡拿出事先準備好一本厚厚的筆記本,寫了幾個字後才抬頭俏皮地笑著說:「這是一定要的啦,師父哥哥教的東西怎能不洗耳恭聽呢,不僅如此,我還要一邊聽一邊努力寫筆記咧!」

小博有點得意地抬起頭露出那稍微厚道的雙下巴,並裝出一副倚老賣老的模樣,緩緩地說:「乖…嗯,接下來嘛,我要介紹的就是『ANSI/SPARC』架構了,它總共分成了三個綱要,第一層也就是『外部層』,是使用者眼中所看到的資料庫系統。」

為了深入瞭解小博說的東東,小君在筆記本上面照著小博所說的三個綱要畫起架構圖來:「ㄟ,怎麼又多出了一層啊,那第二層是什麼呢?」

小博指著小君正在畫的架構圖,手指邊繞圓圈邊說:「第二層就是資料庫設計者所看到的部分囉,在這一層中,資料庫系統是利用表格的方式呈現給使用這一層的資料庫設計者。」

小君似懂非懂地在架構圖上比了一下,抬頭問:「使用者看到的『東東』跟資料庫設計者看到的『西西』,怎麼好像都蠻像的。」

為了不讓小君有所誤解,小博急忙著解釋:「雖然它們都屬於兩層式綱要架構的上層綱要,但彼此間還是有些不一樣的啦。」

好像老師考學生似地,小君用一副又認真又俏皮的語氣問道:「說,快說,那裡不一樣呢?快點說!」

被小君突然這樣子一逼問,小博實在是又好氣又好笑地回答:「好好好,簡單的說,使用者看到的是一種視覺化後的呈現,像表單(form)或概觀(view)等比較親和的使用者介面。」

「ㄡㄡ…我大概瞭解了,那麼第三層是不是位於這兩層綱要架構的下層啊?」小君一邊講一邊在筆記本上原來未完成的架構圖畫出第三層的位置。

小博對著小君豎起了大拇指,稍稍提高音調說:「沒錯,正是如此!經由這樣的分層設計,會讓資料庫系統更容易為人們所使用,這也就是妳們老闆開始想要利用資料庫系統來管理公司資料或資訊的最主要原因囉。」

「原來是這樣的『碗糕』啊。」聽到這裡,小君心中暗竊高興,認為這趟鐵定沒有白來了,能夠認識這個朋友實在是太棒了,凡是電腦領域的各種疑難雜症,來請他幫忙解決準錯不了,保證藥到病除,馬上讓你「葡葡跳(請用台語發音)」。

第二節、資料處理的演進

小君翻了一下筆記本,找出預先準備好要來請教小博的一些問題,但找了老半天怎麼找就是都找不到抄在那裡,最後只好放棄不找了,只見小君闔上筆記本問道:「過去我們公司使用的報表,或是一些人事資料都是用紙張來存檔,紙張放久了會變黃、找起來又慢又麻煩、而且一間文件室都快不夠用來存放這些資料了呢。」

小博頗有同感地點頭示意:「對啊,這就是早期的人工檔案的處理方法,而且這樣的資料會因為人為的不當使用而損毀或遺失,這種方法對公司而言可是相當的危險呢。」

聽到「電腦專家」小博附和自己的想法,小君的語調也不禁提高了幾成:「我也是這麼覺得耶,而且我也常私下為老闆擔心,如果哪一天這些資料不見了,他該怎麼辦。」

小博差點笑場,因為小君說話時的表情實在是太正經了,好像她的老闆就站在旁邊似的。小博趕緊拍拍小君的肩牓,微笑地說:「妳還蠻有良心的嘛。妳的老闆真的沒有白請妳。」

小君一面伸長手臂,一面墊高腳跟,也回拍了小博的肩牓數下,同樣微笑地說:「當然囉,我是公司的優良員工嘛。」

不想再這麼繼續打屁下去,浪費雙方寶貴的時間,於是小博言歸正傳,轉回原來談論的話題:「對了,電腦已經流行一二十年了,難道妳們公司都沒有任何資料是使用電腦儲存起來的嗎?例如存放在磁片、硬碟或光碟片裡啊!」

沒想到小博一個簡單的問題卻輕易地勾起小君平日千抱怨萬抱怨的事,只聽到小君閃出一副十分哀怨的聲音回答:「當然有啊,不過資料都是每個部門各打各的,要整合起來還實在是不太容易呢,我們常常為了校對彼此輸出的資料報表花了好多不必要的時間,甚至被迫在週末或假日加班呢,害我都沒有時間跟我的『阿娜答』出去玩。要是我日後變成『老赤女』沒結婚,一定是公司害我的啦!」

小博側斜著頭,將眼睛瞇成一條線,並擺出一副打死他也不相信小君會嫁不出去的模樣。他一邊猛搖頭一邊說:「不要成天只想著要出去玩嘛。不過話說回來,工作講求效率是絕對正確的,今後的工作量只會越來越多,可不能再用以前的老方法來解決事情了。」

小博認真的語氣讓小君有點不好意思,趕緊亮出「君派」的絕門招式—「撒嬌大法」,保證招招見效:「電腦大師哥哥,你有甚麼好方法可以解決這款的問題嗎?嗯…快點教我嘛!嗯…快點嘛!嗯…」

和小君長久以來都是同班同學的小博,早就練成了一身「金鐘罩鐵布衫」的好功夫,而且對付「君派」的絕門武學—「撒嬌大法」特別有效。只見小博一本正經,絲毫不為所動地回答:「當然有啊,首先我們先要把檔案當成『基本處理單元』的觀念從心裡面移除,已經移除了嗎?我的大小姐?」

為了力求逼真,小君將頭用力地晃呀晃好幾下後,才有氣無力緩緩地答道:「嗯,我也覺得把檔案當成『基本處理單元』實在是很不方便,因為每一種檔案的格式都不太一樣,實在是很難用同一種方法來統一處理,不過還有比檔案更小更基本的處理單元嗎?」

小博很滿意小君的反應與回答,他一面伸出右手,舉直大姆指,比出一個「棒」的手勢,一面回答:「當然有囉,我們可以將檔案再細分為一筆一筆的記錄啊。」

就在小博剛說完上半段,準備接著說下半段的時候,小君突然插進來搶著說:「讓我插個嘴,就像醫院裡面每一個病人的就診記錄嗎?」

為了讓小君對資料庫的各種相關概念產生興趣,小博毫不吝嗇地誇讚她:「孺子可教也,懂得舉一反三,看來真是有學習電腦的天份啊!我繼續說下去喔,資料庫管理系統就是以記錄為基本單元來處理的。」

對小君而言,能夠被電腦專家小博稱讚有學習電腦的天份,實在是一件超級很「爽快」的事,只見小君馬上使出渾身解數,更加賣力地「博命」演出:「讓我想想啦…如果是以記錄為基本單元,這樣處理資料就可以依照同一種格式,就算資料位於不同檔案也可以很容易處理了,喔ㄡ…原來如此啊。」

俗話說得好─「打鐵要趁熱」,對小君學習資料庫系統的過程而言,也是如此。只見小博又再次對小君用力地比出一個「棒」的手勢(不知道比久了,邊際效用會不會遞減),且繼續問:「嗯…聰明,好聰明,不過妳可以再想像一下嗎,如果資料以記錄為單元的話,還能有哪些區分呢?」

連續被小博誇讚了幾次,小君反倒有點不好意思。正巧不知道該怎麼回應小博的這個問題,於是就順水推舟,四兩撥千金地答道:「我沒有你想像的那麼聰明啦,你快點說呀。」

於是小博起身走到沙發後面,從堆積如山的書籍裡挑出一本關於介紹資料庫概念的大部頭電腦書,很迅速地翻到其中的一頁並遞給小君:「第一種叫做階層式資料管理系統,就好像每個公司都有公司名稱、公司所在地、電話等等的資料。而公司下面有部門,每個部門又細分,有部門名稱、部門編號以及部門主管等等,而部門底下又有員工,員工的資料又可細分為員工名字、員工編號、員工薪資等等。」

小君一邊聽小博講解,一邊對照著書上詳細的解釋,過了數分鐘後兩顆眼球的「聚焦點」始離開那本大部頭書,重新回到小博的身上:「也就是說這是一個樹狀的結構,上下層彼此間具有父子的鏈結關係囉。」

為了讓小君有更深刻的瞭解,小博打算進一步地解釋:「是的,這種父子一對多的關係,就是早期所採用的資料庫架構,但現在的組織架構越來越複雜,一對多的關係已經無法應付所有的情況了…」

小君實在是有認真聽沒有完全懂,連忙打斷小博說到一半的話,並問道:「嗯…是蠻抽象的,能不能舉個較具體的例子來聽聽呢?」

不需要等小君發問,小博自己也知道剛剛的解釋實在是太抽象、太模糊了。可是要怎樣舉例說明才會讓小君充份明白他想要表達的意思呢?左思右想了好一會兒,才終於找到一個範例可以說明這種情況,只見小博比手劃腳,身體姿勢配合著手勢,說得好不生動:「當然可以呀,舉例來說,一種商品可以由很多不同的製造商所製造銷售,及很多銷售商所銷售,而一個製造商或銷售商也可能同時製造或銷售多樣化的商品,再說得更白話一點,就像同樣都是包裝水,有『統一』的『麥飯石』、『味丹』的『多喝水』、以及『泰山』的『純水』等廠牌,而消費者可能在『7-11』、『萊爾富』或『全家』便利商店等地方買到,當然『統一』不只生產礦泉水而已,其他種類的飲料或年輕人愛吃的泡麵、零食等等也都有製造,『佳樂福』就更不用說了,賣的東西可是琳瑯滿目,堆積如山呢。」

聽完小博好不有趣的解釋後,小君覺得她真的懂了,只見她乘勝追擊,再接再厲地問:「那我現在瞭解你的意思了,不過這種繁複的情形要用甚麼樣的結構來解決呢?」

一口氣說了那麼多的話,小博覺得口乾舌燥,於是起身走進廚房,倒了二杯茶出來,其中一杯遞給小君,另一杯還來不及坐穩就咕嚕一聲地整口喝完了,望著手裡的空杯,小博意猶未竟地說:「為了處理這種情形,網路模式的資料庫管理系統就這樣被提出來了。」

小君知道小博從小到大就是一個「大水桶」,剛剛那杯水對他而言是沒有什麼用處的,於是連忙將手上的茶遞回給他,並示意小博先喝了再說:「蝦米?網路式?ㄟ,哥哥,可不可以說得再白(ㄅㄛˊ)一點啦!」

小博又是一口喝完小君遞來的那杯茶,然後才露出一臉好不滿足的模樣,並摸摸肚子,同時懶懶地說:「別急,別急,其實簡單的說,網路模式就是由各式各樣的鏈結所組成,任何兩個有關係的記錄就可以用一個鏈結來表示它們之間的關係,所以呢,網路模式的資料庫就可以表示多對多的關係囉。」

小君雙手托著下巴,吊白了眼珠子,像塊木頭似地對著窗外出神了好一會兒後才說:「ㄜㄜ,這樣我有點瞭解了,不過階層模式一樣也有鏈結啊,到底兩著之間有甚麼不一樣?」

小博看得出來,小君真得很用心聽他講解,為了不讓小君有入寶山卻空手而歸的感覺,他決定賣命演出、傾囊相授:「好問題,其實簡單來說,階層模式的資料庫管理系統只是網路模式資料管理系統的一個特例而已,這樣子妳懂嗎?」

只見小君一臉茅塞頓開的樣子,一邊捶著自己的腦袋瓜子一邊傻笑著說:「這樣我就懂了啦,反過來說,網路模式資料管理系統就是階層式資料庫管理系統的推廣嘛。我說得對不對,哥哥?」

小博將手交叉放在胸前,斜著頭對小君說:「對極了!」

就在小博要開口繼續說下去時,小君突然想到一個問題,於是打斷他的話頭,搶過去說:「可是資料與資料彼此間用鏈結連過來連過去,好像會很亂ㄟ,會不會有一些問題產生呢?」

其實小博也正好要繼續解釋這個問題,只是被小君搶了先問,不過藉機誇讚一下小君也是件好事:「不錯不錯,你能考慮到這一點,證明妳蠻有概念的嗎。」

小君雖然從剛才到現在已經連續被小博誇了好幾次,但還是很不習慣,只見她雙手抱拳,一再重複地說:「過獎過獎,過獎過獎。」

看到小君雙頰臉紅,小博覺得很有趣,一邊仔細欣賞小君害羞的模樣,一邊說:「沒錯,現今的資料庫管理系統已經不再使用指標為鏈結了。」

這是一個讓好奇寶寶想要追問的問題。果然不錯,只見小君滿臉好奇地問:「不用指標?那用甚麼呢?」

小博一字一字鄭重緩慢且字正腔圓地回答:「使用資料本身的值。」

小君瞪著小博身後整面空白的牆壁,努力思考小博的話,過了許久之後才突然地回答:「實在是一個很聰明的想法耶,這樣使用者或者程式設計師就不會再霧煞煞了。」

為了不要讓談話過於沉悶嚴肅,小博故意用有點不標(ㄅㄩ)準的台灣國語回答:「係地,係地,用這種方式來鏈結記錄,我們將它稱為關聯式資料庫管理系統。」

啊,什麼?又是一個讓好奇寶寶發問的大好時機,只見小君歪著頭問:「那泥(不標準的日語發音,意思為『為什麼』),為甚麼要取名叫關聯式啊?」

小博左右舉直雙手,伸了個大懶腰,並右手握拳輕捶了幾下頸背,然後才一邊左右轉頭放鬆頸部肌肉一邊說:「因為在這種資料庫管理系統中,我們是以包含了記錄集合的關聯表格為處理單元。這樣一來在使用者眼中處理的就只有表格而已,不是更有親和力嗎?」

看到小博伸懶腰,小君也跟著打了一個好長的哈欠:「說了這麼多,我有點好奇ㄟ,關聯式資料庫管理系統到底有甚麼優點啊?」

小博抬頭看著天花板,又瞄了一下小君身後的造景魚缸,才若有所思地回答:「說到關聯式資料庫管理系統的好處啊,首先,它是一種能夠便利於程式設計師與使用者二方溝通的系統,第二,當資料庫程式設計師在撰寫資料庫應用程式的時候,可以不必在意資料的實際儲存與存取方式,如此一來可以省下資料庫程式設計師相當多的開發時間喔。」

小君繼續追問:「還有呢?」

小博突然想到了小君先前提過的問題,於是半正經半開玩笑似地回答:「有啊,還有一點更重要,那就是在資料處理上,不再是一筆一筆慢慢地處理了,而是一次同時處理許多筆資料。工作時間當然也會跟著減少囉!這樣妳就有機會去和妳的『阿娜答』約會『嘿皮』了。」

聽完小博的話,小君如釋重負地笑著說:「係地,哥哥,這真是一個最重要的優點呀,這樣我就可以不用加班啦,耶!我的青春不再留白了。」


[ 目錄 ] / [ 本節目錄 ] [ 上一篇 ] [ 下一篇 ]


lake@mail.bamboo.hc.edu.tw