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),
)'
// КНИГИ
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),
)'