Тоже хотел бы порекомендовать ASP.NET. Помимо разработки под .NET можно работать и под Mono. Для обоих случаев есть драйвер Firebird (.NET Data Provider Mono Provider, есть даже ASP.NET Provider — но я им не пользовался). Наличие этих драйверов позволяют достаточно просто работать с базой данных применяя ADO.NET.
Из плюсов помимо перечисленного — MSDN, достаточно большое русскоязычное сообщество (если говорить про .NET, в Mono дела значительно скромнее). Если приложение корпоративное, то софт для разворачивание web-сервера будет бесплатным (если использовать Linux+Mono+Firebird+Mono Provider+Apache+mod_mono). Если что либо прийдеться изучать, то, на мой взгляд, изучение С# был бы весьма удачным выбором, т.к. данный язык не ограничен в исспользовании только в web.
Сугубо субьективное мнение: я думаю, что в данной ситуации стоит попробовать удовлетворить требования друга, но на будущее для себя поставить «галочку».
Позволю себе не согласиться:
1. Типы связей указываются уже на этапе концептуального проектирования.
2. Связей типа многие-ко-многим на этапе логического проектирования нет.
3. Типы полей (не понял, что это «типы данных полей» или «атрибуты» — не важно, т.к. справедливо для обоих случаев) указываются на этапе логического проектирования (более того, в первом приближении, они могут быть рассмотрены и на этапе концептуального проектирования).
4. Денормализация — далеко не единственный способ ускорить запросы, в первую очередь я бы обратил внимание на индексы, так же можно оптимизировать запрос (например не выбирать множество по условию из результатов соединения, а соединять результаты условия).
Очень сильно поддерживаю идею описания предметной области. Причем рекомендую делать это не в уме, а на бумаге. До тех пор пока схема в уме — она «простая и ясная», но как только начинаешь упорядочено излогать свои мысли на бумаге возникает уйма вопросов.
Использовал Ghost — очень простой инструмент позволяющий решить описанную задачу. При использовании проблем не возникало. Единственное, что могу добавить это то, что Ghost позволяет создавать образы как дисков, так и разделов (что в данном случае более актуально).