2010-03-16 6 views
0

Disons que j'ai une table mysql, appelée foo avec une clé étrangère option_id contrainte à la table option. Lorsque je crée un enregistrement foo, l'utilisateur peut ou ne peut pas avoir sélectionné une option, et «aucune option» est une sélection viable. Quelle est la meilleure façon de faire la distinction entre 'null' (c'est-à-dire que l'utilisateur n'a pas encore fait de sélection) et 'aucune option' (c'est-à-dire que l'utilisateur a sélectionné 'aucune option')?Enregistrements "cas spéciaux" pour contraintes de clés étrangères

À l'heure actuelle, mon plan est d'insérer un enregistrement spécial dans la table option. Disons que ce dernier se termine par un identifiant de 227 (ce tableau a déjà un certain nombre d'enregistrements à ce stade, donc '1' n'est pas disponible). Je n'ai pas besoin d'accéder à cet enregistrement au niveau de la base de données, et cela n'agirait que comme un espace réservé que la clé étrangère de la table foo peut référencer.

Alors est-ce que je code simplement '227' dans mon code de base quand je crée des enregistrements 'foo' où l'utilisateur a sélectionné 'aucune option'? L'identifiant codé en dur semble désordonné, et laisse place à l'erreur car le code est maintenu sur la route, mais je ne suis pas vraiment sûr d'une autre approche.

+0

Si vous deviez comparer quelque chose à un identifiant de votre base de données, vous devrez probablement le coder également. Alors disons que vous avez d'autres options sur lesquelles vous voudriez tester, vous auriez probablement besoin de les coder en dur d'une certaine manière, probablement comme enums ou constantes, peu importe ce que votre langage permet. Ouais ça se sent mal mais quelle est l'alternative? –

Répondre

0

Avez-vous vraiment avoir faire la différence entre "pas d'option" et "n'a pas encore fait de sélection"?

Si c'est le cas, vous pouvez ajouter une colonne supplémentaire à la table 'foo' "option_selected" qui est vraie si elles ont sélectionné une option et false sinon. De cette façon, vous appelez tell pour savoir si une valeur NULL pour option_id signifie "aucune option" ou "non encore sélectionné".

Questions connexes