Это необычное требование. Если бы я застрял с этим (и я бы действительно отодвинулся, чтобы убедиться, что это действительно было требованием), я разработал бы это следующим образом:
Создайте обычный внешний ключ из таблицы a в таблицу b с родительским элементом и b с дочерним.
Добавить триггер в таблицу a, который вставляет запись в таблицу b, если она не существует, когда в таблицу вставляется запись. Добавьте еще один триггер в таблицу b, который удаляет в таблице запись, если последняя связанная запись в таблице b удалена.
В качестве альтернативы, вы можете поместить вставки в обе таблицы в хранимой процедуре. Удалите все права на вставку в таблицу, кроме как через процедуру. Вам по-прежнему потребуется отношение внешнего ключа от таблицы a к таблице b и триггер для таблицы b, чтобы гарантировать, что при удалении последней записи в таблице запись будет удалена. Но в этом случае вы могли бы покончить с триггером на столе.
Я бы использовал первый сценарий, если в таблице b нет информации, которую нельзя найти по триггеру в таблице a, скажем, одно или несколько обязательных полей, которые не имеют значения, которое вы можете получить из таблицы a.