SQL-第一正規化
SQL-第一正規化
關聯式資料庫
到底什麼是關聯式?
指的是相互關聯的欄位,一同描述一個事物
但是要如何達成這個手段?
我們需要的是,必要的資訊描述
邏輯清晰的資料並且資料足夠分明的小單位
這些欄位也稱為單元性
單元性
已經收集好我們的需要的資料
但是如何可以界定所謂的小單位呢
以生日來說 2000/05/14
字面上的小單位直覺是
| year | month | day | | —- | —- |—- |
這樣子可以不過也不是最正確的
因為根本不知道生日是用在什麼地方的
- 朋友
- 年月日放在同一個欄位叫生日,因為也不用一直看朋友是 幾年生幾月幾日
- 戶政系統
- 這邊就可以分成年月日三個欄位,因為很常需要較 細微的資料
看似抽象,仔細思考,其實很實際
單元性也幫助我們有效率去做查詢,你肯定不會想要每次都寫一長串 又沒效率的指令
正規化的規則
已經知道了單元性
符合單元性的值又要符合兩個條件
-
不會有多個相同類型的值
check-up date eye 2023-05-30, 2023-06-07, 2023-06-17 -
不會有相同資料的欄位
check-up date1 date2 date3 eye 2023-05-30 2023-06-07 2023-06-17
帶來哪些好處
- 得到的搜索資料會更準確
- 因減少重複的資料,資料庫會更精簡
- 搜尋的母體變少,查詢速度更快
資料從小做起,當它長成大人,也不會失去控制
正規化還未結束
- 資料符合單元性
- 每筆資料必須有一個主鍵(Primary Key)
PRIMARY KEY 主鍵
-
獨一無二 值必須不重複,當然也不可以NULL,因為其他資料 可以是NULL
-
永遠不會修改 主鑑就像是人的身份證字號,永遠不會修改,不然就會混亂
-
簡單明瞭 主鑑越簡單明瞭,就可讓資料庫比較小,還可以加快查詢速度
幫加入資料表加入主鍵
| id | check_up | date |
|---|---|---|
| 1 | eye | 2023-05-30 |
| 2 | eye | 2023-06-07 |
id 是主鍵,這是我們加入的人造主鍵
如此就完成正規化了
自動增加
主鍵如果是要自己增加數字,是非常麻的事情 還好,加上關鍵字AUTO_INCREMENT可以幫你依序增加數字
新增主鍵
關鍵字是PRIMARY KEY
CREATE TABLE health
(
id INT NOT NULL AUTO_INCREMENT,
check_up VARCHAR(20),
date DATE,
PRIMARY KEY(id)
)
如果你幫已經存在的資料表新增主鍵 可以使用ALTER指令
ALTER TABLE health2
ADD COLUMN id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY(id)