【问题标题】:Database Table structure for CRM applicationCRM应用的数据库表结构
【发布时间】:2016-09-28 07:07:12
【问题描述】:

我正在开发一个基于 PHP 和 MySQL 的小型 CRM 应用程序。我正在关注 SaaS 架构。单一代码库,每个客户都有自己的数据库。

  • 请记住,所有联系信息都应从 CSV 导入。

  • 我的目标是允许客户修改联系人表结构。我的意思是每个客户都可以定义自己的表结构。

示例:

  • 一位摄影行业的客户,喜欢收集如下客户信息:

    姓名、地址、城市、州、国家、电话、电子邮件、whatsapp

  • 而另一个来自 SEO 行业的客户,ike 收集客户信息如下:

    名字、姓氏、地址、城市、州、国家、电话、电子邮件、 网站、Skype

满足所有需求的最佳表结构是什么。

我希望我已经清楚地解释了我的问题,如果您在理解我的问题时遇到困难,请发表评论,我会更正。

【问题讨论】:

  • 这意味着用户可以添加/删除给定模块的自定义字段的自定义字段。有许多用 ph​​p 和 mysql 编写的开源 crm 应用程序,例如 vtiger crm, sugar crm 等,我正在工作的一个 sqcrm.com 您可以查看更多信息。
  • @AbhikChakraborty 谢谢你的建议,但我正在尝试一些不同的东西,所以我想从头开始构建它。
  • 查询会是什么样子?

标签: php mysql database database-design database-schema


【解决方案1】:

允许客户修改表结构提出了几个挑战,最重要的是:如果他们想改变他们的结构来增加或减少新的字段会发生什么?如何添加验证码?以及更复杂的安全问题...

面向对象的数据库将是实现这一点的好方法,但是您 已经表明 MySQL 是一项要求,因此从体系结构角度解决此问题的一种方法是拥有一个客户特定模式的表,其中客户键映射到可以动态修改的特定表模式。

表单元数据和相关的表操作可以存储在数据库中,以动态生成输入字段和需要的字段。由于应该不经常重新生成表模式,因此这不会产生太多额外开销。

使用 XML 来表示模式,我曾经通过实现生成 SQL 代码和基于存储的 HTML 表单的函数来实现类似的东西 架构。添加或更改字段时,应用程序会生成新的 XML 和关联的 SQL,以便通过 XSLT 修改表。

例如

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 .....

【讨论】:

  • 谢谢 J Carl Zeigler。你的解释非常好。我将通过添加更多信息来更新我的问题。每个客户都有自己的数据库。
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多