Как канонично организовать структуру таблиц в базе данных MySQL?
Вот Вам пример сильно нормализованной модели под заявленные хотелки (насколько я их понял).SET FOREIGN_KEY_CHECKS=0;

CREATE TABLE department
(
	id INT NOT NULL,
	name VARCHAR(50) NOT NULL,
	PRIMARY KEY (id)
) 
;
CREATE TABLE department_property
(
	department_id INT NOT NULL,
	property_id INT NOT NULL,
	UNIQUE KEY UQ_department_property_department_id_property_id(department_id, property_id)
) 
;
CREATE TABLE employment
(
	id INT NOT NULL,
	worker_id INT NOT NULL,
	plant_id INT NOT NULL,
	PRIMARY KEY (id),
	UNIQUE KEY UQ_employment_worker_id_plant_id(worker_id, plant_id)
) 
;
CREATE TABLE employment_department
(
	employment_id INT NOT NULL,
	department_id INT NOT NULL,
	UNIQUE KEY UQ_employment_department_employment_id_department_id(employment_id, department_id)
) 
;
CREATE TABLE plant
(
	id INT NOT NULL,
	name VARCHAR(50) NOT NULL,
	PRIMARY KEY (id)
) 
;
CREATE TABLE property
(
	id INT NOT NULL,
	name VARCHAR(50) NOT NULL,
	value VARCHAR(50) NOT NULL,
	PRIMARY KEY (id)
) 
;
CREATE TABLE worker
(
	id INT NOT NULL,
	name VARCHAR(50) NOT NULL,
	PRIMARY KEY (id)
) 
;
SET FOREIGN_KEY_CHECKS=1;
Но, как уже сказали, нормализация не является самоцелью! С запросами к этой модели у программиста уже возникнет некоторая Камасутра, а будут ли они оптимальны по перформансу - вообще отдельная тема. Так что, не устану повторять: оптимизация структуры БД заключается не в достижении максимально возможной NF, а в том, чтоб на ней оптимально выполнялись именно те запросы, которые на ней должны выполняться ))
Учитесь селектить  Join'ы. База самая обычная один-ко-многим, ничего в ней нет. Bull вполне допустим, если вписывается в вашу логику.