I could have a nullable field or I could do basic normalisation, having another table which may or may not join to a row in this table.
My instinct was to use the second method, as this is the "right" (normalised) way of handling this. However, thinking about this, it can have drawbacks.
- The whole entity is not easily visible in its table (you have to - first find and then - jump to its linking tables)
- you now have to remember to join the table(s)
- It could lead to loads and loads of tables (I don't know if this is an issue for performance)
What do you usually do? It it worth creating a new table just to have an optional property for an entity?