У меня есть требование для ведения ревизий для книг документации программного обеспечения в моем проекте. У меня есть следующие таблицы:
- Книги: book_id, book_name, book_category
- Book_revisions: Book_id (FK), book_revision_id, book_release_ID (FK), book_developer_id (FK), book_pages, no_of_days, book_start_date, book_finish_date, book_version, latest_flag
- book_Releases: release_id, release_name, release_date
- Пользователи: developer_id, developer_email, developer_name
Дата выпуска - та, которая будет использоваться для поиска последней версии. версия автоматически увеличивается и является уникальной для выпуска. Latest_flag устанавливается в Y, если версия является последней для этого выпуска.
Теперь, когда я пытаюсь получить список книг только с последними выпусками, вот запрос, который я использую:
select book_revision_id, book_id, book_release_ID, book_developer_id, book_pages, no_of_days, book_start_date, book_finish_date, book_version
from book_revisions r
where latest_flag = 'Y'
and release_id = (select r1.book_release_id from book_revisions r1
left join book_releases a on a.release_id = r1.book_release_id
where r1.book_id = r.book_id and r1.latest_flag='Y' and rownum=1
order by rel.release_date desc)
and latest_flag='Y'
Кажется, это работает, но я пытаюсь выяснить, является ли это наилучшим способом или существуют какие-то стандарты для разработки и запроса схемы для таких требований к изменениям?
Добавление образцов данных согласно одному из комментариев: