|
|
|
| Есть вопрос о проектировании базы данных MySQL. Давно он меня мучает.
Суть такова. Есть предположим книги. Каждую книгу можно описать темами. Тем, предположим, может быть от 1 до 100-200, а книг неограниченное количество.
ИД книги мы знаем.
Надо с максимальной скоростью выбрать темы относящиеся к определенной книге.
Я предполагаю, что базу можно сделать двумя способами:
1) Сделать 2 таблицы, books и themes. Каждой книге будет соответствовать перечень идентификаторов тем вида "5,8,98,15,30,41". Выбираем книгу, берем ид тем, потом выбираем из таблицы themes все записи соответствующие ид перечисленным выше. Все можно сделать одним запросом.
2) Сделать 3 таблицы books, themes, books_themes, где будут храниться связи идентификаторов. Например,
id | id_book | id_theme |
--------------------------------
1 | 535 | 128
2 | 535 | 130
3 | 535 | 131
4 | 550 | 128
5 | 550 | 131
6 | 600 | 109
7 | 600 | 110
8 | 600 | 111
9 | 600 | 112
10 | 600 | 113
11 | 605 | 115
12 | 609 | 131
|
Здесь мы будем по ИД книги выбирать все соответствующие записи, и далее выбирать из таблицы themes темы соответствующие тому, что мы выбрали только что. Здесь тоже один запрос.
Собственно вопросы: что будет работать быстрее? Какая нагрузка на железо (оператива, процессор)? Какой метод хранения данных эффективнее для высоконагруженного сайта (с большой посещаемостью)? | |
|
|
|
|
|
|
|
для: neokortex
(27.07.2011 в 02:13)
| | Быстрее будет работать второй способ, строки обрабатываются медленее чисел. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2011 в 10:29)
| | а то, что может получиться очень большая таблица books_themes - из-за этого не будет долго выборка происходить? | |
|
|
|
|
|
|
|
для: neokortex
(27.07.2011 в 10:58)
| | Величина в мегабайтах никуда не денется, более того во втором случае она будет меньше из-за нормализации. А только эта величина и влияет по большому счету. В любом случае ускорить при помощи индексирования числовые столбцы можно будет гораздо проще, чем строковые - индекс будет меньше. | |
|
|
|