iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
Software Development

SQL 30天手把手入門系列 第 3

Day 3 關聯式資料庫簡介 - 常用專有名詞和關聯

  • 分享至 

  • xImage
  •  

常用專有名詞

在實際操作的資料表格中,有一串的重要專用名詞是需要先知道的。若你有用過 Microsoft Excel 之類的試算表辦公室軟體的話,你已經無形中內建部分觀念了。

  • 資料表 (Table)
    一個二維的資料表格,用來儲存特定集合的資料。例如:有一個名為「使用者」的資料表,裡頭儲存者使用者的姓名、電子郵件信箱、地址......等。每一個儲存格中,只能儲存一筆資料。
姓名 電子郵件信箱 地址 部門代碼
user1 user1@a.com 台北市中正區重慶南路一段122號 A01
user2 user2@a.com 台北市信義區市府路1號 A01
user3 user3@a.com 台北市信義區仁愛路四段505號 A02

在講到欄列之前,要先內建的冷知識點為:台灣和中國關於欄列的概念是顛倒的。以下是以「直欄橫列」的概念為基礎撰寫的。

  • 資料欄 (Column)
    用於表現特定欄位屬性的資料,以「垂直」的方式呈現。用上圖表格來看,會有「姓名、電子郵件信箱、地址、部門代碼」這四個資料欄 Columns

  • 資料列 (Row)
    用於表現單筆記錄,以「橫向」的方式呈現。用上圖表格來看,user1 使用者會有其個人的姓名、電子郵件信箱、地址和部門代碼。這一筆資料佔據了一個資料列 Row。

  • 主鍵 (Primary, PK)
    用來表示每一筆資料的唯一性,它不可以重複或者是空值(NULL)。例如說以下的部門代碼表:

部門代碼 名稱
A01 業務部
A02 製造部

以部門代碼當作主鍵就很適合,因為代碼會具有唯一性,而且每一筆資料都需要有這個值。另外,一個資料表中的主鍵,對其他資料表而言,就是用於建立關聯的值,把此值填入其他資料表的欄位中即可。

  • 外鍵 (Foreign Key, FK)
    將「使用者」表格和「部門代碼表」一起觀看,兩個表格藉由「部門代碼」連結起來了。在「使用者」表格中的「部門代碼」欄位內的值,就稱為外鍵,用來連結「部門代碼表」中的主鍵。
姓名 電子郵件信箱 地址 部門代碼
user1 user1@a.com 台北市中正區重慶南路一段122號 A01
user2 user2@a.com 台北市信義區市府路1號 A01
user3 user3@a.com 台北市信義區仁愛路四段505號 A02
部門代碼 名稱
A01 業務部
A02 製造部
  • 關於 Null or NULL
    資料表中的欄位,有時可能會出現空值(NULL),意指該欄位沒有填入任何資料。這是一種狀態的表示,不代表欄位的值為 0 。例如當你詢問他人你手邊有幾本書?你得到的答案可能會是 0 。但在他人回答之前,你不會知道他人擁有多少本書。對於資料庫而言,便是從 NULL 狀態變成 0。

關聯類型

資料庫中可以接受的關聯類型有三種。

一對一 (One to One)

甲乙兩個資料表內,若取出甲的一筆記錄,只能對應到乙資料庫的一筆記錄,反之亦然。舉過現實生活中的例子:個人護照和個人姓名,這兩者彼此之間就是一對一關係。
你或許會好奇其實這兩個資料表合併在一起也無不可,但如果拆開的話,反而易對機密資料設定權限,不容易被有心人士全部取得。

一對多

甲乙兩個資料表內,若取出甲的一筆記錄,可以對應到乙資料庫的多筆記錄。但反向從乙資料庫抽取一筆記錄,卻只能對應到甲資料庫的一筆記錄。例如:商品種類與商品的關係。
一個種類旗下,可以有很多個商品;每一個商品,卻只屬於一個類別。

多對多

甲乙兩個資料表內,若取出甲的一筆記錄,可以對應到乙資料庫的多筆記錄,反之亦然。例如有「使用者」和「餐廳」兩個資料表,若你要建立個「最愛餐廳」的資料表,那麼一個使用者可以選擇多個餐廳,而一間餐廳,同樣也可以被多個使用者選擇。若仔細觀察會發現:

  • 「使用者」 與「最愛餐廳」的關聯,呈現的是一對多關係
  • 「餐廳」 與「最愛餐廳」的關聯,呈現的是一對多關係

結合這兩者,就組合成多對多關係。在「最愛餐廳」的欄位內,就會儲存「使用者代號」和「餐廳代號」

下一篇會談論到 Schema 和 SQL 的指令敘述


上一篇
Day 2 關聯式資料庫簡介 - 實體與正規化
下一篇
Day 4 關聯式資料庫簡介 - Schema 和 標準 SQL 語法
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言