Masz rację – #1 to najlepsza opcja.
Zgoda, na pierwszy rzut oka zakwestionowałbym to (ze względu na skróty), ale znajomość reguły biznesowej, aby zapewnić, że pracownik jest powiązany tylko z jedną firmą – ma to sens.
Dodatkowo miałbym klucz obcy powiązujący identyfikator firmy w tabeli pracowników z identyfikatorem firmy w tabeli biura. W przeciwnym razie pozwalasz, aby pracownik był powiązany z firmą bez biura. Chyba że jest to do przyjęcia...
Wyzwalacze to ostateczność, jeśli relacji nie da się wykazać w modelu danych, a obsługa logiki z aplikacji oznacza, że logika jest scentralizowana - nie ma szans na wystąpienie złych danych, chyba że ktoś zrzuci ograniczenia (co oznacza, że masz większe problemy ).