Mysql
跨多個表的 SQL 唯一性
我有兩個 SQL 表:使用者和客戶端。
users 表中的每一行在 clients 表中都有一組客戶端,由 users 表
id
欄位和 clients 表user_id
欄位連結。users 表有一個
username
唯一的欄位。客戶表有一個
user_id
欄位和clientname
欄位,它們一起是唯一的(即clientnames
可以存在多次,但必須不同user_ids
)我的問題是:如何添加強制
username
使用者表中的clientname
欄位和客戶表中的欄位之間唯一性的規則?甚至可能嗎?即 no
username
可以與 a 相同clientname
,並且 noclientname
可以與 a 相同username
。
您可以有第三張表來儲存兩者。像這樣的東西:
unique_ids ---------- 辨識(唯一) used_where(使用標識符的表的名稱/ID) 使用者 ----- 使用者名(FK 到 unique_ids.identifier) 客戶 ------- 客戶端名稱(FK 到 unique_ids.identifier)
這樣,兩個表共享一個公用表,其中包含需要唯一的值,並且可以在該共享表中輕鬆實施唯一性約束。您還需要一個簡單的插入觸發器(在兩個表上),它將檢查該
used_where
欄位以確保該標識符尚未被另一個表使用(因為如果我理解您的要求,username
必須是唯一的users
但clientname
不需要在 ) 中是唯一的clients
。如果您不想引入新結構並修改現有結構,您可以嘗試使用 on-insert trigger on
clients
並users
檢查以確保新記錄不包含現有使用者名/客戶名。