iT邦幫忙

0

[30天SQL筆記] Day 2: 關聯模型(上)

  • 分享至 

  • xImage
  •  

大家好,我是Josh,我才沒想到才發布一天就停更。廢話不多說馬上進入主題!
今天要介紹什麼是關聯模型,這個詞很多人聽過但一知半解,只知道跟SQL有關但就沒有然後了,所以今天會盡量以簡單易懂的方式,讓大家能快速了解關聯模型。

Outline:

一、關聯模型(Relational Model)
二、資料表(Table)、資料行(Column)、資料列(Row)
三、主索引鍵(Primary Key)
四、外部索引鍵(Foreign Key)

一、關聯模型(Relational Model)

Relational Model簡單來說他是基於Set Theory發展出來的,該模型描述如何在Database上的資料表(Table)執行常見的運算,如聯集跟交集,這會對應到以後談到的Right Join, Inner Join等。這些細講下去會有些偏題,比較不是Programmer需要知道的,有興趣的可以看References裡的資訊。

如果這太複雜的話,更簡單粗暴的說,Relational Model把整個Database裡的Table都當成類似Excel表格的方式存放,只是比較艱深的詞彙描述怎麼存Excel。如果會使用Excel,日後在建置設計Table的時候也會有所幫助。
二、資料表(Table)、資料行(Column)、資料列(Row)
https://ithelp.ithome.com.tw/upload/images/20250508/20172928fJPA9AeJIw.png
想必光看到圖大家已經有些感覺。在SQL Table中,直的是Column,橫的是Row。SQL中第一個Row都會是存放各個Column的類別名稱,Table中每個名詞幾乎都有不同說法,圖中大字是最常見,小字是也會聽到但頻率低一些。一開始看過就好不用記,久了會習慣這些名詞交替出現。

三、主索引鍵(Primary Key)

學SQL跟資料庫,不可以不知道Primary Key是什麼。Primary Key是用來讓Table,透過「唯一的」名稱來識別Row用的,但Row本身並沒有名字,除了知道他是第幾個以外,沒有好的稱呼方式。因此,Primary Key就派上用場,Primary Key就相當於每個Row的名字。

例如以下的Student Table:

Student_Id Name Department
0001 Josh Data Science
0002 Ruby Social Work
0003 Anita Finance
0004 Judy Computer Science

在這個例子中,雖然每個人的姓名是獨立的,但難保不會遇到整個學校裡,有人剛好撞名,且一般在SQL中,大家更傾向尋找具有順序性的欄位當Primary Key。因此在這個例子中,學號是更適合的選擇,有不容易修改、具唯一等性質。有一點直得注意,你可以發現一般Table的Primary Key偏好放在最左邊,這是SQL寫作上的風格(Convention)

在聽完以上的介紹後,應該更好想像,為什麼Primary Key會有這些特性:

  1. 必須的(Required)
  2. 唯一的(Uniqueness)
  3. 非空的(Not NULL)
  4. 穩定的,一經建立便極少更改
  5. 簡單的或複合的,這點比較複雜,日後會再談到

在進入Foreign Key以前,先來做個小測驗,確認自己是否真的理解Primary Key。答案在最底下
Ex1: 根據以上的Student Table,請問下列何者可以有效的新增Row至Table?
(A) 0001, Chris, Computer Science
(B) NULL, Dave, Economics
(C) 0005, Jerry, Accounting

四、外部索引鍵(Foreign Key)

Foreign Key我想先從例子講起,假設除了剛剛的Student Table稍作修改外,我還有一個表格叫Department Table存放跟科系相關的資料。
Student Table:

Student_Id Name Department Department_Id
0001 Josh Data Science D03
0002 Ruby Social Work D02
0003 Anita Finance D04
0004 Judy Computer Science D01

Department Table:

Department_Id Department Number_Of_Student
D01 Computer Science 70
D02 Social Work 69
D03 Data Science 57
D03 Finance 59

假設我想知道Josh系上有多少人(Number_Of_Student)該怎麼辦?
關於這個問題,就需要用到範例中的"Foreign Key",首先要先知道Josh讀Data Science,但更好的是用旁邊的Department_Id。再用Department_Id找到Data Science的Number_Of_Student=57。在這個範例中,Student Table的Foreign Key就是Department_Id,可以用來連結其他Tables。

我終於要來解釋他的定義了,

A foreign key (FK) is a column or combination of columns that is used to establish and enforce a link between the data in two tables to control the data that can be stored in the foreign key table. - SQL Server, Microsoft

我來換句話說的話,FK可以是一個Column或多個Column的組合(這點與Primary Key類似),達成可與其他Table連接的效果,而Foreign Key會是某個Table的"Primary Key"。但Foreign Key特別的是,它可以是Null。

解答:(C)

References:
Book: 學習SQL的15堂課/Chris Fehily
Primary and Foreign Key: https://www.scholarhat.com/tutorial/sqlserver/different-types-of-sql-keys
Images and SQL Table: https://www.datawithbaraa.com/sql-introduction/sql-tables/
Relational Model: https://en.wikipedia.org/wiki/Relational_model
Different Types of SQL keys: https://www.scholarhat.com/tutorial/sqlserver/different-types-of-sql-keys


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言