Спасибо за советы. NoSQL в данном случае не подходит, т.к. я на хостинг ничего не могу поставить сам.
По поводу получения - данные меняться будут редко, и не во время боя. И я всетаки решил сделать все в первой таблице. Я создал в ней текстовое поле params и в виде json буду хранить там параметры.
В итоге получилось вот так:
public function items_getUserItems($user_id)
{
$sth = $this->dbh->prepare('SELECT * FROM user_items WHERE user = :user_id');
$sth->execute(array(
':user_id' => intval($user_id),
));
$items = $sth->fetchAll(PDO::FETCH_ASSOC);
$count = count($items);
for($i=0; $i<$count; $i++)
{
$items[$i]['params'] = json_decode($items[$i]['params'], true);
if($items[$i]['params'] == null)
{
unset($items[$i]['params']);
}
}
return $items;
}