資料庫有許多維度可以來認識它,除了前幾天的語法指令、技術原理,另一個跟SA系統分析很有關係的就是Table Schema。第一次聽聞Schema時,不明白是什麼意思,從user端而言,不就是資料表嗎?
資料表不是table嗎?為什麼叫schema呢?
table 不是 row跟column的組成嗎? 跟schema有什麼關係?
Google大神:schema是綱要、模式、架構...
架構、模式不就是DBMS關聯、非關聯嗎?……..越繞越遠總是在邊上打轉。
直到軟體開發單位,對table有了另一個維度的說明。才知道schema指資料表的欄位設計,泛指各種資料型態(datatype)、欄位數量、長度大小、主鍵、外鍵、唯一性、null、索引等。
當開發team 在討論Schema時,也意味者討論資料表及欄位設計。
討論Table Schema也就是為了建立資料庫,那麼資料庫的起手式,就從系統的目標及範圍切入、分析:
以上差不多可以完成建立資料的欄位及屬性需求(Table Schema)
接著思考以下資料庫跟系統的關係:
如此一來,資料庫的欄位也較滿足系統的使用需求。
ERD(Entity Relation Diagram)實體關係圖: 這個幾乎是SA必備的設計圖,用來定義實體間彼此的關係,簡單來說就是資料表之間的關係,又稱為ER-Model。
此圖基本元素有:Entity(實體或資料表),用來描述實體有多少屬性(或欄位);以及Relations(連接線與方向),用來定義彼此的關係(例如:1對多、多對1、1對1、多對多等等)。
舉例:在資料表的欄位設計上,分為節目資料與分集資料,一個節目可以有多集的分集內容(連續劇)或是電影型態,所以在資料關係上是這樣的結構(下圖非標準的UML圖示)
由於片單的類型不外乎是來自各個國家,因此資料庫的欄位屬性與設計需要滿足使用者的使用方便性。所以在節目代號的欄位設計上,前2碼取國家簡稱為開頭,接著節目上映年度加上當年度採購的順序流水號(此欄位惟筆者自行設計,非NetFlix的資料結構)。
當這個節目有屬於影集性質,有多集分集內容時,在影片串流時所要讀取的影音檔案便可命名為CN19001_0005.mpg,此乃資料庫的唯一值,主鍵的概念。在結構化資料(SQL)的設計下,每個欄位有其代表意義,即可透過多種欄位組合,存取使用者的資料呈現,再透由標籤TAG的概念,也可以運用在觀眾喜好類型的情境下,抓取觀眾眼球。