2011-08-05 74 views
1

我有以下表格:外鍵的MySQL

PROFILE table { 
user_id INT, 
apitype enum('facebook' , 'main') 
} 

USER table { 
id INT 
} 

PROFILE.user_id是指向用戶表中的ID的外鍵,但只有當PROFILE.apitype = 'main'

所以基本上PROFILE.user_id並不是指一個ID在USER表中如果PROFILE.apitype != 'main'

如何在MYSQL中完成此操作?

回答

1

您可能可以使用在插入/更新之前觸發的trigger,並檢查apitype的值。甚至有一些方法可以在MySQL觸發器中拋出錯誤,例如請檢查this

0

好吧,因爲這是邏輯,應該在應用程序中處理,而不是在數據庫中處理。

您可以將profile_table中的user_id添加爲可爲空,從而使連接成爲可選項,並且根據您使用的存儲引擎可以嘗試觸發器(儘管在MySQL中不太瞭解它們)。

0

我認爲你不能在Mysql中以簡單的方式完成此操作。

例如在Postgres中,您有一個檢查約束,您可以在其中檢查apitype是否爲主,然後user_id必須爲null。

在Mysql中,你只能用觸發器做到這一點,並不容易。我認爲最簡單的方法,也許最可靠的方法是在您的應用程序中檢查它。但是你仍然可以在user_id上設置一個外鍵,即使它有時爲零