2

我目前正在构建一个小型 crm 应用程序。我需要每个用户都能够定义自己的自定义字段。我目前正在使用 php 和 mysql 构建这个 crm。

示例:我有一个“客户”表,其中包含标准字段:姓名、电话、地址、电子邮件等。但我希望允许用户(唯一会话)添加对其业务自定义的字段,这些字段仅他(不是其他用户)可以访问。然后,我希望这些自定义字段能够像表中的所有其他字段一样发挥作用(搜索、发送和接收数据的能力)。我希望我可以在 mysql 和 php 中实现这一点,但我对任何被认为是最佳实践的技术或解决方案持开放态度。感谢您的帮助。

4

4 回答 4

5

这可以通过创建一个名为“customfields”的表来完成,其中包含元素“id、fieldname、company_id”,然后创建另一个将这些自定义字段与数据相关联的表,例如“customercustomdata: id, customfields_id, customer_id”。以相同的方式关联字段的“所有权”

要创建一个新的自定义字段,“插入自定义字段(字段名,公司 ID)值('生日',公司 ID);”

这有帮助吗?

于 2011-10-18T22:50:34.893 回答
1

@Matt H:这种方法被认为是 AEV 还是只是标准的关系数据库?

因此,因为我将在许多不同行业中拥有许多用户,他们希望将自己的自定义字段添加到许多不同的表(联系人、事务、事件等)中,所以我假设我需要 customfield 表来拥有 user_fk/ id 或公司 fk/id、相关表 fk/id、id 和字段名称?我在正确的轨道上吗?然后需要创建第二个表来保存每个自定义字段购买的数据,该字段具有自定义字段 fk/id、客户 fk/id、id 和数据字段来保存实际数据。它是否正确?

好的,一旦我构建了这两个额外的表,我如何将它们添加到联系人表中,这样对于用户来说它看起来就像一个大表,而不是 3 个表?

再次感谢您的帮助。

回答

经过大量研究,我发现大多数希望完成此任务的人使用的是文档数据库而不是关系数据库。

于 2011-10-19T15:21:57.107 回答
1

您可以放置​​一个额外的列来存储字符串数据并存储一个描述自定义单元格内容的数组。例如:

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

然后使用 PHPs json_encode 之类的东西将该数据存储在额外的单元格中。然后你需要做的就是解码和处理数组。

于 2014-08-23T09:36:02.953 回答
0

有人建议使用Entity-Attribute-Value设计,但在您这样做之前,请阅读Bad CarRMa,这是一个关于类似 EAV 的设计的故事,该设计几乎摧毁了一家公司,因为它无法维护。

为了更好地解决这个问题,请阅读FriendFeed 如何使用 MySQL 存储无模式数据。您可以将所有自定义列集中到一个 BLOB 中,并以这种方式存储。然后,如果您希望单个属性可搜索,请为该属性创建一个表,将值映射回客户表。

于 2011-10-19T16:04:31.820 回答