restrict по стандарту sql дефолтный. И самый оптимальный для задачи "мешать делать глупости".
FK надо ставить на все связи. Если только чётко и аргументированно не доказано обратное для каждого конкретного случая в отдельности.
При миграциях есть смысл блокировать таблицы? Или транзакции должно хватить?
Mysql? Все DDL не только не транзакционные, а ещё и вызывают неявный коммит.
Нужно ли явно блокировать таблицы - зависит от того, что вы собираетесь сделать. Обычно задача стоит как внести изменение, не затрагивая прод.