Работа с таблицами пересечений МНОГИЕ-КО-МНОГИМ

claygod

Новичок
Допустим, есть несколько таблиц - авторы, книги, издатели (пример ниже). Они соединяются через таблицы пересечений "многие ко многим". Т.е. у автора может быть много книг, у книги может быть несколько авторов и т.д. Как лучше организовать запрос и получение всей информации по одной книге с учётом того, что таблиц пересечений может быть гораздо больше? Можно ли добиться получения результата в один row? Если где-то описывалась методология организации работы с базой, организованной через таблицы пересечений, то просьба дать линк. Особо интересно было бы услышать (прочитать) личный опыт участников сообщества.

// КНИГИ
CREATE TABLE IF NOT EXISTS book(
book_id INTEGER PRIMARY KEY ASC,
book_title TEXT
)'
// АВТОРЫ
CREATE TABLE IF NOT EXISTS author(
author_id INTEGER PRIMARY KEY ASC,
author_name TEXT
)'
// ИЗДАТЕЛИ
CREATE TABLE IF NOT EXISTS publish(
publish_id INTEGER PRIMARY KEY ASC,
publish_name TEXT
)'
// ТАБЛИЦА ПЕРЕСЕЧЕНИЙ author-book
CREATE TABLE IF NOT EXISTS cross_author_book(
cross_id INTEGER PRIMARY KEY ASC,
cross_book INTEGER,
cross_author INTEGER,
FOREIGN KEY (`cross_book`) REFERENCES `book`(book_id),
FOREIGN KEY (`cross_author`) REFERENCES `author`(author_id),
)'
// ТАБЛИЦА ПЕРЕСЕЧЕНИЙ book-publish
CREATE TABLE IF NOT EXISTS cross_book_publish(
cross_id INTEGER PRIMARY KEY ASC,
cross_book INTEGER,
cross_author INTEGER,
FOREIGN KEY (`cross_book`) REFERENCES `book`(book_id),
FOREIGN KEY (`cross_publish`) REFERENCES `publish`(publish_id),
)'
 

С.

Продвинутый новичок
Как лучше организовать запрос и получение всей информации по одной книге
При таком запросе связь мчогие-ко-многим не участвует. Обычная один-ко-многин и по сему никаких заморочек не требуется.

Не путайте умозрительные связи в таблице при построении ее архитектуры и конкретные связи при выполнении какого-то частного запроса.
 

WMix

герр M:)ller
Партнер клуба
можно вытащить всю инфу одним запросом, используя subselect и group_concat, но лучше делай отдельные запросы, дай книгу, дай авторов книги, дай издателей книги. так прозрачнее!
 

claygod

Новичок
можно вытащить всю инфу одним запросом, используя subselect и group_concat, но лучше делай отдельные запросы, дай книгу, дай авторов книги, дай издателей книги. так прозрачнее!
Именно так прозрачно и делаю )), но думаю, вдруг да отстал от жизни...
А вопрос появился, т.к. рассматриваю возможность создания хранимой процедуры,
которая вернёт всё одним разом (подразумеваю запрос на plpgsql).
 
Сверху