I have a table with three fields, User, City and Country, where exactly one of the fields must be non-NULL at all times. Can I use an SQL constraint for this or should I rethink what I’m doing?
The scenario is that my database should contain documents that can be attached to users, cities or countries. So a row in this table contains exactly one document for either a user, a city or a country. However, one should be able to search for all documents as well, regardless of what entity it has been “attached” to.
The reason I’m not using three different tables instead is that I want to avoid having to JOIN the three tables when searching for documents in all of the three places. I’m imagining that the kind of denormalization I’m attempting to use here will improve performance, but I’m not sure.
Thoughts?
If I understand properly, the following SQL should add the constraint you are looking for: