I need to keep track of the status for a person who registers for an event. This is going to be part of a tool that is administered by non-programmers. Various events will have different sets of status values, and it is possible for several events with distinct or overlapping attendees to be stored in the same table. The question is: What is the best way to allow for this flexibility? I see three options:
ONE: Use an enum containing a super set of all possible status values:
CREATE TABLE user_event (
...
status enum('blah','bleh','blih','etc'),
...
);
TWO: Use a free form text field:
CREATE TABLE user_event(
...
status VARCHAR(30),
...
);
THREE: Use a join table
CREATE TABLE status_event (
id INTEGER auto_increment unique key,
event_id INTEGER foreign key references event(id),
status VARCHAR(30)
);
CREATE TABLE user_event (
...
status INTEGER foreign key references status_event(id),
...
);
and of course, FOUR: Something I didn't think of
In cases ONE and TWO, because the status field is or allows a super set of all appropriate values, I'll need to run some extra code to validate values. In case THREE, all and only legal values are in the join table.
What would you suggest is the best technique here? Why?
Thanks!