4D 資料庫教學:完整指南
4D 資料庫教學從四個主要物件開始:表格、欄位、表單和方法。 4D 是 4D SAS 的關聯式資料庫和應用程式開發平台,於 1984 年首次推出,將資料儲存在與編譯或解釋的應用程式層相關的專有「.4DD」結構檔中。開發人員在一個整合環境中定義表格、建立表單並附加程式碼。
4D 在工具領域佔有不尋常的地位。它是關聯式資料庫引擎、快速應用程式開發環境、Web 伺服器和低程式碼表單設計器的組合。這種組合就是小團隊採用它的原因:一個產品涵蓋儲存、業務邏輯、UI 和部署。
此引擎是傳統意義上的關聯式引擎:表、主鍵、關聯表以及結構中定義的關係。儘管 4D 透過其 SQL 引擎和「開始 SQL」/「結束 SQL」命令支援 SQL,但它不像 PostgreSQL 或 MySQL 那樣首先是 SQL。大多數日常任務都使用 4D 自己的語言(歷史上稱為 4D 語言,現在簡稱為 4D 程式碼),它比 SQL 更接近腳本語言。這種 4d 資料庫教學方法可以幫助初學者了解工具的多功能性。
早期有兩個架構事實很重要:
- **結構與資料。 ** 在現代版本中,結構(表格、欄位、表單、方法)駐留在「.4DC」/專案檔案中;資料位於「.4DD」資料檔案中。在 4D 20 及更高版本中,專案儲存為文字檔案的資料夾,使 Git 的版本控制變得實用。較舊的“.4DB”二進位結構更難比對。
- **客戶端-伺服器與單一用戶。 ** 單一使用者部署在一台電腦上執行所有內容。客戶端-伺服器將 4D 伺服器(資料 + 業務邏輯)與 4D 客戶端(UI)分開。相同的結構支援兩者,但網路往返改變了編寫循環的方式。
如果您來自 Microsoft Access,則思維模型可以很好地移轉。如果您來自網路堆疊,則需要忘記一些習慣:4D 表單 是有狀態且事件驅動的,而不是請求回應。
第 1 步:安裝並建立您的第一個結構
從官方 4D 網站 (4d.com) 下載 4D 以開始本 4D 資料庫教學。您通常會選擇 4D(完整開發環境)和 4D Server 進行部署。有一個免費的本地開發模式可供學習,但部署到生產需要許可證:直接檢查當前的許可證條款,因為它們隨著版本的不同而變化。
相關: — 長期運行的關係資料庫平台,適用於需要透過單一文件在桌面、Web 和行動裝置上自訂應用程式的團隊。.
建立專案:
- 啟動 4D 並選擇 新建 > 專案。
- 為專案命名並選擇一個資料夾。 現代 4D 建立一個包含「Project/Sources/」的專案資料夾,並將您的結構作為文字檔案。
- 結構編輯器開啟。這是您的結構設計畫布。
結構編輯器是您新增表格的地方。每個表都有一個名稱、一組欄位以及一個自動產生的主鍵(可選)。 4D 的約定是按類型為欄位名稱加上前綴 — ID_、Name_、Date_、Amount_ — 儘管這是風格問題而不是要求。當您掃描 200 個欄位時,一致性會在稍後得到回報。
您最常使用的欄位類型:文字、Alpha、整數、長整數、實數、日期、時間、布林值、圖片、BLOB、物件和 UUID。 Object 類型儲存類似 JSON 的結構化數據,是靈活屬性的現代選擇。 UUID 欄位是新資料表的建議主鍵類型,因為它們避免了分散式或合併資料中自動遞增整數的衝突和重新編號問題。
我們的選擇: — 位於真實關係資料庫之上的電子表格簡單介面,具有自動化、視圖和可共享介面。.
步驟 2:設計表和關係
4D 中的模式設計遵循關係規範化規則,具有 4D 特有的特殊性:關係以圖形方式聲明並涉及自動行為。這是任何 4d 資料庫教程的關鍵部分。
若要建立關係,請在結構編輯器中將主鍵欄位從一個表格拖曳到另一個表格的外鍵欄位。 4D 繪製關係線並允許您配置:
| 關係設定 | 它控制什麼 | 實際效果 |
|---|---|---|
| 自動關係 | 4D是否自動載入相關記錄 | 方便表格;可能會導致循環中的隱藏查詢 |
| 一對多與多對一 | 連結方向 | 決定哪一方持有外鍵 |
| 相關表名 | 程式碼中的存取器名稱 | 成為您引用的屬性,例如[發票]客戶 |
| 刪除控制 | 級聯、限制或設為空值 | 防止孤兒記錄 |
一個具體的例子:一個「Invoice」表,其中一個「CustomerID」欄位連結到「Customer.ID」。在程式碼中,「[Invoice]Customer.Name」遍歷關係。這很優雅,但在超過 10,000 張發票的循環中卻很危險,因為每次訪問都可以觸發查找。解決方法是故意使用“RELATE MANY”/“RELATE ONE”,或先將相關資料載入到集合中。
妥協以儘早做出決定: 具有聲明關係的規範化表為您提供引用完整性和簡單的程式碼,但在大量讀取時會降低效能。具有嵌入物件欄位的非規範化表讀取速度更快,但會將完整性檢查推送到您自己的程式碼中。對於小型團隊的大多數業務應用程序,規範化交易核心並對報告表進行非規範化。
步驟 3:建立表單
表單是 4D 的使用者介面層,有多種類型:詳細資料表單(一筆記錄)、清單表單(多筆記錄)、輸入表單、輸出表單和項目表單(未連結到表格)。表單編輯器是一個帶有屬性清單的拖放畫布。這是任何 4d 資料庫教程的關鍵部分。
建立表單時的關鍵概念:
- **資料來源。 ** 每個表單都連結到一個表,或連結到項目表單的變數/表達式。
- **小部件。 ** 欄位、按鈕、複選框、下拉清單、列錶框和分層清單。列錶框是顯示相關資料的主力,比簡單的網格功能強大得多。
- **物件方法。 ** 右鍵單擊任何物件並附加方法。此方法在「載入時」、「點擊時」、「資料變更時」和「驗證時」等事件上運作。
- **表單方法。 ** 表單本身有一個用於表單層級事件的方法,例如「載入時」和「卸載時」。
客戶詳細資料表單的便捷範本:放置客戶字段,新增連結到該客戶的發票選擇的列錶框,然後放置一個執行建立新發票方法的按鈕。列錶框選擇是查詢或關係驅動的,插入後刷新它可以使 UI 保持同步。
警告: 4D 表單是有狀態的。表單包含目前記錄和目前選擇。對於新手來說,將表單級狀態與後台程序混合在一起是最常見的令人困惑的錯誤來源。將長時間運行的作業保留在單獨的進程中並將結果發佈回來。
步驟 4:編寫方法與業務邏輯
在這個 4D 資料庫教程中,4D 程式碼被分解為多個方法,這些方法有多個版本:
- 資料庫方法 — 由資料庫事件觸發(啟動、關閉、備份)。
- 表格方法 — 由記錄事件觸發(儲存時、刪除時)。
- 表單和物件方法 — 由 UI 事件觸發。
- 專案方法 — 您的可重複使用函數,可從任何地方呼叫。
- 觸發器:在記錄操作之前/之後執行操作,非常適合審計追蹤。
現代 4D 程式碼支援類別和“This”關鍵字,允許您編寫物件導向的程式碼而不僅僅是過程程式碼。最小的項目方法如下所示:
// 專案方法:CreateInvoice
// $1 = 客戶 ID (UUID)
C_OBJECT($發票)
$發票:=ds.Invoice.new()
$發票.CustomerID:=$1
$invoice.Date:=目前日期
$invoice.Status:="草稿"
$status:=$invoice.save()
ds 物件(資料儲存)是透過 ORDA(物件關係資料存取)引入的現代 ORM 樣式存取層。 ORDA 可讓您使用實體和實體選擇而不是傳統選擇,並支援查詢連結、運算屬性和用戶端實體選擇,從而減少伺服器往返次數。對於新開發項目,ORDA是推薦路線; “QUERY”和“CREATE RECORD”等經典指令仍然有效並出現在舊程式碼庫中。
如何決定: 將 ORDA 用於新程式碼以及任何從可讀和可連結查詢中受益的內容。在需要對大量選擇進行非常緊密的循環的地方保留經典命令,因為經典選擇在某些伺服器端場景中可以提高記憶體效率。衡量而不是假設。
步驟 5:值清單、查詢和報告
值清單使用一組受控選項填入下拉清單和列錶框。 4D 支援多種類型的清單:
- 靜態清單 — 硬編碼值,非常適合狀態和標誌。
- 表格清單 — 從參考表中提取的值,非常適合客戶、產品和類別。
- 分層清單 — 父/子值,對於科目表或類別樹很有用。
對於查詢,ORDA 的「query()」接受帶有佔位符的公式字串,這避免了注入問題並且讀起來清晰:
$sel:=ds.Invoice.query("狀態 = :1 AND 日期 >= :2"; "開啟"; $startDate)
4D 報表使用 Quick Report 編輯器進行簡單的表格輸出,並使用 4D Write Pro 區域進行豐富的文件。 Write Pro 是嵌入表單中的文字處理物件;您可以將資料合併到範本中並將其匯出為 PDF 或 DOCX 格式。對於任何複雜的事情,產生 HTML 並將其呈現到 Web 區域通常可以更快地建立並且更容易設定樣式。 4d 資料庫教學的這一部分到此結束。
步驟 6:部署與維護
在這個 4d 資料庫教學中,部署選項塑造您的架構:
- 單一使用者:單一電腦上的應用程式和資料。最簡單,沒有並發。
- 客戶端-伺服器 — 4D伺服器包含資料和業務邏輯; 4D 用戶端連線。非常適合 LAN 團隊。
- 4D Web 伺服器 — 4D 直接為 REST 端點和網頁提供服務。 ORDA 公開對資料儲存的自動 REST 訪問,這表示您可以在同一架構上建立 Web 介面。
- 4D for iOS / Android — 從您的結構產生的行動用戶端。
備份是內建的:4D Server 可以安排自動備份並維護日誌(日誌檔案)以進行時間點復原。在上線之前而不是之後啟用日誌。在資料副本上測試復原:未經測試的備份只是一種希望,而不是計劃。
版本控制:在專案模式下的結構中,將「Project/Sources/」資料夾提交到 Git。排除資料檔案和“DerivedData”資料夾。這是對二進制時代的真正改進,值得從第一天起就採用。
常見錯誤以及如何避免它們
**跳過主鍵規則。 ** 每個表都需要一個穩定且唯一的主鍵。 UUID 避免了刪除或合併記錄時因自動遞增整數而導致的重新編號問題。
**將業務邏輯放入表單方法中。 **表單方法應該處理使用者介面。將規則移至專案方法或類別中,以便 Web 端點、匯入和排程任務可以重複使用它們。
**忽略日誌。 ** 如果沒有它,寫入時發生崩潰可能會導致資料檔案不一致。打開它。
**循環關係。 ** 在大循環內存取「[Table]Related.Field」會增加查詢。使用 ORDA 預先載入或使用「RELATE MANY」一次。
**像 SQL 一樣對待 4D。 ** 您可以使用 SQL,但 4D 慣用程式碼通常更短,並且與表單和事件整合得更好。作為 4d 資料庫教程的一部分,首先學習原生語言。
學習路徑和資源
從官方 4D 文件和 4D 開發人員部落格開始,其中涵蓋 ORDA、Write Pro 和特定於版本的變更。 4D 社群論壇很活躍,對具體問題反應良好。對於無論平台如何都適用的關係設計基礎知識,有關關聯式資料庫和 SQL 條目的維基百科文章提供了有關查詢規範化和語義的有用資訊。
一個現實的學習順序:建立一個單表聯絡人管理器,然後新增一個相關表和列錶框,然後新增一個值列表和一個查詢表單,然後部署一個客戶端伺服器。每一步都會引入一個新概念,但不會讓您不知所措。
要點
- 4D 將關聯式資料庫、IDE、表單設計器和 Web 伺服器結合在一個產品中,適合需要快速交付自訂業務應用程式的小型團隊。這篇 4D 資料庫教學強調了它的效率。
- 在結構編輯器中定義表格和關係,在表單編輯器中建立螢幕,並透過方法和觸發器附加邏輯:構成每個 4D 應用程式的四個物件。
- ORDA(
ds,實體,實體選擇)是現代資料存取層,也是新程式碼的建議選擇;經典指令在舊有專案中仍然有效。 - 使用 UUID 主鍵,啟用日誌,並從一開始就將專案模式結構提交到 Git,以避免以後的痛苦的遷移過程。
- 將業務邏輯與表單方法分離並預先載入相關數據,而不是在大循環內追蹤關聯。
資料來源與進一步閱讀
- 關聯式資料庫 — 維基百科:關聯式資料庫 (RDB) 是基於資料關係模型的資料庫,由 E. F. Codd 於 1970 年提出。關聯式資料庫管理系統 (RDBMS…
常見問題
4D 是 SQL 資料庫嗎?
4D是一個關聯式資料庫,有自己的原生語言和整合的SQL引擎。您可以透過「Begin SQL」/「End SQL」發出 SQL 語句,但大多數 4D 開發使用 ORDA 或經典 4D 命令而不是 SQL。底層模型是關係模型(表、鍵和關係),因此 SQL 概念同樣適用,即使您每天編寫的語法有所不同。
我需要了解程式設計才能使用 4D 嗎?
基本的程式設計知識非常有用,因為表單和業務規則都連結到 4D 程式碼。也就是說,4D 的內建表單編輯器和精靈可讓您使用最少的程式碼建立功能性資料輸入應用程式。公民開發人員通常從表單和值清單開始,然後學習自訂行為所需的方法。對於初學者來說,4D 資料庫教學可能會有所幫助。
ORDA 和經典 4D 指令有什麼不同?
ORDA 是一個物件導向的存取層,圍繞著資料儲存 (ds)、實體和實體選擇構建,具有可連結查詢和對用戶端選取的支援。 “QUERY”、“CREATE RECORD”和“MODIFY SELECTION”等經典指令適用於經典選擇和目前紀錄。 ORDA 是新開發的建議方法,而經典指令在舊程式碼庫中仍然很常見。
4D 應用程式可以在網路或行動裝置上運行嗎?
是的。 4D 包含內建 Web 伺服器,ORDA 可以透過資料儲存公開 REST 端點,因此瀏覽器前端可以與相同的架構進行通訊。 4D 也提供適用於 iOS 和 Android 的行動用戶端生成。權衡是 Web 和行動用戶端必須密切注意身份驗證和每個請求返回的資料量。
如何安全備份 4D 資料庫?
在 4D Server 中啟用日誌(日誌檔案),以便您可以還原到某個時間點並安排自動備份,而不是依賴手動副本。在緊急情況下需要資料副本之前,請務必先測試資料副本的還原。將結構與資料檔案分開進行版本控制,因為它們以不同的頻率變化。
4D 適合小型企業應用程式嗎?
4D 正是針對這種場景而設計的:一個小團隊使用表單、報表和關係模式來建立自訂業務應用程式。它可以擴展到客戶端-伺服器部署和 Web 訪問,而無需更改核心結構。主要考慮因素是許可成本以及與主流網路堆疊相比較小的人才庫,因此必須權衡長期維護和建置速度。
常見問題
4D是SQL資料庫嗎?
4D是一個關聯式資料庫,有自己的母語和整合的SQL引擎。您可以透過 Begin SQL / End SQL 發出 SQL 語句,但大多數 4D 開發使用 ORDA 或經典 4D 指令而不是 SQL。底層模型是關係模型(表、鍵和關係),因此 SQL 概念會遷移,即使您每天編寫的語法不會遷移。
我需要了解程式設計才能使用 4D 嗎?
基本的程式設計知識非常有用,因為表單和業務規則都連結到 4D 程式碼。也就是說,4D 的內建表單編輯器和精靈可讓您使用最少的程式碼建立功能性資料輸入應用程式。公民開發人員通常從表單和值清單開始,然後學習自訂行為所需的方法。對於初學者來說,4d 資料庫教程可能會有所幫助。
ORDA 和經典 4D 指令有什麼區別?
ORDA 是一個圍繞資料儲存 (ds)、實體和實體選擇建構的物件導向的存取層,具有可連結查詢並支援用戶端選擇。諸如 QUERY、CREATE RECORD 和 MODIFY SELECTION 等經典指令適用於經典選擇和目前記錄。 ORDA 是新開發的建議方法,而經典指令在舊程式碼庫中仍然很常見。
4D 應用程式可以在網路或行動裝置上運行嗎?
是的。 4D 包含內建 Web 伺服器,ORDA 可以透過資料儲存公開 REST 端點,因此瀏覽器前端可以與相同的架構進行通訊。 4D 也提供適用於 iOS 和 Android 的行動用戶端產生。權衡是 Web 和行動用戶端必須密切注意身份驗證和每個請求返回的資料量。
如何安全備份 4D 資料庫?
在 4D Server 中啟用日誌(日誌檔案),以便您可以還原到某個時間點並安排自動備份,而不是依賴手動副本。在緊急情況下需要資料副本之前,請務必先測試資料副本的恢復。將結構與資料檔案分開進行版本控制,因為它們以不同的速率變化。
4D 適合小型企業應用程式嗎?
4D 正是針對這種場景而設計的:一個小團隊使用表單、報表和關係模式來建立自訂業務應用程式。它可以擴展到客戶端-伺服器部署和 Web 訪問,而無需更改核心結構。主要考慮因素是許可成本以及與主流網路堆疊相比較小的人才庫,因此必須權衡長期維護和建置速度。
使用您的工作帳戶免費試用 Power Apps
企業級低程式碼應用程式開發連接到 Microsoft 365、Dataverse 和 Power Automate。