2010-07-21 106 views
4

我在我的數據庫中有用戶表。條件MYSQL的唯一約束條件

用戶具有字段name,company_id和status:布爾值,1-實時,0-刪除。

當用戶被刪除,他的狀態設置爲0。

實時用戶名在公司的組合應該是唯一的。刪除用戶後,我不介意爲用戶創建同名的公司。

我的問題是我怎麼定義uniuqe限制爲字段名稱,COMPANY_ID和狀態= 1(這不是一個uniuqe限制在這三個領域監守我不介意的組合名稱company_id- 0會在表格中出現幾次)。

感謝,

德沃拉

回答

3

刪除用戶的使用NULL值。
唯一鍵允許無限數量的NULL值。

更新:不要觸摸用戶名,NULL在狀態字段就足夠了。

+0

面對NULL意圖的蒼蠅排列(未知或不適用),但它是實用的(我是所有的實用主義)。 – paxdiablo 2010-07-26 06:10:02

1

您正在使用哪種編程語言?

你的邏輯shoule如下

select * from Table_name where name='' AND company_id = '' AND status = 1 

if this return any rows give uniqueness error to the user else create it. 
0

我會創造另一個列來存儲已刪除用戶的以前的名字,當他們刪除設置自己的真實姓名爲NULL(以及設置狀態到0)。

然後對名稱和公司有一個唯一的限制。 NULL不會影響唯一性(因爲NULL != NULL),如果需要,您仍然可以恢復用戶的原始名稱。

所以刪除操作是一樣的東西:

update users 
    set prev_name = name, 
     name = null, 
     status = 0 
where name = 'paxdiablo' and company = 'SmallGreen'; 
+0

謝謝大家! – Dvora 2010-07-26 05:46:11

0

它會更容易,如果你拆「活」和「刪除」,讓他們有自己的TINYINT /布爾列?

-1

我會用deleted_at(datetime)替換狀態字段。當用戶處於活動狀態時,其值將爲NULL,但在刪除時將設置爲當前日期時間。

接下來,我將在用戶名& deleted_at字段上添加唯一索引,這將允許我使用相同的用戶名(至少1秒間隔)刪除多個用戶。