Dev.
It is very specific.
To do this, there are several ways.
I think the best is to remove the enum values from the list at the loading of it, so the user cannot do any mistake.
And if you care about a security injection, you can process a second test before to save. (check() function)
TODO :
1. In you view, instance a model searching for all entries of the concerned user.
2. Browse every entry, and for each entry, read the associated enum value (loop)
3. In this loop, for each enum value found, remove it from your enum array list.
Is it clear ?
TODO in the check() function of your table : (very strong protection if you need it)
1. Instance the same kind of model searching for all previous entries of the user
2. stack in an array all the enums values
3. Use in_array() function to check if the enum value to add is in the array.
Of course, if you want to test this second code, you must disable the first one.
Giving you the code for all this is long, and I prefer also you search a bit by yourself.
You have the whole map.
EDIT : IT can work not only for enumerations, but also for lists, or watever datas.
Hope it helps.