2011-10-18 37 views
2

我目前正在構建一個小的crm應用程序。我需要每個用戶都能夠定義他們自己的自定義字段。我目前正在使用php和mysql構建這個crm。用戶定義的字段PHP Mysql

例如:我有一個「客戶」表,它具有標準字段:名稱,電話號碼,地址,電子郵件等。但我想讓用戶(唯一會話)添加自定義字段給他/她只有他(而不是其他用戶)可以訪問的業務。然後,我希望這些自定義字段的功能與表中的所有其他字段(搜索,發送和接收數據的能力)一樣。我希望我可以在mysql和php中完成這個任務,但我可以接受任何被認爲是最佳實踐的技術或解決方案。感謝您的幫助。

+0

查找[Entity-Attribute-Value](http://en.wikipedia。org/wiki/Entity-attribute-value_model)model and good luck – Phil

回答

1

@Matt H:這種方法被認爲是AEV還是標準的關係型數據庫?

所以,因爲我會在許多不同的行業有很多用戶想要將他們自己的自定義字段添加到許多不同的表(聯繫人,交易,事件等),我假設我需要customfield表來有一個user_fk/id或公司fk/id,相關的表fk/id,一個id和一個字段名?我在正確的軌道上?然後在需要創建第二個表來保存每個自定義字段的數據,其中包含自定義字段fk/id,客戶fk/id,id和數據字段以保存實際數據。它是否正確?

好的,所以一旦我建立這兩個額外的表我如何將它們添加到聯繫人表,所以它看起來像一個大表爲用戶,而不是3個表?

再次感謝您的幫助。

回答

大量的研究後,我發現,誰願意來完成這個大多數人都使用文檔數據庫不是關係數據庫。

4

這可以通過使用元素「id,fieldname,company_id」創建名爲「customfields」的表,然後將這些自定義字段與數據相關聯的另一個表(例如「customercustomdata:id,customfields_id,customer_id」)來完成。以同樣的方式關聯字段的「所有權」

要創建新的自定義字段,「插入自定義字段(fieldname,company_id)值('生日',companyid);」

這有幫助嗎?

+0

感謝您的回覆,您能否查看我在下面發佈的答案,因爲空間原因,我不得不放下它。謝謝。 – user982853

+0

我想我的帖子出現在你的上方。謝謝。 – user982853

+0

對所有評論抱歉。有沒有更容易的方法在桌子上做到這一點。例如,只需在聯繫人表中添加10-20個空白列,以及一些如何讓用戶定義它們?如果是這樣,我將如何讓用戶定義它們?謝謝。 – user982853

0

有人建議使用Entity-Attribute-Value設計,但在此之前,請閱讀Bad CaRMa,這是一個關於類似EAV設計的故事,幾乎摧毀了一家公司,因爲它是無法維護的。

要更好地解決這個問題,請閱讀How FriendFeed uses MySQL to store schema-less data。您可以將所有自定義列組合到一個BLOB中,並以此方式進行存儲。然後,如果您希望單個屬性可被搜索,請爲該屬性創建一個表,將該值映射回客戶表。

+0

我聽說過很多關於eav的horor故事,所以我想盡可能遠離eav。我只需要一個簡單的方法來允許用戶創建自定義字段。您能否詳細說明如何使用您的策略來允許最終用戶添加字段。謝謝。 – user982853

1

您可以放置​​一個額外的列來存儲字符串數據並存儲描述定製單元格內容的數組。例如:

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

然後使用類似PHP的json_encode將這些數據保存在額外的單元格。然後你需要做的只是解碼和處理數組。