Я приступил к проекту, который побуждает меня расширять свои знания SQL. Я уже многому научился, но дошел до того, что вижу проблему, но не знаю достаточно, чтобы должным образом найти решение. Я попал в SO, Google и документы MySQL, но либо я задаю неправильные вопросы, либо я не знаю, как задать правильные. Мои данные структурированы с помощью трех основных таблиц, одна из которых имеет отношения M: N с двумя другими. Я храню эти отношения в другой паре таблиц, так как у меня сложилось впечатление, что это «лучший способ»:
books (book_id INT PRIMARY KEY, book_title VARCHAR)
authors (author_id INT PRIMARY KEY, author_name VARCHAR)
subjects (subject_id INT PRIMARY KEY, subject_name VARCHAR)
book_authors (book_id INT, author_id INT)
book_subjects (book_id INT, subject_id INT)
(Первые три таблицы на самом деле имеют более двух столбцов, но они не актуальны.)
Edit:
Очевидно, я отстой задавал четкие вопросы, но тогда я уже знал это. : -)
Проблема, которую я пытаюсь решить, заключается в том, как наиболее эффективно / действенно получать данные из базы данных в мое приложение. Как только я получу его там, я могу перестроить его так, как мне нужно, и я надеюсь, что смогу сделать это независимо от того, как данные «формируются» из базы данных. Было бы тривиально сделать с пятью отдельными SELECT * FROM …
заявлениями, и было бы тривиально сделать с «Франкенджоином» из нескольких продуктов, который я опубликовал ранее. Однако я знаю достаточно о SQL, чтобы заметить, что первый лишает ядро базы данных возможности выполнять свою работу. Я не знаю достаточно о SQL, чтобы сказать, является ли последний одинаково плохим.
Так как насчет этого: вместо того, чтобы спрашивать, что не так с решением, I придумал, каким будет ваше решение? Если бы у вас были данные, связанные таким образом, как бы вы выбрали бы их из базы данных? (И по каким причинам?) Возможно, вы даже по-другому расположите столы?