iT邦幫忙

2022 iThome 鐵人賽

DAY 8
1

就讓我們來認識最熟悉的陌生人,資料表!
妳長的很像我前女友,很適合來形容資料庫跟 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

執行的SQL

CREATE TABLE districts (
    name VARCHAR(50),
    country VARCHAR(50),
		population INTEGER,
    move_in INTEGER,
    move_out INTEGER,
);

-- 備註 : VARCHAR(50)儲存"文字"資料型別、INTEGER儲存"整數"的資料型別

執行指令之後,將資料庫重新連結,我們可以在架構中看見創建出來的表格內容了!

Data Type

要被儲存的資料,需要選定適合的Data Type,常見的類型如文字、數字、日期、布林值以及現今資料交換常被使用的JSON檔案格式,不過JSON格式並不適合關聯式資料庫設計方式,在這個系列當中並不會使用,若有興趣則可以自行找尋MongoDB之相關教學與文章。

  • CHAR : 需要定義儲存的資料長度(N),輸入的值較短的話,資料庫會自動用空格補齊長度,輸入的值較長的話,會得到一個錯誤。
  • VARCHAR : 需要定義儲存的資料長度(N),輸入的值較短的話,資料庫會自動調整長度,輸入的值較長的話,會得到一個錯誤。
  • TEXT : 不需要定義儲存的資料長度,理論上可以存任何長度的資料,實務上資料是不能大過於伺服器能儲存的容量。
  • ENUM : 限定資料內容,輸入的資料與ENUM相同才可以被儲存。

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 >fact character(***n***) is usually the slowest of the three because of its additional storage >costs. In most situations text or character varying should be used instead.

https://stackoverflow.com/questions/4848964/difference-between-text-and-varchar-character-varying/4849030#4849030

  • INT : 整數
  • DECIMAL, NUMRIC : 帶有小數且精準的數值,需要宣告小數位數。
  • FLOAT, REAL : 帶有小數但不精準的數值,不需要宣告小數位數。

電腦科學中浮點數是一種對於實數的近似值數值表現法

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

https://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server

  • 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


上一篇
Day 07 建立資料庫
下一篇
Day 09 寫入資料
系列文
資料庫新手入門--以PostgreSQL為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
W.H.
iT邦新手 1 級 ‧ 2022-10-10 13:59:03

關於 column 和 row,我的記憶法是:

column 有「柱子」的意思,柱子是「直的」=「上下方向」、「縱向」

row 有「划船」的意思,划船的槳是「一左一右」=「左右方向」、「橫向」

又,column 亦有 「(報紙的)專欄」之意,所以是「欄」。

row 是 「列」(註),我是用圖像記的(網路上也有人這樣教),「列」的第一筆是橫向「一」,所以是橫向。

(註):台灣和大陸的「行」、「列」,方向正好相反:台灣是「直行橫列」,大陸是「橫行直列」。

橫書越來越發達(∵ 英文、電腦、網路的普及),要找純直書不容易,不過台灣的文學實體書還是以直排居多(尤其是純文字文本的),可以想成台灣中文小說實體書的「一行文字」是「直向」的;而大陸的書都是橫排,所以大陸書籍的「一行文字」是「橫向」的。

我要留言

立即登入留言