首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

DotNetNuke 自訂表單模組資料結構(二):主從表拆分與基本/擴充欄位策略

     編輯:關於ASP.NET

2006 年底曾與 UDT 作者 Sebastian Leupold 郵件討論資料結構,覺得原設計難懂,建議優化未果,決定自行重構。以下分析 UDT 原結構與優化思路。

UDT 原始三表結構分析

  • UserDefinedFields: 結構定義表(欄位名、預設值、順序等)。
  • UserDefinedRows: 主記錄表,僅含 ModuleId 與 UserDefinedRowID 兩欄,極度稀疏。
  • UserDefinedData: 從記錄表,儲存所有欄位值(FieldValue 統一用 ntext)。

讀取單筆橫向資料需多重 LEFT JOIN,30 欄位即需 30 次 JOIN,效率極低。UDT 實際採「逐筆讀取→記憶體動態建 DataTable→綁定」方式,更慢。作者亦承認不適合大量資料。

優化策略:垂直拆分基本/擴充欄位

  • 基本欄位: 需在列表顯示、參與查詢、系統介面調用的欄位,直接擴充至 UserDefinedRows(從 2 欄擴至數十欄),嚴格定型(int、datetime 等),避免字串儲存導致查詢轉型錯誤。
  • 擴充欄位: 僅明細頁使用的欄位,留在 UserDefinedData,維持動態無限擴充能力。

查詢列表時只需:SELECT UserDefinedID, Field1 AS 姓名, Field2 AS 性別 FROM UserDefinedRows,無 JOIN、無記憶體組裝,效率大增。編輯/明細時再讀取擴充表。

欄位定義表同步調整

UserDefinedFields 新增欄位標記「基本/擴充」,使用者定義表單時引導:列表/查詢用欄位選基本,其餘選擴充。

此重構保留動態表單靈活性,大幅提升列表查詢效能,為百萬級資料奠基。下文將解決動態更新的技術難題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved