我目前正在构建一个小型crm应用程序。我需要每个用户都能够定义自己的自定义字段。我目前正在使用php和mysql构建这个crm。
示例:我有一个“客户”表,其中包含标准字段:姓名,电话,地址,电子邮件等。但我想允许用户(唯一会话)添加他/她的业务定制的字段只有他(不是其他用户)才能访问。然后,我希望这些自定义字段的功能与表中的所有其他字段一样(搜索,发送和接收数据的能力)。我希望我能在mysql和php中实现这一点,但我对任何被认为是最佳实践的技术或解决方案持开放态度。谢谢你的帮助。
答案 0 :(得分:5)
这可以通过创建一个名为“customfields”的表来完成,该表包含元素“id,fieldname,company_id”,然后是另一个将这些自定义字段与数据相关联的表,例如“customercustomdata:id,customfields_id,customer_id”。以相同的方式关联字段的“所有权”
要创建新的自定义字段,请“插入customfields(fieldname,company_id)值('Birthday',companyid);”
这有帮助吗?
答案 1 :(得分:1)
@Matt H:这种方法是AEV还是标准关系数据库?
因为我将在许多不同行业中拥有许多用户,他们希望将自己的自定义字段添加到多个不同的表(联系人,交易,事件等)中,我假设我需要自定义字段表来拥有user_fk / id或公司fk / id,相关表fk / id,id和字段名称?我在正确的轨道上吗?然后需要创建第二个表来保存每个自定义字段的数据购买具有customfield fk / id,customer fk / id,id和数据字段来保存实际数据。这是对的吗?
好的,所以一旦我构建了这两个附加表,我如何将它们添加到contacts表中,这样它看起来就像是用户的一个大表,而不是3个表?
再次感谢您的帮助。
<强>答案强>
经过大量研究后,我发现大多数希望实现这一目标的人都使用文档数据库而不是关系数据库。答案 2 :(得分:1)
您可以放置一个额外的列来存储字符串数据,并存储一个描述自定义单元格内容的数组。例如:
$custom = array(
array("field" => "bikesOwned", "value" => 4),
array("field" => "travelled", "value" => 14)
);
然后使用类似PHP的json_encode将数据存储在额外的单元格中。然后你需要做的就是解码和处理数组。
答案 3 :(得分:0)
有些人建议使用Entity-Attribute-Value设计,但在此之前,请阅读Bad CaRMa,这是一个关于类似EAV的设计的故事,几乎摧毁了一家公司,因为它无法维护。
为了更好地解决这个问题,请阅读How FriendFeed uses MySQL to store schema-less data。您可以将所有自定义列合并到一个BLOB中,并以这种方式存储它。然后,如果您希望可以搜索单个属性,请为该属性创建一个表,将值映射回customers表。