フィールド
定義
インスペクターパレットの「定義」エリアでは、フィールドの基本プロパティを設定します。一部のプロパティは、特定のフィールド型を選択した場合にのみ使用できます。
カラー
各フィールド名に色を割り当て、役割や属性に応じて区別できます。たとえば、一意フィールドと必須フィールドに別々の色を使用できます。また、テーブルやリレーションごとに個別の色を設定することもできます。
1つ以上のフィールドの色を設定するには、対象を選択し、次のいずれかを使用して色を選択します:
- ストラクチャーエディターのツールバーにあるカラー ボタン
- フィールドのコンテキストメニューにあるカラーコマンド
- インスペクターパレットのカラーオプション
自動オプションを使用すると、フィールド名に標準の元の色を適用できます。
非表示
フィールドの非表示プロパティを選択すると、アプリケーション環境およびプラグインに対してフィールドを非表示にできます。この属性を設定するとユーザーからフィールドが隠されます。非表示フィールドは、アプリケーション環境に表示される4Dの標準エディターやダイアログボックスには表示されず、プラグインからも使用できません。対象となるエディターとダイアログボックスは次のとおりです:
- すべてのクエリエディター
- 並べ替えエディター
- ラベルエディター
- クイックレポート
- データの書き出し/読み込みダイアログボックス
- フォーミュラエディター
これらの場所では、ユーザーはフィールドを表示したり選択したりできません。たとえば、ラベルエディターで作成したデザインで非表示フィールドを選択することはできません。
注記: エディターの使用時に、ユーザーは仕様(作成したクエリや並べ替えなど)をディスク上のファイルに保存できます。この場合、後から非表示に設定したフィールドも引き続き処理に使用されます。また、ユーザーはフォーミュラエディターで非表示フィールドの名前を入力できます。
非表示フィールドはストラクチャーエディターのウィンドウでイタリック体で表示されます。
一意
各レコードのこのフィールドに異なる(一意の)値を保証するには、一意属性を使用します。この属性は、テーブル内の各レコードを一意に識別するフィールドに設定します。従業員番号、社会保障番号、発注番号などを保存するフィールドの検証に役立ちます。
一意属性は、他の値と同様に空の値の重複も禁止します。空のフィールドを別のレコードに重複して保存することはできません。
ストラクチャーエディターの情報バーには、フィールドで一意プロパティが選択されているかどうかが表示されます。
4Dでは、一意属性が設定されたフィールドにインデックスが必要です。フィールドで一意属性を選択すると、インデックスがまだ存在しない場合は作成されることを示す視覚的な表示が現れます:
エディターでは、一意フィールドのインデックスを削除できません(このフィールドの選択時にはなしオプションやインデックス削除コマンドを使用できません)。一意フィールドのインデックスを削除するには、先に一意属性を解除してください。
RESTリソースとして公開
このオプションは、フィールドをRESTリクエストに公開するかどうかを設定します。
- このオプションはテーブルレベルでも設定できます。
- このオプションはORDAリモートデータストア機能で使用されます。
NULL値の入力を拒否
このプロパティは、NULL値の保存を禁止します。フィールドでこのプロパティを選択すると、NULL値を保存できません。この属性が設定されたフィールドにNULL値が渡されると、エラーが生成されます。この低レベルプロパティはSQLのNOT NULL属性に正確に対応します。
4Dのフィールドには「必須」属性(以下を参照)も設定できます。両者は似ていますが、適用範囲が異なります。「必須」属性はデータ入力を制御する一方、「NULL値の入力を拒否」属性はデータベースエンジンのレベルで動作します。
NULL値を空の値にマップ
このプロパティを使用すると、4Dランゲージでフィールドの「空の」値とNULL値を一貫して処理できます。
NULL値が完全にサポートされているORDAベースの開発では、このオプションの使用は推奨されません。
互換性のため、4Dデータベーステーブルに保存されたNULL値は、4Dランゲージで操作される際に自動的にデフォルト値に変換されます。たとえば、次のステートメントの場合:
$myTextVar:=[myTable]myTextField
myTextFieldフィールドにNULL値が含まれていると、$myTextVar変数には""(空の文字列)が格納されます。デフォルト値はデータ型によって異なります。一方、このメカニズムはクエリなど、4Dデータベースエンジンレベルで実行される処理には原則として適用されません。そのため、「空の」値(例: $myvalue=0)を検索してもNULL値を格納するレコードは見つからず、その逆も同様です。同じフィールドのレコードにデフォルト値とNULL値の両方が存在する場合、一部の処理の結果が変わったり、追加コードが必要になったりすることがあります。このような問題を避けるため、NULL値を空の値にマップオプションを使用して、4Dランゲージでの処理を統一できます。このプロパティを使用すると、NULL値を格納するフィールドは常にデフォルト値を格納するものとして扱われます。
- 生成されていないUUID形式のAlphaフィールドはNULLとして扱われません(UUID形式を参照)。
- このプロパティはデータベースエンジンの非常に低いレベルで考慮されます。特に
Is field value Nullコマンドに作用します。
自動インクリメント
自動インクリメントプロパティは、テーブル内で連番を生成します。Integer、Long Integer、Integer 64 bits型のフィールドで使用できます。
このプロパティを持つフィールドは、テーブルにレコードが作成されるたびに自動でインクリメントされます。割り当てられる連番は、4Dが管理するテーブルの「内部カウンター」の値に対応します。この内部カウンターには、4DコマンドSequence number、Get database parameter、および#Nマーカー(デフォルト値を参照)からもアクセスできます。
レコードが削除されても、割り当てられた番号がテーブル内で再利用されることはありません。キャンセルされたトランザクション中に生成された番号は「失われます」。自動インクリメントプロパティはSQLのAUTO_INCREMENT属性に対応します。この属性を持つフィールドでは、インスペクターのSQL情報エリアにもAUTO INCREMENTラベルが表示されます。
生成時にはテーブル内で一意であっても、自動インクリメントされた番号をレコードの一意ID主キーとして使用することは推奨されません。特に複数のデータファイルでストラクチャーを使用する場合、内部カウンターが同期しなくなる可能性があります。また、テーブルの内部カウンターはSET DATABASE PARAMETERコマンドでリセットできます。レコードの一意IDを作成するには、次の利点があるUUIDの使用を強く推奨します:
- UUIDはすべてのテーブルおよびデータベース間で一意のIDを生成します。
- UUIDを生成するには、Auto UUIDオプション(以下を参照)と
Generate UUIDコマンドを組み合わせることができます。
レコード内、データファイル内、またはデータファイル外に保存
このオプションメニューは、Text、BLOB、Picture、Object 型のフィールドでのみ使用できます。フィールドデータの保存場所を設定できます。
レコード内
データは各レコードとともに保存されます。通常、大量のデータを含むフィールドにはこのオプションを選択しないでください。ただし、標準的なB-Treeインデックスを使用するにはこの保存形式が必要なため、Textフィールドではデフォルトで選択されています。Textデータをレコード外に保存する場合、インデックス選択メニューは非表示になります。
データファイル内
データはデータファイル内に保存されますが、各レコードの外部に保存されます。このオプションはBLOBおよびPictureフィールドでデフォルト選択されています。大量データを扱う場合、テキスト、ピクチャー、Blob、オブジェクトをレコード外に保存するとデータベースの動作を最適化できます。
データファイル外
データはデータファイルの外部にある別ファイルに保存されます。このオプションについては「外部データの保存」で説明しています。
- このオプションは、以降にテーブルで作成される新規レコードにのみ適用されます。既存レコードのあるテーブルでこのオプションを設定しても、既存レコードは変更されず、テーブルは内部/外部の混在保存モードで動作します。既存レコードにも適用するには、データを圧縮し、レコードを強制更新オプションを使用します。
- データファイル外に保存されたデータは、データ暗号化機能が有効な場合でも暗号化されません。
- このオプションはObject型フィールドでは使用できません。
内部保存の最大サイズ
最適化のため、BLOB、Picture、Text、Object型フィールドのデータはデフォルトでレコード外またはデータファイル外に保存されます。パフォーマンス上、サイズが限られたデータをレコード内に強制保存するとよい場合があります。サイズにばらつきのあるBLOB、Picture、テキスト、オブジェクトデータをアプリケーションで扱う場合に特に有効です。ここで指定する値は、これを下回るサイズのフィールドデータをレコード内に保存するしきい値(バイト単位)です。たとえばPictureフィールドに30,000を指定すると、20 KBの画像はレコード内に、40 KBの画像は設定された保存場所(データファイル内または外)に保存されます。デフォルト値は0で、フィールドデータはすべてレコード外に保存されます。
UUID形式
このプロパティはAlpha型フィールドで使用できます。フィールドにUUID識別子を保存することを示します。保存するデータはUUID形式(32個の文字(A-F、a-f)と数字(0-9)の組み合わせ)に準拠する必要があります。Auto UUIDプロパティ、Generate UUIDコマンド、または任意のカスタムアルゴリズムを使用できます。
UUID形式に準拠しない文字列をこのフィールドに保存しようとすると、4Dが自動的に変換します。同じ処理は、UUIDフィールドに変換された既存の非Alphaフィールドの内容にも適用されます。レコードの読み込み時に値が再フォーマットされ、再保存されます。
UUID形式プロパティが設定されたフィールドはフォームに表示でき、編集も可能です。内容は大文字で表示されます。小文字で表示するには変数を経由する必要があります。
- UUID形式のフィールドをキーワードインデックスや選択リストに関連付けることはできません。
- UUID形式を持つ2つのフィールド間にはリレーションを作成できますが、標準AlphaフィールドとUUID形式のフィールドを関連付けることはできません。
- 初期化(生成)されたUUIDフィールドの値がNULLの場合、空の文字列を返します。生成されていないUUIDフィールドはNULLではなく、「000...」を返します(ゼロの数は文字数と同じです)。生成されていないUUIDフィールドでは、このプロパティは考慮されません(「000...」と表示されます)。
Auto UUID
このオプションはUUID形式プロパティを選択した場合にのみ有効です。Auto UUIDプロパティを使用すると、フィールドにUUID番号が自動生成されます。
UUIDは次の場合に自動計算されます:
- レコードが作成されたとき
- UUIDフィールドにNull値を含むレコードが読み込まれたとき。これは特に、テーブルにUUIDフィールドを追加する前に作成、保存されたレコードで、NULL値を空の値にマップオプションが選択されていなかった場合に発生します。
いずれの場合も、自動生成されたUUIDをフィールドに保存するにはレコードを保存する必要があります。
このプロパティを選択していても、データ読み込み時に4Dは新しい番号を生成せず、読み込まれた値を使用します(形式が無効な場合は必要に応じて変換します)。ただし、読み込まれたフィールドの値が空の場合はUUIDが自動生成されます。
Class
このプロパティはオブジェクト型のフィールドにおいてのみ利用可能です(プロジェクトモードのみ)。これを使用するとクラス型のオブジェクトフィールドを定義することができ、これによってコード保管、シンタックスチェック、そしてオブジェクトフィールドに絡んだコードを打ち込んでいる際のランタイム評価などを改善することができます。
ここには有効なクラス名であればなんでも入力することができます。これには以下のものも含まれます:
- ユーザークラス(例:
cs.MyClass) - ビルトイン4D クラス(例:
4D.File、4D.Folder) - 公開された コンポーネントで定義されたクラス(例:
cs.MyComponent.MyClass)
無効なクラス名を入力した場合、警告がトリガーされ、入力が拒否されます。
ORDA データモデルクラス、ファイルハンドラー、Web サーバー...などのストリーム不可のクラスはオブジェクトフィールドに代入することはできません。
コード内において、値をクラス型のオブジェクトフィールドに代入する場合、4D はその値が宣言されたクラスに所属しているかどうかを検証します。クラスに所属していない場合、あるいはオブジェクトがどのクラスにも属していない場合、エラーがトリガーされます。不明な属性へのアクセスもまたシンタックスエラーを発生させます。
ランタイムにおいて関連づけられたクラス名を取得するためには、classID プロパティを使用してください。例: ds.MyTable.MyField.classID 。
4D.Vectorクラス
オブジェクト型フィールドのクラスとして4D.Vector を割り当てた場合、ベクトルフィールド を定義します。このようなフィールドは埋め込みを保存し、AI 機能を使用してデータをクエリすることに使用することができます。ベクトルに対してどのようにクエリを行うかについては4D.Vector クラス のドキュメンテーションをご覧ください。
また4D Embedding Studio コンポーネント を使用すると、4D.Vector フィールドを設定したり更新したりするに役立ちます。
オブジェクト型フィールドに対して4D.Vector クラスを割り当てると、ストラクチャーエディター内において特定のアイコンがフィールドの型として表示されるようになります: