Прав си – №1 е най-добрият вариант.
Разбира се, бих го поставил под въпрос на пръв поглед (заради прекия път), но познаването на бизнес правилото, за да се гарантира, че служителят е свързан само с една компания – има смисъл.
Освен това ще имам външен ключ, свързващ companyid в таблицата на служителите с companyid в таблицата на офиса. В противен случай позволявате на служител да бъде свързан с фирма без офис. Освен ако това не е приемливо...
Тригерите са последна мярка, ако връзката не може да бъде демонстрирана в модела на данните, а обслужването на логиката от приложението означава, че логиката е централизирана - няма възможност за възникване на лоши данни, освен ако някой не отмени ограничения (което означава, че имате по-големи проблеми ).