One simple way to do this is simply to insert the data and ignore the error.
For example, let us assume that Vendor A provides services S1, S2 and S4.
The UI displays the appropriate page, the user checks the fields for S3 and S6, and you have to save this information.
Since you know that S1,S2,S3,S4,S6 are checked, you can just go ahead and blindly insert these records, and ignore the errors that result when attemptng to re-insert S1,S2 and S4.
Or, you can build a list containing S1, S2 and S4 when you display the screen the first time. When the user wants to save the information, only send the values that are not in this list, in this case, S3 and S6.
There are many simple ways to tackle this problem. Just use any one of them.
Hope that helps.
Ravi