從單張表升級到多張資料表的管理
公司資料有每個員工資料,今天老闆突然想把部門名稱更改,卻需要一筆一筆更改非常沒效率,於是會把資料表設置成多張管理。一方面避免一張表管理有重複性,一方面容易變更表面而不變動到整體關聯性。
單張資料表管理 | 多張資料表管理(好) |
---|---|
![]() |
![]() |
主鍵、外來鍵介紹
主鍵(Primary Key,PK)
- 每個資料表會有一個主鍵
- 主鍵的值必須是唯一的,且不能重複
- 主鍵不能為Null值,但外來鍵可以為Null值
- 大部分情況命名為 “id”,使用 整數 or UIUD格式
- 設定後就不應該再更動
外來鍵(Foreign Key,FK)
- 每個資料表可多個外來鍵
- 當資料需要關連到其他表格時才會用到
- 命名通常會用 "參考資料表_id” 的格式
- 外來鍵必須對應到被參考資料表的主鍵
如何規劃外來鍵與Tables拆分
口訣:『多的要設定成外來鍵』
以員工資料表的情境
1.以員工角度:一個員工會有?個部門。 Ans:1
2.以部門角度:一個部門會有?個員工。 Ans:多
已知道多個會設定成外來鍵(FK),所以要把員工資料表的部門名稱欄位設定成FK,關連到新建立的部門名稱資料表的主鍵(PK)。
主鍵設定方式、ID自動遞增方式
設定 遞增 SERIAL、主鍵 PRIMARY KEY
CREATE TABLE users(
id SERIAL PRIMARY KEY, -- 員工編號,主鍵
name VARCHAR(50) -- 員工姓名
)
建立完整資料庫(做關聯)
CREATE TABLE teams(
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE users(
id SERIAL PRIMARY KEY,
name VARCHAR(50),
salary INTEGER,
team_id INTEGER,
FOREIGN KEY (team_id) REFERENCES teams(id)
)
-- 新增資料
INSERT INTO teams(name) VALUES
('開發部'),
('人事部');
INSERT INTO users(name, salary, team_id) VALUES
('王天宇', 52000, 1),
('林小樹', 48000, 2),
('李雲', 55000, 1),
('陳海洋', 46000, 2),
('張鐵柱', 42000, 1);