Michael 講 Database 之關聯式資料庫
上一篇我們介紹了 SQL 的語法,收到很多朋友私訊我,說怎麼 Database 還沒介紹,就先講 SQL 了呢?所以今天我們就來聊聊關聯式資料庫(Relational database) 吧!
在解釋關聯式資料庫以前,我們得先來說說甚麼是資料庫以及資料庫裏面有什麼。簡單來說,資料庫就是存放許多資料表的地方,就像醫院的病歷庫,存放著患者的資料表,而電腦的資料庫則是存放電子化的資料與資料表罷了。
基本上,資料是需要經過妥善分門別類,寫到資料表後才能被收入資料庫中。就像在病歷庫裡,我們不會直接將每個人的病歷資料寫到空白的 A4 紙上,我們會有一份制式的表格給病人、醫生填寫後,才會收到病歷庫。相應到資料庫上,每一筆需要寫入的資料則需要依據表格的欄位填入,以便資料可以進行新增、修改、刪除、查詢等動作。
接著,讓我們來了解在關聯式資料庫裡面非常重要的兩個名詞:“實體” 與 “關聯”。
資料庫中的資料表看起來就像下方一般常見的表格,灰色網底的部分是表中該欄位的名稱,其他的橫列則是每一筆資料的內容,以圖 1 為例,藍色框框就表示為一筆資料或稱為一筆紀錄;紅色框框則表示整個欄位
而整體表格包含每一列資料全部,即為所謂的 “實體”, 按照筆者的話來說就是指整個資料表內容。
“關聯” 指的是表格 (實體) 與表格 (實體) 之間的連接。
先舉病歷資料為例,一份病歷資料可能有流水號、患者名稱、身分證字號以及主治醫生等資料如下方左圖,而右方則是一張專門紀錄醫生資料的表,包含醫師編號、姓名、主治領域與所在地點等資訊,而這兩張資料表的關聯,正是 Doctor 這個欄位。
我們之所以需要使用關聯資料表,是因為我們不希望在病人的病歷資料上,記載關於主治醫師的詳細資料,這兩份資料有各自明確的功能,我們只需要創造兩張表的 “關聯” ,就可以在必要的時候查找資訊。
比方說我看了小叮噹的病歷後,想要進一步與他的醫師對話交流,就利用 Doctor 這個欄位中 778 這個值,到右方去對照 Doctor 欄位的 778,如此就能得知他的醫師是小夫,服務地點位在高雄。
產生關聯的欄位,我們叫做鍵值 (Key)。
依據不同功能,鍵值的名稱也會不同,以下做簡單的介紹,先看看就好,如果真的對資料庫有興趣,再進一步研究吧:
- 超鍵 (Super key):對每一列而言具備唯一值的欄位或是欄位組合。
以上方表來說,我們可以說 Chart_No 是超鍵,ID_Number 也是超鍵,Name 就不是,患者群裡有可能有同名的,所以患者姓名不可以,但若是將 Name 與 Chart_No 組合成一個欄位,那也可以稱為超鍵。 - 候選鍵 (Candidate Key): 候選鍵的值能夠唯一識別每一筆記錄。
候選鍵也是超鍵的一種,候選鍵必須滿足最小性,也就是當我只有某一個欄位資料時,進行搜尋,搜尋結果會只有一筆紀錄。例如 : Chart_No、ID_Number 都是。 - 主鍵 (Primary Key, PK):用來區分每一列資料不能有相同值。主鍵是候選鍵的其中一個,一張表裡面可以有很多個候選鍵,但只能有一個主鍵。
以上方左表來說,PK 是 Chart_No;但右表的 PK 則是 Doctor。 - 外鍵 (Foreign Key, FK):一個以上,用來指向其他的表格。
在上方左表中,Doctor 欄位就是 FK,可以利用這個欄位指向右表的 PK,得到醫生的詳細資訊。 - 空值 (Null Value):代表不存在的特殊值。
今天的介紹已經接近尾聲,最後來總結補充關聯式資料庫的幾個特性:
- 一個關連式資料庫裡,有多個資料表,利用鍵值做關聯。
- 資料表是一般資料庫的最小區塊,資料都是存在資料表內。在其他種類的資料庫裡,如”物件資料庫”,所有資料直接存在物件裡。
- 在關聯式資料庫裡,表格通常是 2 維的,3 維以上則是另一種資料庫的展示方式,通常稱為 "多維資料庫" , (Multi-Dimensional Database,MDD)
- 沒有資料表的資料庫,只是一個空殼,沒有資料,也沒有儲存資料的地方。換句話說則是:資料存在於資料表,而非直接存在於資料庫中,資料表才是存在於資料庫中的東西。
- 每張表一定要有主鍵,主鍵是唯一的,而且一定有資料。
總結來說,資料庫裡面,表與表之間有關係的互相指向,就可以說是關聯式資料庫,你也可以自己用 Excel 建立彼此有關聯的工作表,在廣義中也算是一種資料庫囉!。