Здравствуйте, участники Drupal.ru!
Спасибо за вашу помощь и участие в обсуждении других моих вопросов.
Сейчас я решаю, создавать ли мне ноду на основе 1 таблицы с 40 полями, или создать 2-3 на основе нескольких.
Вообще-то с начала я даже хотел создать ноду на основе таблицы, хранящей значения по принципу "ключ-значение".
То есть с 4 полями:
nid, vid, tagid, value
Задача хранить большое количество небольших порций информации вертикально.
Но красота такого решения рушится из за не возможности выдирать значения из переменной $node способом "ключ-значение".
Комментарии
Не понял
Плюсы широкой таблицы в том, что, несмотря на кажущуюся «неизящность» такого подхода, работать это все будет быстрее, поскольку такую таблицу можно накрыть необходимыми индексами.
Поскольку полей очень много и возможно, они будут добавляться со временем, неплохо бы написать систему управления этими полями (добавить, удалить поле), а также завести дополнительнуб вспомогательную таблицу, в которой будут храниться все необходимые атрибуты по каждому полю для удобной работы с этим всем в самом друпале (автоматическое построение форм и т.д.)
Сам недавно сталкивался с такой задачей (50+ параметров) - решил имеено вышеобозначенным способом.
Для наглядность приложу несколько картинок:
1. Сама таблица с множеством полей
http://www.drupal.ru/files/fields.jpg
2. Вспомогательная таблица с атрибутами поля для построения формы (hook_form) и загрузки ноды (hook_load)
http://www.drupal.ru/files/params.jpg
3. И таблица, содержащая опции для полей типа Select, Checkboxes итд
http://www.drupal.ru/files/param_options.jpg
Идея очень интересная! То есть править код при изменениях в форме более не потребуется! Подумаю. Пока время есть.
К стати решилась проблема доступа "ключ-значение" к $node
file:/usr/local/netbeans-6.7.1/php1/phpstubs/phpruntime/basic.php
get_class_vars($class_name) Get the default properties of the class
Return Value
Type: array an associative array of default public properties of the class. The resulting array elements are in the form of varname => value.
Online Documentation
http://php.net/manual/en/function.get-class-vars.php
Случайно выкопал в NetBeans.
А таблицу все равно нормализовал и остался при "классическом" значении. То есть как вы и советуете. Правда не помню максимальное количество полей в MySQl.
Будет время, сделаю "изящно"
Интересно у кого какие случаи бывали и их решения, когда нужно было хранить много полей.