SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.10.2011 22:46:35

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Создание базы данных для книжного магазина

Доброго всем времени суток!
Пытаюсь создать книжный интернет магазин. И возник вопрос по базе данных. У одной книги может быть от 1 до 3 авторов. И хотелось бы сделать поиск по всем им. Т.е.,например, книга у которой два автора - автор1, автор2. Пользователь введет в поиске "название автор1" или же "название автор2" и в результатах будет эта книга. Как я себе это представляю. Есть таблица товаров, где через запятую идут ID авторов, например "1,6,7". И отдельная таблица, где к каждому товару прикреплен уже список значений авторов, взятый из таблицы авторов, например, "автор1, автор6, автор7". Для поиска по ним через сайт. Так вот, будет ли поиск по такой базе данных быстро работать, если товаров предполагается от 30 до 50 тысяч. Или же можно без создания этой доп.таблицы. Одновременно вместе с авторами поиск будет вестись и в таблицах издательство,название,серия. И еще где-то слышал что если записывать в таблицу не ноль, а пустое значение. Например, "1,6,0" если авторов 2 и с пустым значением "1,6,". То работать будет быстрее. Правда ли это.

Неактивен

 

#2 07.10.2011 03:48:02

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Создание базы данных для книжного магазина

Нужно делать три таблицы:
- таблица книг (без указания авторов - см. ниже)
- таблица авторов
- таблица связей книг и авторов, т.е. где перечислены пары id книги - id автора

Списки через запятую хранить не нужно - все их можно получить с помощью JOIN из вышеперечисленных трех таблиц.

С издательствами и всем остальным третью таблицу (которая таблица связей) делать не требуется: т.к. соответствие один к одному, хватит отдельной таблицы с сущностями (например, издательства) и колонки в таблице с книгами (например, id издательства).

если записывать в таблицу не ноль, а пустое значение. Например, "1,6,0" если авторов 2 и с пустым значением "1,6,". То работать будет быстрее. Правда ли это.

Если только за счет того, что строка на один байт короче. Но это эффект незначительный, его даже не увидишь на практике. Обычно другие вещи влияют (использование индексов, фрагментация данных на диске и др.)

Неактивен

 

#3 10.10.2011 21:49:13

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Создание базы данных для книжного магазина

Да, это понятно. Но как быть при добавлении нового товара или изменении существующего. Как я понял это нужно будет удалить все строки связанные с изменяемым товаром из таблицы связывающей книги и авторов. И после этого добавить новые поля. И это придется делать при каждом изменении товара, т.к. проверить есть ли уже измененная связь "автор-книга" в этой таблице не получиться. Думал может можно применить UPDATE в этом случае, но как быть если авторов у книги вначале было 3, а потом стало 2 или наоборот. И при отображении книги пользователю придется вначале делать запрос к этой таблице связывающей книги и авторов, потом в цикле доставать значения. И после этого делать запрос к таблице товаров, чтобы выбрать остальные характеристики товара. Вопрос в том можно ли обойтись без дополнительных запросов, а сделать все за один и в первом и во втором случае

Неактивен

 

#4 10.10.2011 22:33:37

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Создание базы данных для книжного магазина

Обновить можно только двумя запросами, достать можно одним JOIN, но лучше тоже двумя.

А что плохого в дополнительных запросах?

Неактивен

 

#5 11.10.2011 00:24:10

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Создание базы данных для книжного магазина

Да в принципе ничего плохого. Просто я не так давно начал изучать mysql и еще не так хорошо разбираюсь в запросах. Думал может я усложняю с двумя запросами и можно обойтись одним. А по поводу двух запросов для изменения товара. Я так и не понял. Есть получается форма, где считывается три значения об авторах(автор1, автор2, автор3). И потом их нужно внести в эту сводную таблицу книга-автор. Получается один запрос это внесение в эту таблицу и второй это внесение остальных характеристик товара в таблицу товаров. Так вот не понятно как построить этот первый запрос в таблицу книга-автор.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson