2011-08-05 14 views
1

は、私は次の表を持っている:外部キーのmysqlの

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

USER table { 
id INT 
} 

PROFILE.user_idは、USERテーブルのIDを指す外部キーですが、場合にのみPROFILE.apitype = 'main'

ので、基本的にPROFILE.user_idは、IDを参照していませんUSERテーブルの場合PROFILE.apitype != 'main'

これをMYSQLでどのように行うことができますか?

答えて

1

おそらく、triggerを使用して挿入/更新を実行し、apitypeの値をチェックすることができます。 MySQLのトリガーにエラーを投げるいくつかの方法もあります。 thisをチェックしてください。

0

これはロジックなので、データベースではなくアプリケーションで処理する必要があります。

profile-tableのuser_idをnullableとして追加することができます。接続はオプションで、使用するストレージエンジンによってはトリガーを試すこともできます(ただし、mysqlについてはあまり知らない)。

0

私はあなたがMysqlで簡単にこれを達成することはできないと思います。

Postgresの例では、apitypeがmainで、user_idがnullである必要があるかどうかを確認できるcheck制約があります。

Mysqlではこれはトリガでのみ行うことができ、それほど簡単ではありません。私はあなたにとって最も簡単な方法で、おそらく最も信頼できる方法は、アプリケーションでチェックすることだと思います。しかし、ヌルであってもuser_idに外部キーを設定することはできます。