Допустим, у нас есть Положение сущности и Навык. Отношения между ними должны быть IMO многие-ко-многим, потому что для разных позиций может потребоваться один навык, а для одной позиции может потребоваться несколько навыков. Это означает, что на уровне базы данных вам потребуются 3 таблицы: позиции, навыки и position_skill (которые будут служить промежуточной таблицей между первыми двумя).
На уровне кода вам потребуются классы сущностей Position и Skill, связанные Отношение "has-a": класс Position содержит набор навыков внутри.
Чем вам понадобятся классы репозитория (DAO), которые будут отвечать за извлечение сущностей из базы данных. При использовании простого JDB C вы должны реализовать методы для операций CRUD (создание, чтение, обновление, удаление) для обеих сущностей. Сопоставление ResultSet с классом сущностей может быть реализовано либо в классах репозитория, либо в отдельных классах сопоставления (в качестве параметра возвращается экземпляр Position или Skill ResultSet) Сложной задачей (без использования каркасов) будет внедрение разбиения на страницы с поддержкой фильтрации и сортировки.
Чем вам понадобятся классы обслуживания, которые должны реализовывать бизнес-логику c, когда вы решите ее добавить.
Если вы реализуете веб-приложение или REST- / Web-сервисы, вам потребуются классы контроллеров, которые будут обрабатывать HTTP-запросы.
Цепочка событий выглядит следующим образом: клиентские вызовы контроллер, контроллер вызывает службу, хранилище вызовов службы, которая извлекает данные из базы данных. Эта многоуровневая структура используется во многих приложениях и может быть реализована простым java с использованием синглетонов или с использованием каркасов Spring / java EE.
Удачи.