[SQL] Oracle資料庫起手式

本文主要介紹資料庫基礎概念,語法部分以Oracle為主。本篇會先著重在概念的介紹,說明資料庫的基本觀念,語法部分請參考之後的文章喔!

Liu Cheng Lee
技術學習
Sep 23, 2020

--

在進行SQL的語法操作前...
首先要先了解到底什麼是資料庫?什麼是SQL?

事實上,如果你會使用Excel那想必你對於資料已經有一定的了解了!
Excel主要滿足我們對於數據的儲存、尋找、計算等需求,其實資料庫其實可以想的跟Excel一樣,就是一個放置資料的地方,只是我們需要透過指令去對這個大型的Excel去進行操作,這個指令就叫做SQL

關聯式資料庫(RDB) v.s. 非關聯式資料庫(NoSQL)?

一般我們所說的資料庫可以分為兩種,關聯式與非關連式。

關聯式資料庫(RDB)
什麼是關聯式資料庫呢?
舉例來說,下方是一個書籍以及出版社的表格,由下表我們可以發現大地出版這家出版社的資訊重複出現了兩次,這樣在表格中就會有許多重複的資料,會使表格變得很龐大,浪費儲存空間。而且由於資料量變得龐大,資料輸入人員會增加輸入錯誤的機率。另外如果今天一家出版社資訊出錯了或者需要更改,那就需要對表格內所有資料進行修正。

今天如果使用關聯式資料庫,我就可以將出版社單獨建立一個表格,就可以減少很多重附資料的出現,如下圖:

如果今天有一個出版社資料需要修正,僅需要修改出版社表格即可,僅需要修改一次,減少修改次數以及錯誤機率。

統整使用關聯式資料庫的幾個優點:

  • 減少重複資料出現,降低資料量
  • 減少修正上麻煩
  • 減少輸入錯誤的機率

非關聯式資料庫(NoSQL)
了解上方關聯式資料庫後,非關聯式資料庫顧名思義就是完全不採用關聯模式,但說明了上述關聯式資料庫的優點之後,那非關聯式資料庫不是很不好嗎(?
其實非關聯式資料庫主要運用在大數據之中,其優點在於能夠快速參照到想要的數據,能夠減少關聯所需要花費的時間。

根據DB-Engines調查,目前主流數據庫仍舊是以關聯是數據庫為主,其中Oracle又是其中的冠軍,緊接在後的則是大家熟知的My SQL。

交易管理 ACID

通常對於資料庫不外乎"增刪改查"這四個動作,為了資料安全性就必須符合ACID原則,ACID事實上是單元性(Atomicity)、一致性(Consistency)、獨立性(Isolation)、永久性(Durability),這四個詞的縮寫,以下分別詳細介紹這四個原則。

  • 單元性(Atomicity):交易處理的結果只有完全執行完全不執行兩種,如果資料修改過程中發生錯誤就必須回復到原始模樣。
  • 一致性(Consistency):交易進行前後沒有資料庫完整性的變化。
  • 獨立性(Isolation):當一個交易在進行時,不可以讓其他交易進行更改。
  • 永久性(Durability):交易結果永久有效,不因任何因素干擾。

資料庫正規化

經常聽別人說資料庫需要做正規化,什麼是正規化呢?
白話一點說,其實正規化可以解釋成方便我們未來使用SQL所要做的處理。
此外其實正規化有非常多程序,但實務上來說我們通常做到第三正規化即可,以下僅是對正規化的一些簡單的概念說明,不涉及太過複雜的實務應用。

第一正規化(1NF):
同一格資料中不應該有兩筆資料。
比如一個人擁有許多之手機,那很多人在輸入資料表可能會產生這樣的狀況。

上圖這樣不符合第一正規化,應該調整如下:

第二正規化(2NF):
該資料庫所保存的資料都應與主鍵有相依性。
這個就像前面書與出版社的例子,,由於不同的書籍可能是由同一個出版社出版,因此出版社的負責人或電話等,其實與書籍的ISBN並沒有強烈的關聯性。
這時我們需要使用關聯式的方式去將資料庫拆分,這就是第二正規化。

第三正規化(3NF):
非鍵欄位之間不應有相依性。
下表中可以觀察到其實銷售金額是由單價乘上銷售數量得到的,因此我們這邊可以說銷售金額其實與單價跟銷售數量有強烈相依性,因此在第三正規化時,應將銷售金額此欄位排除。

適度違反正規化:
在實務中有些資料其實計算上相對不容易,比如公式複雜等。此外,比如說在會員資訊中,一個會員可能會有許多電話,如手機、家用電話、辦公室電話等等,這時候我們不會將電話額外拆出,JOIN會降低效能,
這時候可以為了提升效能適時違反正規化。

本篇文章主要是針對資料庫一些觀念的釐清,還沒有進入SQL指令的部分,關於指令會在後續文章中整理。

#技術學習 #SQL

--

--

Liu Cheng Lee
技術學習

畢業於北京大學研究所─計算機技術。曾任美團點評產品運營,希望大家一起跟我研究互聯網的相關專業內容。現任緯創資通IT部門。金融/會計/計算機專業背景。此外我也是日本旅行愛好者,喜歡研究日文分享日本小事。也喜歡學習設計跟藝術,透過記錄教學相長!是一顆小白菜,如有錯誤歡迎指正!