Let’s say I have a mysql table, called foo with a foreign key option_id constrained to the option table. When I create a foo record, the user may or may not have selected an option, and ‘no option’ is a viable selection. What is the best way to differentiate between ‘null’ (i.e. the user hasn’t made a selection yet) and ‘no option’ (i.e. the user selected ‘no option’)?
Right now, my plan is to insert a special record into the option table. Let’s say that winds up with an id of 227 (this table already has a number of records at this point, so ‘1’ isn’t available). I have no need to access this record at a database level, and it would act as nothing more than a placeholder that the foreign key in the foo table can reference.
So do I just hard-code ‘227’ in my codebase when I’m creating ‘foo’ records where the user has selected ‘no option’? The hard-coded id seems sloppy, and leaves room for error as the code is maintained down the road, but I’m not really sure of another approach.
Do you really have to differentiate between “no option” and “hasn’t made a selection yet”?
If so, you could add an extra column to the ‘foo’ table “option_selected” that’s true if they’ve selected an option and false if not. That way, you call tell whether a NULL for option_id means “no option” or “not selected yet”.