4D データベース チュートリアル: 完全ガイド
4D データベースのチュートリアルは、テーブル、フィールド、フォーム、メソッドという 4 つの主要なオブジェクトから始まります。 4D は、1984 年に初めて発売された 4D SAS のリレーショナル データベースおよびアプリケーション開発プラットフォームで、コンパイルまたは解釈されたアプリケーション層に関連付けられた独自の「.4DD」構造ファイルにデータを保存します。開発者は、1 つの統合環境でテーブルを定義し、フォームを構築し、コードを添付します。
4D はツール業界において珍しい位置を占めています。これは、リレーショナル データベース エンジン、高速アプリケーション開発環境、Web サーバー、およびローコード風のフォーム デザイナを組み合わせたものです。この組み合わせが小規模チームに採用される理由です。1 つの製品でストレージ、ビジネス ロジック、UI、展開がカバーされます。
このエンジンは、古典的な意味でのリレーショナルです。テーブル、主キー、関連テーブル、および構造で定義されたリレーションで構成されています。 PostgreSQL や MySQL のような SQL ファーストではありませんが、4D は SQL エンジンと Begin SQL / End SQL コマンドを通じて SQL をサポートしています。日常的なタスクのほとんどは、SQL よりもスクリプト言語に近い 4D 独自の言語 (以前は 4D 言語と呼ばれていましたが、現在は単に 4D コードと呼ばれています) を使用します。この 4D データベース チュートリアルのアプローチは、初心者がツールの多用途性を理解するのに役立ちます。
2 つのアーキテクチャ上の事実が初期段階で重要になります。
- 構造とデータ。 構造 (テーブル、フィールド、フォーム、メソッド) は、最新のバージョンでは
.4DC/プロジェクトファイルに存在します。データは.4DDデータ ファイル内にあります。 4D 20 以降では、プロジェクトはテキスト ファイルのフォルダーとして保存されるため、Git によるバージョン管理が実用的になります。古い.4DBバイナリ構造は diff(差分抽出)がより困難です。 - クライアントサーバーとシングルユーザー。 シングルユーザー展開では、単一マシン上ですべてが実行されます。クライアントサーバーでは、4D Server (データ + ビジネスロジック) と 4D Client (UI) が分離されます。同じ構造で両方がサポートされますが、ネットワークのラウンドトリップによってループの書き方が変わります。
Microsoft Access から移行する場合、メンタルモデルはスムーズに適用されます。 Web スタックから移行する場合は、いくつかの習慣を捨てる必要があります。4D フォーム はステートフルでイベント駆動型であり、リクエスト/レスポンス形式ではありません。
ステップ 1: インストールと最初の構造の作成
この 4D データベース チュートリアルを開始するには、公式 4D Web サイト (4d.com) から 4D をダウンロードしてください。通常、開発環境としての 4D (フル開発環境) と、展開用の 4D Server のどちらかを選択します。学習用の無料のローカル開発モードがありますが、本番環境への展開にはライセンスが必要です。リリースごとに変更されるため、現在のライセンス条項を直接確認してください。
関連: — デスクトップ、Web、モバイル上で 1 つのファイルからカスタム アプリを必要とするチーム向けの、長期にわたって実行されているリレーショナル データベース プラットフォームです。.
プロジェクトの作成:
- 4D を起動し、新規 > プロジェクト を選択します。
- プロジェクトに名前を付け、フォルダーを選択します。最新の 4D では、構造がテキストファイルとして格納された
Project/Sources/を含むプロジェクトフォルダーが作成されます。 - 構造エディタが開きます。これが設計キャンバスになります。
構造エディタはテーブルを追加する場所です。各テーブルには、名前、フィールドのセット、およびオプションで自動生成される主キーが設定されます。 4D の慣習では、フィールド名にタイプ (ID_、Name_、Date_、Amount_) を接頭辞として付けますが、これはスタイルの問題であり必須ではありません。一貫性を持たせておけば、後で 200 個のフィールドをスキャンする際に効果を発揮します。
最もよく使用するフィールド型: テキスト、アルファ、整数 (Integer)、倍長整数 (Longint)、実数 (Real)、日付、時刻、ブール値、画像、BLOB、オブジェクト、および UUID。 オブジェクト (Object) 型は JSON のような構造化データを保存し、柔軟な属性を定義するための現代的な選択肢です。 UUID フィールドは、分散データやマージされたデータにおいて、自動インクリメント整数で発生する衝突や再番号付けの問題を回避できるため、新しいテーブルの主キー型として推奨されます。
私たちの選択: — 自動化、ビュー、共有可能なインターフェイスを備えた、実際のリレーショナル データベースの上にあるスプレッドシートのようなシンプルなインターフェイス。.
ステップ 2: テーブルとリレーションの設計
4D のスキーマ設計はリレーショナル正規化ルールに従いますが、4D 特有の点があります。リレーションはグラフィカルに宣言され、自動的な動作を伴います。これは 4D データベース チュートリアルの重要な部分です。
リレーションシップを作成するには、構造エディタで、あるテーブルの主キーフィールドを別のテーブルの外部キーフィールドにドラッグします。 4D はリレーション線を描画し、以下の設定を可能にします。
| リレーション設定 | 制御内容 | 実際の影響 |
|---|---|---|
| 自動リレーション | 4D が関連レコードを自動ロードするかどうか | フォームでは便利ですが、ループ内で隠れたクエリが発生する可能性があります |
| 1 対多 vs 多対 1 | リンクの方向 | どちら側が外部キーを保持するかを決定します |
| 関連テーブル名 | コード内でのアクセサー名 | 参照するプロパティになります (例: [Invoice]Customer) |
| 削除制御 | カスケード、制限、または null 化 | 孤立した子レコードの発生を防止します |
具体的な例: Customer.ID にリンクされた CustomerID フィールドを持つ Invoice テーブル。コードでは、[Invoice]Customer.Name でリレーションを辿ります。これはエレガントですが、10,000 件の請求書を回すループ内では危険です。アクセスごとに検索がトリガーされる可能性があるためです。解決策は、意図的に RELATE MANY / RELATE ONE を使用するか、最初に関連データをコレクションにロードすることです。
早期に決定すべき妥協点: 宣言されたリレーションを持つ正規化テーブルは、参照整合性とシンプルなコードを提供しますが、大規模な読み取り時のパフォーマンスにコストがかかります。オブジェクトフィールドを埋め込んだ非正規化テーブルは読み取りが高速ですが、整合性チェックを自前でコードに実装する必要があります。小規模チーム向けのほとんどのビジネスアプリケーションでは、トランザクションコアを正規化し、レポート用テーブルを非正規化することを推奨します。
ステップ 3: フォームの構築
フォームは 4D のユーザーインターフェイス層であり、いくつかのタイプがあります。詳細フォーム (1 レコード)、リストフォーム (複数レコード)、入力フォーム、出力フォーム、および プロジェクトフォーム (テーブルにリンクされていない) です。フォームエディタは、プロパティリストを備えたドラッグ&ドロップのキャンバスです。これは 4D データベース チュートリアルの重要な部分です。
フォーム作成時の重要な概念:
- データソース。 各フォームはテーブルにリンクされるか、プロジェクトフォームの場合は変数/式にリンクされます。
- ウィジェット。 フィールド、ボタン、チェックボックス、ドロップダウンリスト、リストボックス、階層リスト。リストボックスは関連データを表示するための主力であり、単純なグリッドよりもはるかに強力です。
- オブジェクトメソッド。 任意のオブジェクトを右クリックしてメソッドをアタッチします。メソッドは
On Load、On Clicked、On Data Change、On Validateなどのイベントで実行されます。 - フォームメソッド。 フォーム自体に、
On LoadやOn Unloadなどのフォームレベルのイベント用メソッドがあります。
顧客詳細フォームの便利なテンプレート: 顧客フィールドを配置し、その顧客の請求書一覧にリンクするリストボックスを追加し、新しい請求書を作成するメソッドを実行するボタンを配置します。リストボックスの選択はクエリまたはリレーションによって駆動され、挿入後に更新することで UI の整合性を保ちます。
警告: 4D フォームはステートフルです。フォームは現在のレコードと現在の選択内容を保持します。フォームレベルの状態とバックグラウンドプロセスを混在させることは、初心者にとって混乱を招くバグの最も一般的な原因です。長時間実行されるジョブは別のプロセスで処理し、結果をパブリッシュして戻してください。
ステップ 4: メソッドとビジネスロジックの記述
この 4D データベース チュートリアルでは、4D コードはメソッドに分割されており、いくつかの種類があります。
- データベースメソッド — データベースイベント (起動、終了、バックアップ時) によってトリガーされます。
- テーブルメソッド — レコードイベント (保存時、削除時) によってトリガーされます。
- フォームおよびオブジェクトメソッド — UI イベントによってトリガーされます。
- プロジェクトメソッド — どこからでも呼び出し可能な再利用可能な関数です。
- トリガー: レコード操作の前後に処理を実行します。監査証跡に最適です。
最新の 4D コードはクラスと This キーワードをサポートしているため、単なる手続き型ではなくオブジェクト指向のコードを記述できます。最小限のプロジェクトメソッドは次のようになります。
// Project method: CreateInvoice
// $1 = customer ID (UUID)
C_OBJECT($invoice)
$invoice:=ds.Invoice.new()
$invoice.CustomerID:=$1
$invoice.Date:=Current date
$invoice.Status:="Draft"
$status:=$invoice.save()
ds オブジェクト (データストア) は、ORDA (Object Relational Data Access) で導入された最新の ORM スタイルのアクセスレイヤーです。 ORDA を使用すると、従来の選択 (selection) の代わりにエンティティとエンティティ選択を操作でき、クエリチェーン、計算属性、サーバー往復を削減するクライアント側エンティティ選択がサポートされます。新規開発では ORDA が推奨ルートです。 QUERY や CREATE RECORD などのクラシックコマンドも引き続き動作し、古いコードベースで見られます。
判断基準: 新しいコードや、可読性が高くチェーン可能なクエリのメリットがある場合は ORDA を使用してください。大規模な選択に対して非常にタイトなループが必要な場合は、一部のサーバー側シナリオでメモリ効率が高くなる可能性があるため、クラシックコマンドを維持してください。推測ではなく測定して判断してください。
ステップ 5: 値リスト、クエリ、およびレポート
値リストは、制御された選択肢のセットをドロップダウンリストやリストボックスに表示します。 4D はいくつかのタイプのリストをサポートしています。
- 静的リスト — ハードコードされた値。ステータスやフラグに最適です。
- テーブルリスト — 参照テーブルから抽出された値。顧客、製品、カテゴリに最適です。
- 階層リスト — 親/子の値。勘定科目表やカテゴリツリーに役立ちます。
クエリの場合、ORDA の query() はプレースホルダを含む数式文字列を受け取ります。これにより、インジェクションの問題が回避され、明確に記述できます。
$sel:=ds.Invoice.query("Status = :1 AND Date >= :2"; "Open"; $startDate)
4D のレポート作成では、単純な表形式の出力には クイックレポート エディタを、リッチなドキュメントには 4D Write Pro エリアを使用します。 Write Pro はフォームに埋め込まれたワードプロセッシングオブジェクトで、データをテンプレートにマージして PDF または DOCX 形式でエクスポートできます。複雑な内容の場合は、HTML を生成して Web エリアにレンダリングする方が、作成が早くスタイルの調整も容易なことが多いです。これで 4D データベース チュートリアルのこのセクションは終了です。
ステップ 6: 展開と保守
この 4D データベース チュートリアルにおける展開オプションがアーキテクチャを決定します。
- シングルユーザー: 単一マシン上にアプリケーションとデータを配置します。最も単純で、同時実行性は不要です。
- クライアントサーバー — 4D Server がデータとビジネスロジックを保持し、4D Client が接続します。 LAN 環境のチームに最適です。
- 4D Web Server — 4D が REST エンドポイントと Web ページを直接提供します。 ORDA はデータストアへの自動 REST アクセスを公開するため、同じスキーマ上に Web インターフェイスを作成できます。
- 4D for iOS / Android — 構造から生成されるモバイルクライアントです。
バックアップ機能は組み込まれています。 4D Server は自動バックアップをスケジュールし、ポイントインタイムリカバリのためのジャーナル (ログファイル) を維持できます。 ジャーナルは本番稼働後ではなく、稼働前に有効にしてください。 データのコピーで復元テストを行ってください。テストされていないバックアップは計画ではなく、単なる希望に過ぎません。
バージョン管理: プロジェクトモードの構造を使用し、Project/Sources/ フォルダーを Git にコミットしてください。データファイルと DerivedData フォルダーは除外します。これはバイナリ時代からの大きな改善であり、初日から採用する価値があります。
よくある間違いとその回避方法
主キーの規律を怠る。 各テーブルには安定した一意の主キーが必要です。 UUID を使用すれば、レコードの削除やマージ時に自動インクリメント整数で発生する再番号付けの問題を回避できます。
ビジネスロジックをフォームメソッドに記述する。 フォームメソッドはユーザーインターフェイスの処理に専念させるべきです。ルールはプロジェクトメソッドやクラスに移動し、Web エンドポイント、インポート、スケジュールタスクで再利用できるようにしてください。
ジャーナルを無視する。 ジャーナルがないと、書き込み中のクラッシュでデータファイルに不整合が生じる可能性があります。必ず有効にしてください。
リレーションシップでのループ。 大きなループ内で [Table]Related.Field にアクセスすると、クエリ回数が倍増します。 ORDA で事前にロードするか、RELATE MANY を一度だけ使用してください。
4D を SQL のように扱う。 SQL も使用可能ですが、4D の慣用的なコードは一般的に短く、フォームやイベントとの統合が優れています。 4D データベース チュートリアルの一環として、まずはネイティブ言語を学習してください。
学習パスとリソース
公式 4D ドキュメントと、ORDA、Write Pro、バージョン固有の変更点をカバーする 4D Developer Blog から始めてください。 4D コミュニティフォーラムは活発で、具体的な質問に対して適切な回答が得られます。 プラットフォームを問わず適用されるリレーショナル設計の基礎については、Wikipedia のリレーショナルデータベースや SQL の項目が、クエリの正規化とセマンティクスに関する有用な情報を提供しています。
現実的な学習シーケンス: まず単一テーブルの連絡先管理を作成し、次に関連テーブルとリストボックスを追加し、次に値リストとクエリフォームを追加し、最後にクライアントサーバーを展開します。 各ステップで新しい概念を導入することで、圧倒されることなく学習できます。
重要なポイント
- 4D は、リレーショナル データベース、IDE、フォーム デザイナー、および Web サーバーを 1 つの製品に組み合わせたもので、カスタム ビジネス アプリケーションを迅速に提供する必要がある小規模チームに適しています。この 4d データベース チュートリアルでは、その効率性を強調します。
- 構造エディターでテーブルとリレーションシップを定義し、フォームエディターで画面を作成し、メソッドとトリガー (すべての 4D アプリケーションを構成する 4 つのオブジェクト) を介してロジックを接続します。
- ORDA (
ds、エンティティ、エンティティ選択) は最新のデータ アクセス層であり、新しいコードに推奨される選択肢です。従来のコマンドはレガシープロジェクトで引き続き有効です。 - UUID 主キーを使用し、ジャーナルを有効にし、最初からプロジェクト モード構造を Git にコミットして、後で面倒な移行を回避します。
- ビジネス ロジックをフォーム メソッドから外し、大規模なループ内でリレーションを辿る代わりに関連データをプリロードします。
出典と詳細情報
- リレーショナル データベース — Wikipedia: リレーショナル データベース (RDB) は、1970 年に E. F. Codd によって提案された、データのリレーショナル モデルに基づくデータベースです。リレーショナル データベース管理システム (RDBMS…)
よくある質問
4D は SQL データベースですか?
4D は、独自のネイティブ言語と統合された SQL エンジンを備えたリレーショナル データベースです。 Begin SQL / End SQL を介して SQL ステートメントを発行できますが、ほとんどの 4D 開発では SQL ではなく ORDA またはクラシック 4D コマンドが使用されます。基礎となるモデルはリレーショナル (テーブル、キー、リレーション) であるため、毎日作成する構文がそうでなくても、SQL の概念はそのまま適用できます。
4D を使用するにはプログラミングの知識が必要ですか?
フォームとビジネス ルールは 4D コードにリンクされているため、基本的なプログラミングの知識は非常に役立ちます。とはいえ、4D に組み込まれたフォームエディターとウィザードを使用すると、最小限のコードで機能的なデータ入力アプリケーションを作成できます。一般に、シチズン開発者はフォームと値リストから始めて、カスタム動作に必要なメソッドを学びます。初めての方には、4d データベースのチュートリアルが役立ちます。
ORDA とクラシック 4D コマンドの違いは何ですか?
ORDA は、データ ストア (ds)、エンティティ、エンティティ選択を中心に構築されたオブジェクト指向のアクセス レイヤーであり、連鎖可能なクエリとクライアント側の選択のサポートを備えています。 QUERY、CREATE RECORD、MODIFY SELECTIONなどの従来のコマンドは、クラシック選択と現在のレコードに対して機能します。 ORDA は新規開発に推奨されるアプローチですが、古いコードベースでは従来のコマンドが依然として一般的です。
4D アプリケーションは Web またはモバイル上で実行できますか?
はい。 4D には組み込み Web サーバーが含まれており、ORDA はデータ ストア上で REST エンドポイントを公開できるため、ブラウザ フロントエンドは同じスキーマと通信できます。 4D は、iOS および Android 用のモバイル クライアント生成も提供します。その代償として、Web クライアントとモバイル クライアントは認証と各リクエストによって返されるデータの量に細心の注意を払う必要があります。
4D データベースを安全にバックアップするにはどうすればよいですか?
4D Server でジャーナル (ログ ファイル) を有効にすると、手動コピーに頼るのではなく、特定の時点までリカバリして自動バックアップをスケジュールできるようになります。緊急時に必要になる前に、必ずデータのコピーに対して復元をテストしてください。構造とデータファイルは変更頻度が異なるため、データ ファイルとは別にバージョン管理下に置きます。
4D は小規模ビジネス アプリに適していますか?
4D は、まさにこのシナリオ、つまりフォーム、レポート、リレーショナル スキーマを使用してカスタム ビジネス アプリケーションを作成する小規模なチーム向けに設計されています。コア構造を変更することなく、クライアント/サーバー展開や Web アクセスに合わせて拡張できます。主な考慮事項は、ライセンス コストと、主流の Web スタックと比較して人材プールが小さいため、長期的なメンテナンスと構築速度を比較検討する必要があります。
よくある質問
4D は SQL データベースですか?
4D は、独自のネイティブ言語と統合された SQL エンジンを備えたリレーショナル データベースです。 Begin SQL / End SQL を介して SQL ステートメントを発行できますが、ほとんどの 4D 開発では SQL ではなく ORDA またはクラシック 4D コマンドが使用されます。基礎となるモデルはリレーショナル (テーブル、キー、リレーション) であるため、毎日作成する構文がそうでなくても、SQL の概念は伝わります。
4D を使用するにはプログラミングの知識が必要ですか?
フォームとビジネス ルールは 4D コードにリンクされているため、基本的なプログラミングの知識は非常に役立ちます。とはいえ、4D に組み込まれたフォームエディターとウィザードを使用すると、最小限のコードで機能的なデータ入力アプリケーションを作成できます。一般に、シチズン開発者はフォームと値リストから始めて、カスタム動作に必要なメソッドを学びます。初めての方には、4d データベースのチュートリアルが役立ちます。
ORDA とクラシック 4D コマンドの違いは何ですか?
ORDA は、データ ストア (ds)、エンティティ、およびエンティティ選択を中心に構築されたオブジェクト指向のアクセス レイヤーであり、連鎖可能なクエリとクライアント側の選択のサポートを備えています。 QUERY、CREATE RECORD、MODIFY SELECTION などの従来のコマンドは、従来の選択項目と現在のレコードに対して機能します。 ORDA は新規開発に推奨されるアプローチですが、古いコードベースでは従来のコマンドが依然として一般的です。
4D アプリケーションは Web またはモバイル上で実行できますか?
はい。 4D には組み込み Web サーバーが含まれており、ORDA はデータ ストア上で REST エンドポイントを公開できるため、ブラウザ フロントエンドは同じスキーマと通信できます。 4D は、iOS および Android 用のモバイル クライアント生成も提供します。その代償として、Web クライアントとモバイル クライアントは認証と各リクエストによって返されるデータの量に細心の注意を払う必要があります。
4D データベースを安全にバックアップするにはどうすればよいですか?
4D Server でジャーナル (ログ ファイル) を有効にすると、手動コピーに頼るのではなく、特定の時点までリカバリして自動バックアップをスケジュールできるようになります。緊急時に必要になる前に、必ずデータのコピーに対して復元をテストしてください。構造はさまざまな速度で変化するため、データ ファイルとは別にバージョン管理下に置きます。
4D は小規模ビジネス アプリに適していますか?
4D は、まさにこのシナリオ、つまりフォーム、レポート、リレーショナル スキーマを使用してカスタム ビジネス アプリケーションを作成する小規模なチーム向けに設計されています。コア構造を変更することなく、クライアント/サーバー展開や Web アクセスに合わせて拡張できます。主な考慮事項は、ライセンス コストと、主流の Web スタックと比較して人材プールが小さいため、長期的なメンテナンスと構築速度を比較検討する必要があります。
職場アカウントで Power Apps を無料で試してみる
Microsoft 365、Dataverse、Power Automate に組み込まれたエンタープライズ グレードのローコード アプリ開発。