考慮其他替代方案

作為開發人員,一定要考慮使用您Adobe Commerce環境以外的工具,例如GraphQL mesh和AdobeApp Builder。 這些工具可協助您保留資料的存取權,但對核心商務應用程式或其基礎資料庫表格沒有影響。 使用此方法,您可以透過API公開您的資料。 接著,將資料來源新增至App Builder設定。 使用GraphQL Mesh,您可以合併這些資料來源,並產生舊資料中提到的單一回應。

如需GraphQL Mesh的其他詳細資料,請參閱GraphQL Mesh閘道。 如需App BuilderAdobe的相關資訊,請參閱App Builder簡介

修改核心表格或協力廠商表格

如果您決定修改核心Adobe Commerce或協力廠商模組資料庫表格來儲存資料,請使用下列准則來將影響穩定度和效能的情況降至最低。

  • 僅新增欄。
  • 永遠不要修改現有資料行的​ type ​值。 例如,請勿將integer變更為varchar以滿足您獨特的使用案例。
  • 避免將欄新增至EAV屬性表格。 這些資料表已因邏輯和職責而超載。
  • 調整表格之前,請先決定表格的大小。 變更大型表格會影響部署,這可能會導致套用變更時延遲幾分鐘或幾小時。

修改外部資料庫表格的最佳作法

當您將資料行新增至核心資料庫表格或協力廠商表格時,Adobe建議遵循下列步驟:

  1. 在名稱空間中建立一個模組,使用代表您正在更新的專案之名稱。

    例如: app/code/YourCompany/Customer

  2. 建立適當的檔案以啟用模組(請參閱建立模組

  3. etc資料夾中建立名為db_schema.xml的檔案,並進行適當的變更。

    如果適用,請產生db_schema_whitelist.json檔案。 如需詳細資訊,請參閱宣告式結構描述

潛在影響

將欄新增至外部資料庫可能會以下列方式影響您的Adobe Commerce專案:

  • 升級可能會更複雜。
  • 如果修改的表格很大,則會影響部署。
  • 要移轉至新平台可能比較複雜。

避免修改核心表格的方法

您可以使用延伸屬性來避免修改Adobe Commerce資料庫表格。 另一種選擇是使用一些核心資料表上的特殊資料行(additional_data)來儲存資料,並以JSON編碼格式儲存。

將資料儲存在JSON編碼的資料欄中

某些核心表格有additional_data欄,其中包含JSON編碼資料。 此欄提供在一個欄位中對應其他資料的原生方式。 使用此方法可避免為小型簡單資料元素新增表格,這些元素儲存資料擷取的資訊,而不需要搜尋。 additional_data欄通常只適用於料號層次,不適用於整個報價單或訂單。

  • 使用additional_data欄位的優點

    • 不需要其他欄位,將欄數維持在最小。 這在銷售流程中很有幫助,因為其中已經涉及許多表格。 最好不要對這個已經複雜的程式增加更多複雜性。 此方法可滿足許多使用案例,但並非全部。
  • 缺點

    • 此方法僅適用於儲存唯讀資料。 發生此問題是因為我們的程式碼需要取消序列化才能修改和建置物件以新增相依性或資料庫關係。

    • 很難使用資料庫作業來搜尋這些欄位。 使用此方法搜尋時速度很慢。

    • 將資料儲存在additional_data欄中時,必須格外小心,避免觸發序列化或取消序列化作業,這些作業可能會建立無效的JSON來中斷程式碼,或在執行期間造成讀取錯誤。

    • 這些欄位必須在程式碼中清楚宣告,讓開發人員可輕鬆找到。

    • 其他可能發生且很難診斷的問題。 例如,對於某些原生PHP函式,如果您不使用核心應用程式提供的Adobe Commerce包裝函式方法,則轉換資料的結束結果可能會與預期格式不同。 請一律使用包裝函式,確保儲存或擷取資料的一致性和可預測性。

以下是具有additional_data欄的欄和結構的表格範例。

MariaDB [main]> DESCRIBE quote_item additional_data;
+-----------------+------+------+-----+---------+-------+
| Field           | Type | Null | Key | Default | Extra |
+-----------------+------+------+-----+---------+-------+
| additional_data | text | YES  |     | NULL    |       |
+-----------------+------+------+-----+---------+-------+
1 row in set (0.001 sec)


MariaDB [main]> DESCRIBE sales_order_item additional_data;
+-----------------+------+------+-----+---------+-------+
| Field           | Type | Null | Key | Default | Extra |
+-----------------+------+------+-----+---------+-------+
| additional_data | text | YES  |     | NULL    |       |
+-----------------+------+------+-----+---------+-------+
1 row in set (0.001 sec)

在2.4.3、2.4.4和2.4.5版中,有10個表格有資料行additional_data

MariaDB [magento]> SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN ('additional_data') AND TABLE_SCHEMA='main';
+------------------------+
| TABLE_NAME             |
+------------------------+
| sales_shipment_item    |
| sales_creditmemo_item  |
| sales_invoice_item     |
| catalog_eav_attribute  |
| sales_order_payment    |
| quote_address_item     |
| quote_payment          |
| quote_item             |
| magento_reward_history |
| sales_order_item       |
+------------------------+
10 rows in set (0.020 sec)
上一頁靜態內容部署
下一頁正在修改核心與協力廠商代碼