A generic relation seems to be the solution. But it will complicate things even further.
It seems to me; your model structure is already more complex than necessary. I would simply merge all three Answer models into one. This way:
Answer_Riskwould work without modification.- You can set
residentto None (NULL) in case of anAnswer_A. - You can return different string represantations depending on
resident == None. (in other words; same functionality)
One more thing; are your answers likely to have more than one risk? If they’ll have none or one risk you should consider following alternative implementations:
- Using a one-to-one relationship
- Demoting risk as a field (or any number of fields) inside
Answerclass.
My main concern is neither database structure nor performance (although these changes should improve performance) but code maintainability.