Чего именно хотел добиться предыдущий разработчик таким кодом(отсутствием связей, внешних ключей и т.д.)?
Ничего, он просто хотел сделать и сдать свою работу. Да это полнейший говнокод, но как сказал
Виталий Хоменко код скорее всего вышел таким из за опыта и возможностей разработчика. Мы все делаем проекты на основе своего опыта и навыков - то что сейчас кажется сделанным идеально, через год нам же покажется говнокодом. И тут уж ничего не поделаешь
Опыта у меня не очень много, поэтому хотелось бы узнать мнение более опытных людей, что с этим кодом делать?
Оставить как есть и вносить мелкие правки или всё таки предложить переписать?
Таких проектов полным полном и нужно уметь с ними работать. Взять и переписать все с нуля для таких проектов не вариант, т.к.:
1. Как бы код не был написан, в данный момент он выполняет свою задачу - приносит деньги клиенту
2. Переписывание кода всегда несет за собой кучу рисков - нет гарантии что переписанный проект по коду будет лучше чем существующий (объективно, даже опытные программисты не могут это гарантировать, а если у Вас мало опыта тем более ни о каких гарантиях речи идти не может), нет гарантий что Вы учтете все тонкости предметной области (известные предыдущему разработчику)
3. Переписывание кода всегда всегда занимает много времени, мало просто написать новый код, нужно еще протестировать что бы после этого ничего не сломалось в системе, а это порой очень проблематично
Что бы решать что с кодом делать - нужно понимать объем правок который в него предполагается внести. Если правки мелкие - вносить их без переписывания кода, если правки прям глобальные - тогда переписывать конкретный кусок кода
Что мне сказать заказчику по поводу правок?
Объяснить что код плохой, объяснить что его сложно поддерживать сейчас а в дальнейшем будет еще сложнее, объяснить что не смотря на это мелкие правки можно вносить без переписывания, а для крупных правок придется некоторые куски кода переписывать. Ну и естественно предупредить клиента о том что переписывание займет дополнительное время на сам процесс и тестирование