remenikomer
8.04.2014 - 10:06
Хочу сделать доп.поля, которые бы зависели от категории и типа фирмы. Для одних фирм одни поля, для других типов фирм другие поля.
Есть таблица с полями (описание полей) (id, название поля, варианты значений, тип поля, id_категории, id_типа фирмы и т.д.). Эта таблица для вывода полей.
Но нужно сделать таблицу с выбранными фирмой значениями.
Функции скрипта: поиск фирмы по доп.полям, сразу по нескольким.
Придумал два решения (в обоих есть проблемы):
1. сохранять в ту же таблицу, где и фирмы, но сделать поля необязательными для заполнения. Всего две таблицы: фирмы со значениями доп.полей, доп.поля.
Правда менять значения полей будет сложновато (когда в админке что-то удалить нужно будет или заменить).
2. сохранять в отдельную таблицу. Так получается 3 таблицы: фирмы, поля и значения полей. Поиск можно делать через объединение таблиц по внешним ключам.
Вопрос в том, какой вариант выбрать, чтобы избежать потом проблем, когда будет сделано много работы и все зайдет в "тупик" из-за какой-то необходимости функционала, придется выбирать другой способ.
А может быть есть и другие способы реализации доп.полей?
И как потом делать вывод полей, выборки фирм по доп.полям (в плане php, примерно, без подробностей)?
Игорь_Vasinsky
8.04.2014 - 10:17
1. таблица фирм
2. таблица полей
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
8.04.2014 - 10:31
Цитата (Игорь_Vasinsky @ 8.04.2014 - 10:17) |
1. таблица фирм 2. таблица полей 3. таблица фирма->поле |
Что предлагаете сохранять в 3. таблица фирма->поле ? Только id_field, id_firm?
Игорь_Vasinsky
8.04.2014 - 10:33
да.
_____________
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
Цитата |
Что предлагаете сохранять |
это не Игорь "предлагает", этого требуют правила нормализации БД
_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
8.04.2014 - 10:40
Цитата |
это не Игорь "предлагает", этого требуют правила нормализации БД |
это они диктуют, а я предлагаю
_____________
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
vagrand
8.04.2014 - 10:41
По доп полям нужно будет осуществлять поиск?
_____________
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
8.04.2014 - 10:43
а какая разница?
_____________
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
vagrand
8.04.2014 - 10:46
Игорь_Vasinsky
Огромная разница. Если по этим полям искать не нужно, то самый простой вариант будет сохранять в блоб поле сериализованный массив. Не нужно городить кучу таблиц, сложные связи между ними и группировки.
А вот если поиск по этим полям нужен, вот тут начинаются пляски с бубном.
_____________
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, фрагменты.
remenikomer
8.04.2014 - 10:49
Цитата (Игорь_Vasinsky @ 8.04.2014 - 10:33) |
да. |
не понял. Можно подробнее?
1. фирмы
2. поля - виды всех полей, варианты значений и т.д., т.е то, что выводится в форме.
3. связка id фирмы с id поля.
А где хранить выбранные данные из полей? Думаю, что их можно и запихать в 3-ю таблицу. Правильно?
И получается, что в 3-й таблице у одно фирмы будет несколько записей. Правильно?
remenikomer
8.04.2014 - 10:51
Цитата (vagrand @ 8.04.2014 - 10:41) |
По доп полям нужно будет осуществлять поиск? |
Да, поиск нужен будет. Причем сразу по нескольким параметрам.
Игорь_Vasinsky
8.04.2014 - 10:51
так таблица с полями - это самостоятельный справочник
и логично предположить - что при удалении одного из полей - должно повлечь за собой исключение данного поля (внешние ключи, каскады) из всех фирм - если это будет храниться как сериализованный массив - управлять этим будет настолько геморно - на сколько можно.
_____________
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
8.04.2014 - 10:55
Цитата (Игорь_Vasinsky @ 8.04.2014 - 10:51) |
так таблица с полями - это самостоятельный справочник и логично предположить - что при удалении одного из полей - должно повлечь за собой исключение данного поля из всех фирм - если это будет храниться как сериализованный массив - управлять этим будет настолько геморно - на сколько можно. |
справочник дак это да... но выбранные данные то где хранить? Например, в справочнике есть поле с чекбоксами. Фирма выбрала несколько чекбоксов. Куда их сохранять?
А насчет сериализованного массива, дак я думаю, что там будет строка с разделителями, типа "|".
Игорь_Vasinsky
8.04.2014 - 11:01
ещё одна таблица
id auto_increment поля из 3го справочника - где id_firm = id_field
value - значение поля
это самая распространённая архитектура - по типу магазина
_____________
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
glock18
8.04.2014 - 11:02
Цитата (Игорь_Vasinsky @ 8.04.2014 - 07:01) |
ещё одна таблица
id auto_increment поля из 3го справочника - где id_firm = id_field value - значение поля
это самая распространённая архитектура - по типу магазина |
А что мешает добавить value в третью таблицу и не городить огород?
Быстрый ответ:
Powered by dgreen