主線 01 · 建立基礎
把生活資料變成表:列、欄、鍵與空值
這次只要做到:說出一列代表什麼,找出最小識別欄位,判斷空值與重複資料。
SQL、ER 和正規化都從資料的意義開始;先能讀表,才知道規則在保護什麼。
1.先看一列,不急著背英文
資料庫是整理後持續儲存的資料;DBMS 是管理、查詢及保護它的軟體。table 是表,row 是一筆資料,column 是每筆資料都有的欄位;schema 是欄位及規則的設計。
Book 編號 | 書名 | 價格 B1 | 河流 | 200 B2 | 山路 | 150 這裡有 2 列、3 欄;一列代表一種書,不代表一次借閱。
2.型態限制資料能長什麼樣
文字、數字、日期有不同用途。CHAR(n) 表固定長度文字,VARCHAR(n) 表有長度上限的文字;NUMERIC(p,s) 表總共 p 位數、其中 s 位在小數點後。文字編號可有前導 0,不要因看起來像數字就改成整數。
NUMERIC(5,2) 的非負最大值是 999.99;1000.00 需要 6 位,超出範圍。編號 '0012' 是文字。
3.鍵靠業務規則,不靠目前剛好不同
能唯一識別每一列的欄位集合是超鍵;再拿掉任何欄就不行的超鍵是候選鍵。選一個候選鍵當主鍵 PK。複合鍵含多個欄位。
業務保證書號唯一、書名可能重複。{書號} 是候選鍵,{書號,書名} 只是超鍵。借閱表若同一本可多次借出,只用書號就不夠。4.NULL 是未知或缺值,不是 0 或空字串
NOT NULL 禁止缺值;PRIMARY KEY 同時要求唯一且非 NULL。UNIQUE 限制重複,NULL 的具體處理依 DBMS 規則;不要擅自把它等同主鍵。CHECK 檢查條件,但標準 SQL 中 UNKNOWN 不會使 CHECK 失敗,必填還要 NOT NULL。
price NUMERIC(5,2) NOT NULL CHECK(price>=0) -5:不合 CHECK;NULL:不合 NOT NULL;0:合法。 只寫 CHECK(price>=0) 不能保證 price 有值。
5.把錯誤和它違反的規則連在一起
驗證新資料時逐條看型態、必填、唯一及業務條件。不要只寫『錯誤』,要說是哪一欄、哪個規則。
已存 B1/河流/200,再新增 B1/海岸/100:書號重複;新增 B3/NULL/100:若書名必填才違規,不能自行加題目未說的限制。
6.同一份資料可有不同觀看層次
外部層是某類使用者看到的欄位,概念層是整體表與關係,內部層是檔案/頁/索引的儲存方法。資料獨立性指某層改動可不迫使上一層跟著改;不代表任何結構變更都零影響。
把資料從舊磁碟搬到新磁碟且表不變,是內部儲存改動;員工查薪資、民眾只查服務地址,是不同外部檢視。
學會後再延伸 · 講義、影片與國考題
本單元三種練習先做完。特定 DBMS 的 UNIQUE/NULL、文字排序及儲存編碼差異,需要遇到指定產品題再查;先不要猜成通用規則。
主線先建立操作能力;進入應試階段後,再用完整講義與限時手寫補齊考點與表達。