Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

資料庫架構設計入門:用 UNIQUE 限制確保資料不重複

最後更新:2026年1月8日資料庫

上一篇文章介紹了一對一、一對多、多對多三種關係類型,也學會了怎麼設計表單來記錄這些關係。

但有個問題:我們怎麼確保這些關係是正確的?

例如會員和電話是「一對多」的關係,一支電話只能被一個會員持有。但如果有人不小心把同一支電話填了兩次,分別屬於不同會員,怎麼辦?

這篇文章會介紹資料庫的「限制」功能,幫助我們自動防止這種錯誤。

一對多關係要怎麼確保?

回顧一下會員和電話的關係:

  • 一個會員最多可以有很多支電話
  • 一支電話最多只能被一個會員持有

我們用兩張表單來記錄這個關係:

會員表單:

會員 ID會員名稱
U001David
U002Emily
會員名稱David
會員名稱Emily

會員電話表單:

電話會員 ID
0912-345-678U001
0922-111-222U001
0923-456-789U002
會員 IDU001
會員 IDU001
會員 IDU002

從表單設計來看,一支電話只會出現一次,對應到一個會員 ID。這樣就能確保「一支電話只能被一個會員持有」。

但問題來了:如果有人不小心把同一支電話填了兩次呢?

電話會員 ID
0912-345-678U001
0922-111-222U001
0912-345-678U002
會員 IDU001
會員 IDU001
會員 IDU002

這樣 0912-345-678 這支電話就同時屬於 David 和 Emily,違反了「一支電話只能被一個會員持有」的規則。

用 UNIQUE 限制防止重複

好消息是,關聯式資料庫可以幫我們的欄位加上「限制」。

其中一種限制叫做 UNIQUE(不重複)。

當你對某個欄位設定 UNIQUE 限制,資料庫就會自動檢查:這個欄位的值不能重複。

如果有人試圖新增一筆資料,但這個值已經存在了,資料庫就會拒絕,不讓這筆資料存進來。

在電話欄位加上 UNIQUE

我們在「會員電話表單」的「電話」欄位加上 UNIQUE 限制:

會員電話表單:

電話(UNIQUE)會員 ID
0912-345-678U001
0922-111-222U001
會員 IDU001
會員 IDU001

現在如果有人想新增一筆「0912-345-678 / U002」的資料,資料庫會說:

「不行!0912-345-678 已經存在了,違反 UNIQUE 限制,這筆資料不能存進來。」

這樣就能自動確保「一支電話只能被一個會員持有」了。

UNIQUE 限制的好處

自動檢查,不用擔心人為疏失

不用靠人工檢查「這支電話有沒有被用過」,資料庫會自動幫你檢查。

資料一定正確

只要設定了 UNIQUE 限制,就不可能出現重複的值。資料庫會強制執行這個規則。

在源頭就擋住錯誤

錯誤的資料根本存不進來,不用等到之後才發現問題、再花時間修正。

什麼時候要用 UNIQUE?

當你想確保「某個欄位的值不能重複」時,就可以用 UNIQUE。

常見的例子:

  • 電話:一支電話只能屬於一個會員
  • Email:一個 Email 只能註冊一個帳號
  • 身分證字號:雖然現實中有重複的情況,但如果你的系統規定不能重複,就可以用 UNIQUE
  • VIP 編號:每個 VIP 編號只能對應一個會員

UNIQUE 限制重點整理

這篇文章介紹了 UNIQUE 限制的概念:

  1. 問題:表單設計好了,但怎麼確保資料不會違反規則?
  2. 解法:在欄位上加 UNIQUE 限制
  3. 效果:資料庫會自動檢查,如果值已存在就拒絕新增
  4. 好處:自動檢查、資料一定正確、在源頭擋住錯誤
  5. 使用時機:當你想確保某個欄位的值不能重複時

UNIQUE 是資料庫「限制」功能的其中一種。後續的文章會繼續介紹其他種類的限制,幫助我們確保資料的正確性。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 一對多關係要怎麼確保?
  • 用 UNIQUE 限制防止重複
  • 在電話欄位加上 UNIQUE
  • UNIQUE 限制的好處
  • 自動檢查,不用擔心人為疏失
  • 資料一定正確
  • 在源頭就擋住錯誤
  • 什麼時候要用 UNIQUE?
  • UNIQUE 限制重點整理