Как в SQL обрабатывать отсутствующие значения внешнего ключа при добавлении новых записей?
Пожалуйста, простите общий характер этого вопроса, но я изо всех сил пытаюсь найти хороший совет о том, как справиться с этой проблемой.
Предположим, у меня есть две таблицы SQL, следующие:
Сотрудники: id, имя, department_id
1, "Джон", 1
2, "Мария", 3
3, "Кэти", 2
4, "Карен", 1
Отделы: id, имя
1, "продажи"
2, "администратор"
3, "цех"
Когда я создаю нового сотрудника, я хотел бы позволить пользователю приложения оставить отдел пустым для начала. Но когда я создаю запись базы данных, я, очевидно, должен предоставить department_id значение внешнего ключа. В данный момент я использую -1, который никогда не может быть законным внешним ключом.
Моя проблема возникает при попытке написать SQL для извлечения всех уникальных сотрудников без каких-либо дубликатов.
Если я просто использую...
SELECT e.id, e.name, d.department FROM Employees e INNER JOIN Departments d ON e.department_id = d.id;
..тогда я не получаю никого из новых сотрудников (то есть тех, кто еще не был назначен в отдел). Это означает, что пользователь приложения не может получить доступ к этим новым сотрудникам и поместить их в отдел.
Если с другой стороны, я использую...
SELECT e.id, e.name, d.department FROM Employees e INNER JOIN Departments d ON e.department_id = d.id OR e.department_id = -1;
..Я получаю много дубликатов записей, потому что каждый сотрудник без отдела включается в результат один раз для каждого отдела.
Я был бы очень признателен за несколько советов о том, как лучше всего справиться с этим.
Что я уже пробовал:
Я пробовал добавить фиктивный отдел в качестве первой записи и назначить туда новых сотрудников, но затем мне приходится отфильтровывать это из пользовательского интерфейса, когда я делаю такие вещи, как представление списка отделов, что кажется далеко не идеальным.