Нода на основе нескольких таблиц.

Главные вкладки

Аватар пользователя weare weare 15 февраля 2010 в 11:42

Здравствуйте, участники Drupal.ru!

Спасибо за вашу помощь и участие в обсуждении других моих вопросов.

Сейчас я решаю, создавать ли мне ноду на основе 1 таблицы с 40 полями, или создать 2-3 на основе нескольких.

Вообще-то с начала я даже хотел создать ноду на основе таблицы, хранящей значения по принципу "ключ-значение".

То есть с 4 полями:

nid, vid, tagid, value

Задача хранить большое количество небольших порций информации вертикально.

Но красота такого решения рушится из за не возможности выдирать значения из переменной $node способом "ключ-значение".

Комментарии

Аватар пользователя Stutzer Stutzer 15 февраля 2010 в 13:19

Плюсы широкой таблицы в том, что, несмотря на кажущуюся «неизящность» такого подхода, работать это все будет быстрее, поскольку такую таблицу можно накрыть необходимыми индексами.
Поскольку полей очень много и возможно, они будут добавляться со временем, неплохо бы написать систему управления этими полями (добавить, удалить поле), а также завести дополнительнуб вспомогательную таблицу, в которой будут храниться все необходимые атрибуты по каждому полю для удобной работы с этим всем в самом друпале (автоматическое построение форм и т.д.)

Сам недавно сталкивался с такой задачей (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

Аватар пользователя weare weare 16 февраля 2010 в 16:57

Идея очень интересная! То есть править код при изменениях в форме более не потребуется! Подумаю. Пока время есть.

К стати решилась проблема доступа "ключ-значение" к $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.

Будет время, сделаю "изящно" Wink

Интересно у кого какие случаи бывали и их решения, когда нужно было хранить много полей.