Могу ли я получить некоторый вклад в мой личный проект MySQL?В частности, со многими ко многим отношениям - PullRequest
0 голосов
/ 20 февраля 2019

Я недавно закончил университет и хочу быть в курсе моих навыков работы с данными.Я делаю это, настраивая свою личную базу данных на своем локальном ноутбуке с помощью MySQL Workbench.

Цель моей базы данных - записывать, какие книги я читаю с конца 2018 года. Я начал с нуля,используя ERD для концептуального проектирования моей базы данных и понимания того, как у них складываются отношения между различными объектами.У меня определено несколько отношений многие ко многим, что приводит к моему первому основному вопросу

Являются ли отношения «многие ко многим», которые я придумал, логичными и имеют смысл?

(Я включил ссылку на мой ERD, чтобы помочь вам, ребята, визуализировать мою БД)

Я вижу это, когда дело доходит до разработки отношений «многие ко многим», так:

Множество разных книг могут иметь много разных жанров, связанных с ними. Следовательно, необходимо установить связь между множеством между таблицей Книги и таблицей жанров.

Многие разные читатели могут читать много разных книг, и многие читатели могут читать много разных книг Следовательно, возникает необходимость во многих отношениях между Книгой и Читателем.

Мой ERD

Я почти уверен, что эти отношения логически логичны, но всегда полезно второе мнение.

Второй главный вопрос:

(при условии, что отношения между многими верны) Как я могу создать JOIN, который позволит мне визуализироватьжанр связан с книгами в моей базе данных и другим JOIN, чтобы визуализировать, какие читатели читают какие книги?

Я привык использовать JOINS в рамках базовых табличных отношений, но у меня нет опыта работы со многимимногим таблицам составных ключей при проектировании объединений.Как мне обеспечить правильную связь всех таблиц и получить действительные записи для показа?

1 Ответ

0 голосов
/ 20 февраля 2019

Да, вам нужны отношения «многие ко многим»: «Книга / Жанр» и «Книга / Читатель».

Для «Книга / Автор» вам, вероятно, также необходимо множество «многие ко многим». Некоторые книги имеют нескольких авторов.

Чтобы запросить авторов, которые я прочитал:

SELECT a.*
FROM Reader AS r
JOIN Book_Reader AS br ON r.Reader_ID = br.Reader_ID
JOIN Book_Author AS ba ON br.Book_ID = ba.Book_ID
JOIN Author AS a ON ba.Author_ID = a.Author_ID
WHERE r.Reader_ID = 'BillKarwin'

Я немного обманул, потому что знаю, что br.Book_IDсравнимо с ba.Book_ID, и мне не нужны никакие атрибуты из таблицы Book для этого запроса, поэтому я пропустил соединение с таблицей Book.

Связь между Reader и Genre не требуется и, вероятно, приведет к аномалии данных.Например, если я читаю книгу, которая помечена как научно-фантастический роман, но нет связи между моей записью Reader и этим жанром, я действительно прочитал ее?

...