Я бы использовал опцию №1, 3 внешних ключа, допускающих обнуление. Это позволяет вам использовать фактические связи с внешними ключами базы данных, что не подходит вариантам № 2, № 3 и № 4. Из-за этого вы получите:
- самый простой и быстрый поиск дополнительной информации
- Неиспользуемое дисковое пространство минимально
- Логика программирования для определения того, какой тип не является сложным (хотя и немного более сложным, чем если бы у вас была возможность «двух полей»).
Что касается второй части вашего вопроса, я думаю, что у меня будет один обнуляемый внешний ключ к другой таблице для хранения специфичных для бизнеса полей.
РЕДАКТИРОВАТЬ: Есть одна причина, чтобы рассмотреть вариант № 2 ... если вы ожидаете, что возможно, что число типов может увеличиться с 3 до 10 или 100, система вариант № 1 будет становиться все более раздражающим.