Вот Вам пример сильно нормализованной модели под заявленные хотелки (насколько я их понял).
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, а в том, чтоб на ней оптимально выполнялись именно те запросы, которые на ней должны выполняться ))