剛好最近有個契機發生,剛好來複習? 或說重學SQL…
筆記查到網路上的各種文章&III老師精華~
資料庫
有目的有為什麼就會有學習的動力(?)
資料庫(Database)是資料的集合,但又不是把所有資料開在同一張表格(Table)般的簡單。
為了將來能有效的查詢,勢必要將資料整理一番,好好的分門別類!
於是資料庫設計(Database Design)又是另一門學問,真的下手建資料庫前,(通常?or視專案規模大小複雜度)會先畫E-R Model/ER Diagram (Entity Relationship Diagram)。E-R Model是關聯式資料庫設計的重要工具。
資料庫代表的資料是真實世界中的實體,必須去描述這些實體的屬性或是之間關係,才能有好棒棒的資料庫設計出來。
1. Entity
一個能擁有資料的實體,例如一個人、一個物件、一個事件。把它想成一個名詞~
常見的可能是電商網站中的顧客、產品
在圖中會用矩形代表它!
2. Relationship
每個實體之間的關係
把它想成一個動詞~
例如:學生要選修某堂課程
兩個實體,分別是學生和課程就產生了
而註冊就是連結兩個實體的Relationship!
在圖中會用菱形代表它!
3. Attribute
實體具有的屬性或是特性,在圖中會用橢圓或是圓形代表它!
4. Key attribute
指屬性值有唯一性,不重複
例如:學生的學號、訂單編號
所以學號或是訂單編號就稱為key
-
PK(Primary key)
唯一且不為空值,在圖中將屬性加底線表示
-
FK(Foreign key)
建立不同實體/資料表的關係
ER Model的符號
必須描述有多少個實體參與,稱作基數(Cardinality)
例如: 一對一、一對多及多對多
其中一種表示方式,圖取自:What is an Entity Relationship Diagram (ERD)?
於是簡單的ER Model可能會長得像這樣
圖取自:Entity Relationship Diagram – ER Diagram in DBMS
如果選擇的是關聯式資料庫管理的話
實體–表格
屬性–欄位
關係–FK (Foreign key)
簡述E-R Model建立的基本步驟:
- 從需求中找出實體
- 找出實體間的關係
- 定義關係的種類(一對一/一對多/多對多)
- 定義實體的屬性和PK
產出E-R Model後可以再進一步畫成ER Diagram
簡略的會長得像這樣
圖取自:What is Entity Relationship Diagram (ERD)?
有三個表格Shipment, Courier, Order
每個表格中的欄位名以及資料型態
每個表格都有個ID欄位為PK
Order中的ShipmentID和CourierID為FK
可以利用這個FK去串起和Shipment或Courier的關係
所以才叫關聯式資料庫(RDBMS)
要畫ER-Model or ERD線上有很多工具可以使用
例如:
visual-paradigm、draw.io、Gliffy
資料庫管理系統
Data Base Management System,簡稱DBMS
用來管理資料庫的軟體系統,是使用者和資料庫的中介。
於是我們可以透過DBMS下指令,做新增、修改、刪除、搜尋等等的動作。
廣義的話分成兩種:
-
關聯式資料庫 RDBMS
用二維矩陣的方式來儲存資料,有欄有列
支援SQL,可以使用較複雜的查詢
資料量巨大的話,效能差
Ex: mySQL, Oracle, MS SQL Server…
-
非關聯式資料庫 NOSQL
key-value方式儲存資料
不支援SQL,存取速度快
EX:MongoDB
推這篇比較文,還有語法的使用比較
自己的感覺RDBMS比較嚴謹,因為建資料庫前可能需要先把ERD畫出來,才知道要建幾張表,建那些欄位
查詢語法也很多元,又或是說可以下很複雜的條件(?)
SQL長的很嚇人之類的..但也因為這樣而影響效能
而物件方式儲存的NOSQL,因為物件要增加刪減都很彈性,用Document的概念去儲存資料。
像是A用戶資料可能就是用一個Object去儲存,而不是分散在各個表格中
有點用空間換取查詢時間的味道~
資料庫溝通
繼續推推ALPHA camp的文章
實務上在應用的時候,即使選擇的是RDBMS也是有方法不用寫到SQL也可以對資料做操作。
也就是ORM(Object Relation Mapping)技術,用程式語言中的物件來包裝SQL,透過ORM它會幫我們轉成SQL~
ex:
// 使用ORM 查詢語法如下:
Todo.find ({ name: '買蘋果'})
其實會被轉換成
SELECT * FROM Todos WHERE name='買蘋果' ;
例子取自ALPHA camp
不過SQL語法還是有基本認識比較好~
SQL學習資源
推推這篇文章What is SQL? A Beginner’s Guide to the SQL Language
整理蠻多SQL線上資源還有一些基本的認識
剛開始一定需要例子跟著下指令才會加深印象
不用急著在電腦建環境,使用線上的就好~
-
codecademy平台
提供很多語言的學習,切分很多個單元
當然也有sql
覺得很適合入門,畢竟不用建環境或是建檔案
認識語法使用先,都會有一段小介紹然後跟著實作
小闖關的感覺
待續—
延伸閱讀&參考圖文
What is an Entity Relationship Diagram (ERD)?