Нет единого ответа на ваши вопросы.
Я могу поставить 3 уровня на 2 сервера, 1 сервер, 3 сервера.
Каждый уровень можно логически разделить на несколько уровней ...
базу данных можно разделить на фактическую базу данных, слой доступа к данным, ORM, теоретически вы можете поместить каждый слой в один компьютер, но это будет неэффективно.
ТАК - ответ на ваш вопрос - столько, сколько вам нравится.
При решении об отделении я учитываю производительность и безопасность, некоторые также учитывают сложность.
Я использую ORM, например, nHibernate от уровня приложения до БД и WCF от уровня представления до уровня приложения. (в мире .NET).
(могут быть n-уровневые приложения на базе dcom, но эта технология устарела, и я не буду использовать ее в новых проектах)