2011-08-05 80 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上设置一个外键,即使它有时为零