Вопрос №1 нужно ли для каждой таблицы создавать дополнительные таблицы для связи многие ко многим. Потому что по сути над слябом/деталью может выполнятся несколько работ, каждая работа из таблицы works может быть выполнена над каждым слябом/деталью?
Если по вашей предметной области такое возможно, то да.
Если нет, то нет.
Вопрос №2 могу ли я например сделать столбец id_slabs_works но он будет пустым например если столбец id_details_works будет заполнен и наоборот?
В теории - конечно можешь.
Но возникает встречный вопрос.
Если слэб и деталь (кстати, в твоём случае это part, а не details) по факту одни и те же атрибуты, то может их имеет смысл обобщить и засунуть в одну таблицу?
Вопрос №3 если мне нужно фиксировать когда сотрудник начал работу над деталью и когда закончил получается что нужно отдельная таблица?
Ну у тебя есть некоторый заказ и N смен, во время которых у тебя этот заказ выполняется. Раз нужно эти смены фиксировать - значит нужна таблица для них.
Поскольку если мы в таблице performance_work назначаем рабочим выполнение работ, получается что запись после уже внесения в таблицу нужно будет как бы перезаписывать , поскольку начало работы и ее окончание будут внесены позже чем назначение рабочему выполнение работ что как я понимаю не лучшее решение.
Вполне нормальное решение.
Рабочий начинает смену - в неё записывается время начала и статус "в работе".
Рабочий завершает смену - в неё записывается время завершение и статус "завершена".
Не думаю, что тебе следует заморачиваться с концепцией event sourcing.