Обычно существует разделение объектов между различными слоями приложения, это означает, что вы можете иметь объект Report, который отображается непосредственно в вашу базу данных, и в то же время иметь другой набор объектов, которые используются для взаимодействия с клиентами, которые вы также можете иметь третий набор объектов, ваш бизнес-объект, который будет содержать логику, соответствующую вашему приложению. Обратите внимание, что вам нужно будет поддерживать логику, которая конвертирует между этими объектами, может быть, шаблон строителя или что-то подобное. В качестве небольшого примера рассмотрим ваш случай, вы можете иметь:
- Отчет: класс с отображением 1 к 1 в БД, позволяет легко сохранять и извлекать объекты
- ReportDAO: содержит те же поля, что и отчет, но с дополнительными функциями, которые приложение может использовать при манипулировании этими отчетами (сейчас ничего не могу придумать)
- ReportDTO / ExtendedReportDTO: у вас может быть несколько классов с наследованием или без него, которые будут содержать только поля + методы получения / установки и используются для связи с клиентами.
Это может быть неочевидно при использовании этого простого примера, но разделение вашего объекта значительно упростит расширение и модификацию вашего приложения в дальнейшем. В настоящее время у вас может быть одна и та же информация на всех уровнях, но позже это может измениться, также неплохо бы не раскрывать свой бизнес-объект, поэтому, если вы используете класс Report в своем приложении, не стоит делиться это в API например. Поэтому я бы сказал, что здесь вы можете использовать наследование, но для меня, по крайней мере, я не считаю хорошей идеей иметь эти же объекты на уровне приложения и БД.