Задавайте вопросы, мы ответим
Вы не зашли.
Как организовать БД в которой, например, есть две таблицы:
1. Книги (Номер, Автор, Название)
2. Читатели (Номер, Имя, Прочтенные книги)
Вопрос в том какими должны быть связи между таблицами (прочтенных книг может быть много) и как это сделать в MySQL. Подскажите материалы.
Неактивен
можно сделать так:
1 таблица: Книги (Номер, Автор, Название)
2 таблица: Читатели (Номер, Имя)
3 таблица: Прочитано (Номер(соответствует номеру читателя),Номер(соответствует номеру прочитанной книги))
Неактивен
А как такое решение скажется на производительности БД, например, в случае когда каждому из десяти тысяч читателей будет соответствовать по десятку книг.
Практично ли использовать множество SET, и что делать если таких полей много (прочитанные книги, любимые книги...)?
Неактивен
Mirexzpalich написал:
можно сделать так:
3 таблица: Прочитано (Номер(соответствует номеру читателя),Номер(соответствует номеру прочитанной книги))
Именно так делать и нужно.
Mirexzpalich написал:
Практично ли использовать множество SET, и что делать если таких полей много (прочитанные книги, любимые книги...)?
А как вы собираетесь использовать SET? Он может иметь максимум всего 64 члена.
Неактивен
syscreat написал:
А как такое решение скажется на производительности БД, например, в случае когда каждому из десяти тысяч читателей будет соответствовать по десятку книг.
Практично ли использовать множество SET, и что делать если таких полей много (прочитанные книги, любимые книги...)?
Во-первых, если вы узнаете как сделать проще дайте мне знать.
Во-вторых, Вы сразу все десять тысяч читателей и их любимые книги выводить будете?
В-третьих, для любимых, нелюбимых и т.п. книг создать лучще для каждой категории по одной таблицы по примеру
3 таблица: Прочитано (Номер(соответствует номеру читателя),Номер(соответствует номеру прочитанной книги))
Неактивен
Т.е. выглядеть это должно как:
CREATE TABLE IF NOT EXISTS books (
book_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, author VARCHAR(16) NOT NULL,
name VARCHAR(16) NOT NULL)
CREATE TABLE IF NOT EXISTS readers (
reader_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(16) NOT NULL)
CREATE TABLE IF NOT EXISTS common (
reader INT NOT NULL,
book INT NOT NULL)
А как сейчас составить запрос на список пользователей по списку прочтенных книг (или по примеру кода нужно получить список пользователей и по списку прочтенных и по списку любимых книг)?
Неактивен
Т.е. вам надо, что для такой то книги вывести всех людей, прочитавших эту книгу?.
Тогда:
select books.name, readers.name from books,readers,common WHERE book_id=book AND reader_id=reader AND book='id книги'
Отредактированно Mirexzpalich (20.03.2010 22:52:01)
Неактивен