就讓我們來認識最熟悉的陌生人,資料表!
妳長的很像我前女友,很適合來形容資料庫跟 Excel
建立資料庫(database)相當於把一個 Excel 檔案給新增出來,
建立資料表(table)則相當於把一個 Excel 分頁給建立出來,
Excel 檔案被創立,預設會建立三個分頁,
但是資料庫被創立,並不會建立三個資料表給你,
所以要自己建立資料表,我們將透過三個步驟來執行!
Table 是資料的集合,一張資料表可以儲存非常多的資料。
Columns 是關於資料的欄位名稱。
Rows 是一筆一筆的資料。
有趣分享 :
關於Column、Row 要怎麼記呢? 使用象形文字記憶法
Column 請看 l 這個單字,寫法由上而下,所以眼睛也由上往下看。
Column (一個欄位一個欄位看)
Row 請看 R 這個單字,寫法由左往右,所以眼睛也由左往右看。
Row (一筆一筆的資料)
1 | 我們要儲存什麼資料? |
---|---|
2 | 資料有什麼屬性? |
3 | 每個屬性是什麼資料類別? |
1 | 我們要儲存什麼資料? | 我們想儲存地區資料 |
---|---|---|
2 | 資料有什麼屬性? | 每個地區有名稱、縣市、遷入、遷出的資訊 |
3 | 每個屬性是什麼資料類別? | 名稱跟縣市是文字、遷入跟遷出是數字 |
1 | 我們要儲存什麼資料? | 我們想儲存地區資料 | 建立叫做 districts 的 table |
---|---|---|---|
2 | 資料有什麼屬性? | 每個地區有名稱、縣市、遷入、遷出的資訊 | 這個表格有名稱、縣市、人口、遷入、遷出的 columns |
3 | 每個屬性是什麼資料類別? | 名稱跟縣市是文字、遷入跟遷出是數字 | 每個 column 定義 data type |
CREATE TABLE districts (
name VARCHAR(50),
country VARCHAR(50),
population INTEGER,
move_in INTEGER,
move_out INTEGER,
);
-- 備註 : VARCHAR(50)儲存"文字"資料型別、INTEGER儲存"整數"的資料型別
執行指令之後,將資料庫重新連結,我們可以在架構中看見創建出來的表格內容了!
要被儲存的資料,需要選定適合的Data Type,常見的類型如文字、數字、日期、布林值以及現今資料交換常被使用的JSON檔案格式,不過JSON格式並不適合關聯式資料庫設計方式,在這個系列當中並不會使用,若有興趣則可以自行找尋MongoDB之相關教學與文章。
https://www.postgresql.org/docs/current/datatype-character.html
https://www.postgresql.org/docs/current/datatype-enum.html
對於PostgreSQL而言,CHAR、VARCHAR、TEXT 性能上並沒有什麼差異,以下為官網引文:
There is no performance difference among these three types, apart from increased storage space >when using the blank-padded type, and a few extra CPU cycles to check the length when storing >into a length-constrained column. While
character(***n***)
has performance advantages in some >other database systems, there is no such advantage in PostgreSQL; in >factcharacter(***n***)
is usually the slowest of the three because of its additional storage >costs. In most situationstext
orcharacter varying
should be used instead.
電腦科學中浮點數是一種對於實數的近似值數值表現法
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
DATE : 包含年月日的日期,例如2022-09-09
DATETIME : 包含年月日時分秒的日期,例如2022-09-09 15:30:20
BOOLEAN : True or False
JSON : JOSN格式的資料
Text | Numeric | Date | Other |
---|---|---|---|
CHAR(N) | INT, … | DATE | BOOLEAN |
VARCHAR(N) | DECIMAL, NUMRIC | DATETIME, TIMESTAMP | JSON |
TEXT | FLOAT, REAL | ||
ENUM |
https://www.postgresql.org/docs/current/datatype.html
https://www.javatpoint.com/postgresql-datatypes
https://www.geeksforgeeks.org/postgresql-data-types/
https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-data-types/
https://www.tutorialspoint.com/postgresql/postgresql_data_types.htm
關於 column 和 row,我的記憶法是:
column 有「柱子」的意思,柱子是「直的」=「上下方向」、「縱向」
row 有「划船」的意思,划船的槳是「一左一右」=「左右方向」、「橫向」
又,column 亦有 「(報紙的)專欄」之意,所以是「欄」。
row 是 「列」(註),我是用圖像記的(網路上也有人這樣教),「列」的第一筆是橫向「一」,所以是橫向。
(註):台灣和大陸的「行」、「列」,方向正好相反:台灣是「直行橫列」,大陸是「橫行直列」。
橫書越來越發達(∵ 英文、電腦、網路的普及),要找純直書不容易,不過台灣的文學實體書還是以直排居多(尤其是純文字文本的),可以想成台灣中文小說實體書的「一行文字」是「直向」的;而大陸的書都是橫排,所以大陸書籍的「一行文字」是「橫向」的。