Коллеги, подскажите, пожалуйста, решение. Есть таблица books с записями названий книг. Необходимо выводить списком авторов книг и названия соответствующих книг. Но дело в том, что автор может быть не один, а 2 или даже 3 и по каждому из них еще можно будет делать выборку. Как наиболее оптимально сделать, чтобы выводились автор(ы) и названия книг? Может быть, сделать доп. таблицу authors с полями id и name. А в таблице books сделать доп. поле id_author, где писать через запятую id авторов: «17, 36, 109». При выводе считать всё из таблицы authors в массив и написать функцию, которая заменял бы id_author на соответствующую фамилию. Или все это как-то можно попроще и получше делать?
А как же правила нормализации базы??? Потом замучаешься... Создай отдельную таблицу авторов с полями id и name. таблице books сделать доп. поле id_author. Правильно мыслишь... таким образом в таблице books будет несколько записей с одним и тем же id_author.
Похоже придется так сделать: В таблице books поля id (ид книги), name (название книги). В таблице authors поля id (ид автора), name (ФИО автора). И еще одна таблица books_authors с полями id_book (ид книги), id_author(ид автора) с записями какой автор какой-книге соответствует.
Зачем, не вижу смысла... Сделай как я написал, собственно ты так же в начале хотел. id_author сделай внешним ключом который будет ссылаться на authors.id Если будет отдельная таблица, тем самым еще усложнишь работу с базой, составление sql запросов.
Раз авторы и книги имеют отношение многие-ко-многим, то нужна таблица-связка. Nikolai_ кажется об этом сказал Истинно так!
Ну если действительно many-to-many тогда да. Что то вечером мозг отлючается... а почему бы не реализовать one-to-many? Я не совсем правильно написал, у 1 книги может быть несколько авторов. authors.book_id внешний ключ к books.id Будет несколько записей в таблице authors которые ссылаются на 1 запись в таблице books.Так легче работать. Вроде корзина покупателя так же строится... или же мне надо выспаться?
По-моему, у одного автора может быть много разных книг. Как и у одной книги - несколько авторов. Так что с таблицей-связкой.
Ну, допустим с размещением данных вопрос решен. А как теперь выводить ФИО автора или авторов к каждой записи в общем перечне книг? Может быть вот так. 1) Сделать запрос к таблице books_authors связав ее с таблицей authors. Создать многомерный массив на основе значений из этих таблиц. 2) Сделать запрос к таблице books. 3) Выводить список книг на основе запроса к books, а автора или авторов к каждой книге выводить при помощи спец. функции. Аргументом ф-ии задавать id книги. Ф-я обрабатывает массив, созданный в пункте первом и выводит ФИО соответствующих авторов. Я в правильном направлении мыслю?
да да, нужно связку делать, самое оптимальное решение. ТАБЛЕ id_книги и id_автора а при выборке дергать по айди книги всех принадлежащих ей авторов Второй запрос делай по поиску айди книге и массивом выводи всех авторов