Определяемые пользователем поля PHP Mysql - PullRequest
2 голосов
/ 19 октября 2011

Я сейчас создаю небольшое приложение crm.Мне нужно, чтобы каждый пользователь мог определять свои собственные поля.В настоящее время я строю этот CRM с использованием PHP и MySQL.

Пример: у меня есть таблица «customer» со стандартными полями: имя, телефон, адрес, адрес электронной почты и т. Д. Но я хочу разрешить пользователю (уникальный сеанс) добавлять поля, настраиваемые для его/ ее бизнес, которые доступны только ему (не другим пользователям).Затем я хочу, чтобы эти настраиваемые поля работали так же, как и все остальные поля в таблице (возможность поиска, отправки и получения данных).Я надеюсь, что смогу сделать это в MySQL и PHP, но я открыт для любой технологии или решения, которое считается наилучшей практикой.Спасибо за вашу помощь.

Ответы [ 4 ]

5 голосов
/ 19 октября 2011

Это можно сделать, создав таблицу с именем «customfields» с элементами «id, fieldname, company_id», а затем другую таблицу, которая связывает эти пользовательские поля с данными, например, «customercustomdata: id, customfields_id, customer_id». Связать «владение» полем таким же образом

Чтобы создать новое настраиваемое поле, "вставить в настраиваемые поля (fieldname, company_id) значения ('Birthday', companyid);"

Это помогает?

1 голос
/ 23 августа 2014

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

$custom = array(
    array("field" => "bikesOwned", "value" => 4),
    array("field" => "travelled", "value" => 14)
);

затем используйте что-то вроде PHPs json_encode для хранения этих данных в дополнительной ячейке.Тогда все, что вам нужно сделать, это декодировать и обработать массив.

1 голос
/ 19 октября 2011

@ Мэтт Х: Этот метод считается AEV или просто стандартным реляционным БД?

Так как у меня будет много пользователей во многих различных отраслях, которые захотят добавить свои собственные настраиваемые поля в ряд различных таблиц (контакты, транзакции, события и т. Д.), Я предполагаю, что мне понадобится настраиваемое полев таблице есть user_fk / id или fk / id компании, связанная таблица fk / id, id и имя поля?Я на правильном пути?Затем необходимо создать 2-ю таблицу для хранения данных для каждого настраиваемого поля покупки, имеющего настраиваемое поле fk / id, заказчика fk / id, id и поле данных для хранения фактических данных.Это правильно?

Хорошо, поэтому, как только я построю эти две дополнительные таблицы, как мне добавить их в таблицу контактов, чтобы она выглядела как одна большая таблица для пользователя, а не 3 таблицы?

Еще раз спасибо за вашу помощь.

Ответ

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

0 голосов
/ 19 октября 2011

Некоторые люди предлагают использовать дизайн Entity-Attribute-Value , но прежде чем читать, прочитайте Bad CaRMa , рассказ о EAV-подобном дизайне, который почти уничтожил компанию потому что это было неосуществимо.

Чтобы решить эту проблему лучше, прочитайте Как FriendFeed использует MySQL для хранения данных без схемы . Вы можете объединить все пользовательские столбцы в один большой двоичный объект и сохранить его таким образом. Затем, если вы хотите, чтобы отдельные атрибуты были доступны для поиска, создайте таблицу для этого атрибута, которая отобразит значения обратно в таблицу клиентов.

...