2010-09-28 5 views
1

Je veux mettre en œuvre une sorte de XOR contrainte sur les clés étrangères MySQL 5.1XOR Constraint Mysql

Il y a ce tableau, disons entité qui peut faire référence à deux types de valuesets différents représentés par les tableaux Valsa et ValsB. Maintenant je voudrais implémenter une contrainte qui s'assure que exactement l'un de ces deux est mappé, et l'autre ne l'est pas.

Dans Oracle, vous pouvez utiliser quelque chose comme

CHECK (NVL2(FK_A,1,0)+NVL2(FK_B,1,0)=1)); 

mais pour autant que je le comprends MySQL ne supporte pas vraiment les contraintes de vérification (encore).

Des idées?

+0

Je ne comprends pas pourquoi vous ne la mettre en œuvre avec plus de clarté: 'CHECK ((FK_A EST NULLE ET FK_B IS NOT NULL) OR (FK_A IS NOT NULL et FK_B IS NULL))'; –

+0

oui vous avez raison. votre déclaration est plus lisible. mais ne m'aide toujours pas. mais néanmoins je vais utiliser votre suggestion dans notre application Oracle. ty –

Répondre

2

Correct. MySQL ne supporte pas les contraintes de vérification. La clause CHECK est analysée mais ignorée par tous les moteurs de stockage.

Vous devez appliquer la condition XOR côté client.

+0

ok merci. J'espérais qu'il y a une autre façon de réaliser cela sur le côté db. ce qui me préoccupe, c'est qu'un futur programmeur pourrait superviser cette logique s'il touchait seulement la couche db. par exemple en écrivant un script d'importation. –