Создайте свои классы Java, используя принципы ОО.
Создайте свою БД с использованием SQL и принципов нормализации.
Затем, бегите на полной скорости в вызов, который является объектно-реляционным отображением! : -)
Такие технологии, как Hibernate и Ibatis, специально разработаны, чтобы помочь с этим, это хорошо документированная проблема. Дополнительные технологии, такие как Spring, могут сделать их использование действительно простым и приятным в работе.
Абстрагируйте ваше постоянство на уровне DAO (объекта доступа к данным), например, если у вас есть много классов, таких как Vehicle и Animal, у вас есть DAO, такие как VehicleDao и AnimalDao, чтобы отделить то, как они общаются с БД, от того, что они в основном делают в вашей системе.
FWIW, я рекомендую делать именно это: хороший дизайн приложения на стороне приложения, хороший дизайн БД на стороне данных. После этого всегда есть способ отобразить два из них при сохранении и извлечении данных класса в и из БД, и это намного лучше IMO, чем компрометация одного из ваших отдельных уровней, чтобы «помочь» другому.