-- Связь сотрудник — участки (многие ко многим): один сотрудник может быть назначен на несколько участков CREATE TABLE IF NOT EXISTS employee_districts ( employee_id VARCHAR(50) NOT NULL REFERENCES employees(id) ON DELETE CASCADE, district_id VARCHAR(50) NOT NULL REFERENCES districts(id) ON DELETE CASCADE, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (employee_id, district_id) ); CREATE INDEX IF NOT EXISTS idx_employee_districts_employee ON employee_districts(employee_id); CREATE INDEX IF NOT EXISTS idx_employee_districts_district ON employee_districts(district_id); COMMENT ON TABLE employee_districts IS 'Назначения сотрудников на участки; один сотрудник может быть на нескольких участках'; -- Перенос существующих назначений из employees.assigned_district_id INSERT INTO employee_districts (employee_id, district_id) SELECT id, assigned_district_id FROM employees WHERE assigned_district_id IS NOT NULL AND assigned_district_id <> '' ON CONFLICT (employee_id, district_id) DO NOTHING;