我正在开发一个基于PHP和PHP的小型CRM应用程序。 MySQL的。我正在关注SaaS架构。单一代码库和每个客户端都有自己的数据库。
请注意,所有联系信息都应从CSV导入。
我的目标是允许客户修改联系人表结构。我的意思是每个客户端都可以定义自己的表结构。
示例:
来自摄影行业的客户,喜欢按以下方式收集客户信息:
姓名,地址,城市,州,国家,电话,电子邮件,whatsapp
来自SEO行业的另一位客户,请按以下方式收集客户信息:
名字,姓氏,地址,城市,州,国家,电话,电子邮件, 网站,Skype
满足所有需求的最佳表格结构。
我希望我已经清楚地解释了我的问题,如果您在理解我的问题时遇到任何困难,请发表评论,我会更正。
答案 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 .....