2010/05/30

[MySQL] Using XML to simulate field changeable data

資料欄位的不確定性一向是資料庫設計時的痛,但也是在評估架構大小時極為有趣的部份。雖然軟體界的先驅,孜孜不倦地要求著我們一定要先做好需求分析,之後再進行架構設計與程式的實作,然而我們永遠都避免不了程式上線後,使用者提出新增或調整輸入內容的需求,而且更糟的是,使用者甚至願意捧著一大筆錢請你實踐這個功能,讓你老闆無法為公司拒絕這樣誘人的條件。

或者試想這樣的情況,你現在正在設計一個API提供使用者上傳資料,雖然第一版API提供了一種型態三個變數用以上傳,但是經過半個月之後,你發現必須要開發第二版API,多新增一個型態含四個變數做處理,而原本的變數,因為前端UI功能增加,必須多增添兩個變數以滿足要求。

一般說來,最直觀的作法,就是將第一版API對應的資料表新增兩個欄位供新功能使用,而過去的所有已輸入資料通通設定為null;而第二版API則另開一個新資料表做儲存,幾乎等於重新開發一個API專屬另一個型態來使用。

但隨著需求的擴增,你的資料表開得越來越多,若開發時只設計一個API入口,那後端程式就必須相對的去維護多個資料庫,又若資料庫程式很先進的使用了O/R Mapping進行實作,那你就會看到堆有著相似性目的,卻只是組成不同的資料庫物件在你的程式裡頭。

肉包

小明總是在住家附近的肉包店買肉包,20 年來,肉包從一顆 10 元漲到一顆 30 元,從一天可以吃三顆,到一天只能吃一顆,今天他心血來潮問了老闆為何這些年漲了這麼多,老闆很驕傲地回答... 「這區的店租漲價了啊!然後你沒發現我們現在店面不但有冷氣,又有座位,還有 80"...