Какая структура таблиц будет лучше?

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 на все сразу в одном запросе.

при условии, что во всех таблицах количество записей не будет меняться, какой вариант лучше?
И какие есть лучше?
 

Фанат

oncle terrible
Команда форума
Через 5 лет будет примерно 205 / 42 соответственно.
Этот микроскопического размера малюсенький кусочек данных ты можешь хранить как угодно - в текстовом файле в формате джейсон, цсв или "через палочку"; в NOSQL базе данных по твоему выбору; в реляционной нормализованной БД; реляционной денормализованной БД; в виде пхп массива; в key-value хранилище. вообще как угодно - разницы с точки зрения производительности не будет никакой.

Но ты спросил, как сделать структуру БД правильнее.
 

AnrDaemon

Продвинутый новичок
А смысл? Если проще один раз сериализовать эту ничтожную кучку параметров в PHP скрипт и сразу иметь данные в рантайме?
 
Сверху