Mysql

跨多個表的 SQL 唯一性

  • March 8, 2013

我有兩個 SQL 表:使用者和客戶端。

users 表中的每一行在 clients 表中都有一組客戶端,由 users 表id欄位和 clients 表user_id欄位連結。

users 表有一個username唯一的欄位。

客戶表有一個user_id欄位和clientname欄位,它們一起是唯一的(即clientnames可以存在多次,但必須不同user_ids

我的問題是:如何添加強制username使用者表中的clientname欄位和客戶表中的欄位之間唯一性的規則?甚至可能嗎?

即 nousername可以與 a 相同clientname,並且 noclientname可以與 a 相同username

您可以有第三張表來儲存兩者。像這樣的東西:

unique_ids
----------
辨識(唯一)
used_where(使用標識符的表的名稱/ID)

使用者
-----
使用者名(FK 到 unique_ids.identifier)

客戶
-------
客戶端名稱(FK 到 unique_ids.identifier)

這樣,兩個表共享一個公用表,其中包含需要唯一的值,並且可以在該共享表中輕鬆實施唯一性約束。您還需要一個簡單的插入觸發器(在兩個表上),它將檢查該used_where欄位以確保該標識符尚未被另一個表使用(因為如果我理解您的要求,username必須是唯一的usersclientname不需要在 ) 中是唯一的clients

如果您不想引入新結構並修改現有結構,您可以嘗試使用 on-insert trigger onclientsusers檢查以確保新記錄不包含現有使用者名/客戶名。

引用自:https://dba.stackexchange.com/questions/36000