2016-05-30 2 views
0

Я работаю над небольшим CRM-приложением на основе PHP & MySQL. Я следую за архитектурой SaaS. База единого кода и каждый клиент имеют собственную базу данных.Структура таблицы базы данных для приложения CRM

  • Имейте в виду, что вся контактная информация должна быть импортирована из CSV.

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

Пример:

  • клиент из фотоиндустрии, как и для сбора информации о клиентах следующим образом:

    имя, адрес, город, штат, страна, телефон, электронная почта, whatsapp

  • Принимая во внимание, что другое клиент из SEO индустрии, икэ для сбора информации о клиентах следующим образом:

    Имя, Фамилия, адрес, город, штат, страна, телефон, электронная почта, сайт, скайп

Что бы лучшая структура таблицы, соответствующая всем потребностям.

Надеюсь, я ясно объяснил свой вопрос: если вы столкнулись с трудностями, понимая мой вопрос, прокомментируйте, я исправлю его.

+0

Это означает настраиваемое поле, где пользователи могут добавлять/удалять настраиваемые поля для данного модуля. Существует много приложений с открытым исходным кодом crm, написанных на php & mysql, таких как 'vtiger crm, sugar crm' и т. Д., И один я работаю' sqcrm.com', вы можете проверить их для большего. –

+0

@AbhikChakraborty Спасибо за ваши предложения, но я пытаюсь что-то другое, поэтому я хочу построить его с нуля. –

+0

Как будут выглядеть запросы? –

ответ

1

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

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

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

Используя XML для представления схемы, я однажды реализовал что-то вроде этого, реализовав функции, которые генерировали код SQL и HTML-формы на основе сохраненной схемы . Когда поля были добавлены или изменены, приложение создало новый XML и связанный SQL для изменения таблицы через XSLT.

E.G.

Schema  DBtoSchema(Database) 
DataBase  SchematoDB(XML_Schema) 
Schema  DBTabletoSchema(Table) 
DBTable  SchemaToDBTable(XML_Schema) 
SuccessCode SchemaAddField(XML_Schema, FieldName, FieldType, FieldValidation) 
SuccessCode SchemaDeleteField(XML_Schema, FieldName) 
SuccessCode NewTable(Schema) 
SQLCode  GenerateInsertSQL(Schema) 
SQLCode  GenerateDeleteSQL(Schema) 
HTMLCode  GenerateForm(Schema, xsltCode) 
... and so on ..... 
+0

Спасибо, J Carl Zeigler. Ваше объяснение очень хорошее. Я собираюсь обновить свой вопрос, добавив дополнительную информацию. У каждого клиента есть своя база данных. –

Смежные вопросы