Forever
Новичок
Взять, к примеру, предметы (артефакты), каждый из которых дает определенные характеристики, такие как + 10 к силе, + 15 к урону и тд.
* Всего около 200 предметов и около 40 видов характеристик.
* Предмет обычно дает не более 5-ти характеристик.
* новые предметы и характеристики будут добавляться крайне редко.
Через 5 лет будет примерно 205 / 42 соответственно.
* Имя предмета и его id будут доставаться из БД ОЧЕНЬ часто, а характеристики, наверное, на 20% реже. Конечно, на мой сайт будет заходить по 5 бомжей в год и то случайно, но это не повод не разобраться в том, как же все таки сделать структуру БД правильнее. Точнее эффективнее.
Так вот, надумал (чем - не знаю) такие варианты:
1) Сделать две таблицы:
items:
| id | name |
и
effects:
| item_id | + к силе | + к обаянию | + к длинне самооценки | и еще около 35 таких полей
И доставать одним JOIN-ом , когда необходима вся информация.
Проблема в том, что раз каждый предмет может давать не более 5-ти характеристик, и соответственно, в каждой записи будет пустовать по 35 полей.
С другой стороны, количество записей расти не будет. И избыточность соответственно тоже.
2) Сделать три таблицы:
items:
| id | name |
effects:
id |name |
item_effects:
item_id| effect_id| value | (в item_effects будет примерно 600-1000 записей)
И делать либо 1 SELECT + 1 JOIN:
SELECT нужное FROM items WHERE id = 1;
SELECT a.name, b.value FROM effects a LEFT OUTER JOIN
item_effects b ON a.id = b.effect_id where b.item_id = 1;
Либо сложные Join на все сразу в одном запросе.
при условии, что во всех таблицах количество записей не будет меняться, какой вариант лучше?
И какие есть лучше?
* Всего около 200 предметов и около 40 видов характеристик.
* Предмет обычно дает не более 5-ти характеристик.
* новые предметы и характеристики будут добавляться крайне редко.
Через 5 лет будет примерно 205 / 42 соответственно.
* Имя предмета и его id будут доставаться из БД ОЧЕНЬ часто, а характеристики, наверное, на 20% реже. Конечно, на мой сайт будет заходить по 5 бомжей в год и то случайно, но это не повод не разобраться в том, как же все таки сделать структуру БД правильнее. Точнее эффективнее.
Так вот, надумал (чем - не знаю) такие варианты:
1) Сделать две таблицы:
items:
| id | name |
и
effects:
| item_id | + к силе | + к обаянию | + к длинне самооценки | и еще около 35 таких полей
И доставать одним JOIN-ом , когда необходима вся информация.
Проблема в том, что раз каждый предмет может давать не более 5-ти характеристик, и соответственно, в каждой записи будет пустовать по 35 полей.
С другой стороны, количество записей расти не будет. И избыточность соответственно тоже.
2) Сделать три таблицы:
items:
| id | name |
effects:
id |name |
item_effects:
item_id| effect_id| value | (в item_effects будет примерно 600-1000 записей)
И делать либо 1 SELECT + 1 JOIN:
SELECT нужное FROM items WHERE id = 1;
SELECT a.name, b.value FROM effects a LEFT OUTER JOIN
item_effects b ON a.id = b.effect_id where b.item_id = 1;
Либо сложные Join на все сразу в одном запросе.
при условии, что во всех таблицах количество записей не будет меняться, какой вариант лучше?
И какие есть лучше?