[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как хранить данные из доп.полей?
Страницы: 1, 2
vagrand
Игорь_Vasinsky
Цитата
управлять этим будет настолько геморно - на сколько можно.


Не все так страшно. Можно просто не выводить значение из полей, которые были удалены, а сами значения убирать при следующем редактировании. Да тут возможна некоторая избыточность данных, но обычно в доп полях не хранят ничего объемного. Зато это избавляет нас от множества лишних таблиц и группировки при джойне.

remenikomer

Я сейчас предложу вам наиболее, на мой взгляд, правильный вариант реализации доп полей, по которым нужно производить поиск. Рискую быть закиданным тапками но я бы сделал следующим образом:
1. Таблица companies - с основной инфой о компаниях;
2. Таблица company_fileds - со списком полей для каждого вида фирм;
3. Динамически создаваемые и редактируемые таблицы company_fileds_<type_id> - таблицы, содержащие значения полей из таблицы company_fileds.

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

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Игорь_Vasinsky
Цитата
А что мешает добавить value в третью таблицу и не городить огород?

как кричать "Посмотри как в фреймворках организовано", лес рук.

ради бога - можно и в 3й таблице.

единственное, что может - вдруг одно поле имеет несколько значений.

тогда я не вижу смысла дублировать строки в 3й таблице

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
remenikomer
что значит одно поле несколько значений?
Например, будут поля с чекбоксами.
Игорь_Vasinsky
или с select, например

я думаю нужно смотреть в сторону расширяемости

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
remenikomer
vagrand
как-то сложновато выглядит ваш пример.
Игорь_Vasinsky я потерял основную мысль... если у фирм будут поля с несколькими выбранными значениями, например, мультисипсок или чекбоксы, то лучше делать в 3 или 4 таблицах? Если в 4, то как в чем преимущество, особенности?
Игорь_Vasinsky
если в 3х то

id | id_firm | id_field | value_field
id | id_firm | id_field | value_field2
id | id_firm | id_field | value_field3

если в 4х то

id | value_field
id | value_field2
id | value_field3


на лицо нет избыточного хранения данных

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
remenikomer
всем спасибо... буду пробовать
vagrand
remenikomer
Цитата
как-то сложновато выглядит ваш пример.


Мне видится что он не сложнее того, когда на одно поле несколько записей. Зато поиск будет быстрее.
Как вариант можно предложить для хранения полей использовать MongoDB, она как раз приспособлена для таких задач.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
andrey888
если есть основные поля для всех фирм и уникальные доп поля для каждой из фирм , то я бы к первому варианту Игоря добавил еще одну таблицу с привязкой - список фирм -> список ДОП. Полей для каждой из фирм..
Если б делал для себя - делал бы так .. мне было бы удобнее обращаться с данными и минимум потенциальной путаницы .

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
remenikomer
Цитата (andrey888 @ 8.04.2014 - 17:45)
если есть основные поля для всех фирм и уникальные доп поля для каждой из фирм , то я бы к первому варианту Игоря добавил еще одну таблицу с привязкой - список фирм -> список ДОП. Полей для каждой из фирм..
Если б делал для себя - делал бы так .. мне было бы удобнее обращаться с данными и минимум потенциальной путаницы .

дак это 3-я таблица с id, id_firm, id_field
По ней сделать выборку.
andrey888
Если я правильно понял то есть ОСНОВНЫЕ поля которые должны быть у каждой фирмы .. Так ? если так то это и есть твоя третья таблица .
А вот если должны быть для каждой фирмы индивидуальные поля (НЕОСНОВНЫЕ) то я бы добавил еще одну таблицу, где для каждой фирмы прописаны индивидуальные поля.

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Игорь_Vasinsky
нафига?)))

чёб у таблицы с полями и значениями не добавить поле - обязательно или нет )

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.