4D v13.44Dと4D SQLエンジン統合の原則 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
4Dと4D SQLエンジン統合の原則
|
4D SQL | 説明 | 4D |
Varchar | 文字テキスト | テキストまたは文字 |
Real | 範囲+/-1.7E308の浮動小数点数 | 実数 |
Numeric | 範囲+/- 2E64の数値 | 64 bit整数 |
Float | 浮動小数点数 (事実上無限) | Float |
Smallint | 範囲-32,768から32,767の数値 | 整数 |
Int | 範囲-2,147,483,648から2,147,483,647の数値 | 倍長整数 |
Int64 | 範囲 +/- 2E64の数値 | 64 bit整数 |
UUID | 16バイトの数値 (128 bit) で32個の16進文字を含む | UUID 文字フォーマット |
Bit | TRUE/FALSEまたは1/0値のみをとるフィールド | ブール |
Boolean | TRUE/FALSEまたは1/0値のみをとるフィールド | ブール |
Blob | 2GBまで: 画像、アプリケーション、ドキュメントなどのバイナリオブジェクト | Blob |
Bit varying | 2GBまで: 画像、アプリケーション、ドキュメントなどのバイナリオブジェクト | Blob |
Clob | 2GB文字までのテキスト。この カラム (フィールド) にインデックスは付けられません。これはレコード自身には保存されません。 | テキスト |
Text | 2GB 文字までのテキスト。このカラム (フィールド) にインデックスは付けられません。これはレコード自身には保存されません。 | テキスト |
Timestamp | 日付と時間。日付は'YYYY/MM/DD'フォーマットで時間は'HH:MM:SS:ZZ'フォーマット | 個別に処理される日付と時間 (自動変換) |
Duration | 'HH:MM:SS:ZZ'フォーマットの時間 | 時間 |
Interval | 'HH:MM:SS:ZZ'フォーマットの時間 | 時間 |
Picture | 2GBまでのPICTピクチャ | ピク チャ |
数値タイプ間の自動変換が実装されています。
数値を表す文字列は対応する数値に変換されません。特別なCAST関数を使用して、タイプ間の変換を行うことができます。
以下のSQLデータタイプは 実装されていません:
NULL値は4D SQLランゲージおよび4Dデータベースエンジンに実装されています。しかし4Dランゲージではサポートされていません。にもかかわらず、Is field value NullとSET FIELD VALUE NULLコマンドを使用して、4DフィールドのNULL値を読み書きできます。
4Dでの互換性のため、4Dデータベーステーブルに格納されたNULL値は、4Dランゲージを使用して操作する際、自動でデフォルト値に変換されます。例えば以下の文において:
myAlphavar:=[mytable]MyAlphafield
MyAlphafieldフィールドにNULL値が含まれる場合、myAlphavar変数には"" (空の文字列) が代入されます。
デフォルト値はデータ型により異なります:
他方、このメカニズムは原則として、クエリのような4Dデータベースエンジンレベルでは適用されません。実際、空の値の検索 (例えばmyvalue=0) はNULL値が格納されたレコードを見つけませんし、逆の場合も同様です。両方のタイプの値 (デフォルト値とNULL) がレコードの同じフィールドに存在する場合、処理が変更されたり、あるいは追加のコードが必要となることがあります。
この不便さを避けるために、4Dランゲージで、すべての処理を標準化するために使用できるNULL値を空値にマップオプションがあります。ストラクチャエディタのフィールドインスペクタにあるこのオプションを使用すると、デフォルト値を使用する原則をすべての処理に拡張できます。NULL値を含むフィールドは、機械的にデフォルト値を含むものとして扱われます。このオプションはデフォルトでチェックされています。
NULL値を空値にマッププロパティはデータベースエンジンの低レベルで考慮されます。特にIs field value Nullコマンドに影響します。
NULL値の入力を拒否フィールドプロパティは、NULL値が格納されることを防ぐ目的で使用されます:
フィールドのこの属性にチェックが入れられていると、そのフィールドにNULL値を格納できなくなります。この低レベルのプロパティはSQLのNOT NULL属性に対応します。
一般的に、4DデータベースでNULL値を使用したい場合、4DのSQLランゲージのみをデータベースで使用することをお勧めします。
Note: 4Dでは、フィールドに"必須入力"属性を設定することもできます。2つの設定のコンセプトは似ていますが、スコープが異なります。"必須入力"属性はデータ入力コントロールであり、“NULL値の入力を拒否”属性はデータベースエンジンレベルで動作します。
この設定がされたフィールドがNULL値を受け取ると、エラーが生成されます。
4Dプロジェクトメソッドにセキュリティ関連のプロパティ、SQL利用可が追加されました:
このプロパティはODBC Driver経由、あるいはBegin SQL/End SQLタグの間に挿入されたSQLコード、またはQUERY BY SQLコマンドによる実行など、内部外部問わずすべてのSQLクエリに適用されま す。
Notes:
4Dはスキーマのコンセプトを実装しています。スキーマはデータベースのテーブルを含む仮想的なオブジェクトです。SQLにおいてスキーマの目的は、異なるデータベースオブジェクトのセットに特定のアクセス権を割り当てることです。スキーマはデータベースを、そのデータベース全体を形成する個々の独立するエンティティに分割します。つまりあるテーブルはいつもただ1つのスキーマに属します。
Note: スキーマによるアクセスコントロールは、外部からの接続のみに適用されます。Begin SQL/End SQLタグ、SQL EXECUTE、QUERY BY SQL等によって4D内で実行されるSQLコードは、常に完全なアクセスを持ちます。
4DのSQLカタログには7個のシステムテーブルが含まれていて、読み込み権限を持つSQLユーザがアクセス可能です。システムテーブルには以下があります: _USER_TABLES, _USER_COLUMNS, _USER_INDEXES, _USER_CONSTRAINTS, _USER_IND_COLUMNS, _USER _CONS_ COLUMNS, _USER_SCHEMAS.
SQLの慣習に従い、システムテーブルはデータベースストラクチャを記述します。以下はシステムテーブルに関する説明とフィールドです:
_USER_TABLES | データベースのユーザテーブルを記述します | |
TABLE_NAME | VARCHAR | テーブル名 |
TEMPORARY | BOOLEAN | テーブルが一時的の場合True、そうでなければFalse |
TABLE_ID | INT64 | テーブル番号 |
SCHEMA_ID | INT32 | スキーマ番号 |
_USER_COLUMNS | データベースのユーザテーブルのカラムを記述します | |
TABLE_NAME | VARCHAR | テーブル名 |
COLUMN_NAME | VARCHAR | カラム名 |
DATA_TYPE | INT32 | カラムタイプ |
DATA_LENGTH | INT32 | カラム長 |
NULLABLE | BOOLEAN | カラムがNULLを受け入れる場合True、そうでなければFalse |
TABLE_ID | INT64 | テーブル番号 |
COLUMN_ID | INT64 | カラム番号 |
AUTOGENERATE | BOOLEAN | カラム値が自動的に生成されたのならTrue、そうでなければFalse |
AUTOINCREMENT | BOOLEAN | カラム値が自動的に増加したのならTrue、そうでなければFalse |
_USER_INDEXES | データベースのユーザインデックスを記述します | |
INDEX_ID | VARCHAR | インデックス番号 |
INDEX_NAME | VARCHAR | インデックス名 |
INDEX_TYPE | INT32 | インデックスタイプ (1=Bツリー / 複合, 3=クラスタ / キーワード, 7=自動) |
TABLE_NAME | VARCHAR | インデックスがはられたテーブル名 |
UNIQUENESS | BOOLEAN | インデックスが重複不可の制約を課す場合True、そうでなければFalse |
TABLE_ID | INT64 | インデックスがはられたテーブル番号 |
_USER_IND_COLUMNS | データベースのユーザインデックスのカラムを記述します | |
INDEX_ID | VARCHAR | インデックス番号 |
INDEX_NAME | VARCHAR | インデックス名 |
TABLE_NAME | VARCHAR | インデックスがはられたテーブル名 |
COLUMN_NAME | VARCHAR | インデックスがはられたフィールド名 |
COLUMN_POSITION | INT32 | インデックス中のカラムポジション |
TABLE_ID | INT64 | インデックスがはられたテーブル番号 |
COLUMN_ID | INT64 | カラム番号 |
_USER_CONSTRAINTS | データベースの整合性制約を記述します | |
CONSTRAINT_ID | VARCHAR | 制約番号 |
CONSTRAINT_NAME | VARCHAR | 制約定義に割り当てられた名前 |
CONSTRAINT_TYPE | VARCHAR | 制約定義のタイプ (P=主キー、R=参照整合性 - 外部キー、4DR=4Dリレーション) |
TABLE_NAME | VARCHAR | 制約定義付きのテーブル名 |
TABLE_ID | INT64 | 制約付きのテーブル番号 |
DELETE_RULE | VARCHAR | 参照制約の削除ルール – CASCADEまたはRESTRICT |
RELATED_TABLE_NAME | VARCHAR | リレートしたテーブル |
RELATED_TABLE_ID | INT64 | リレートしたテーブルの番号 |
_USER_CONS_COLUMNS | データベースのユーザ制約のカラムを記述します | |
CONSTRAINT_ID | VARCHAR | 制約番号 |
CONSTRAINT_NAME | VARCHAR | 制約名 |
TABLE_NAME | VARCHAR | 制約のあるテーブル名 |
TABLE_ID | INT64 | 制約のあるテーブル番号 |
COLUMN_NAME | VARCHAR | 制約のあるカラム名 |
COLUMN_ID | INT64 | 制約のあるカラム番号 |
COLUMN_POSITION | INT32 | 制約のあるカラムのポジション |
RELATED_COLUMN_NAME | VARCHAR | 制約中リレートしたカラムの名前 |
RELATED_COLUMN_ID | INT32 | 制約中リレートしたカラムの番号 |
_USER_SCHEMAS | データベースのスキーマを記述します | |
SCHEMA_ID | INT32 | スキーマ番号 |
SCHEMA_NAME | VARCHAR | スキーマ名 |
READ_GROUP_ID | INT32 | 読み込みのみアクセスをもつグループ番号 |
READ_GROUP_NAME | VARCHAR | 読み込みのみアクセスをもつグループ名 |
READ_WRITE_GROUP_ID | INT32 | 読み書きアクセスをもつグループ番号 |
READ_WRITE_GROUP_NAME | VARCHAR | 読み書きアクセスをもつグループ名 |
ALL_GROUP_ID | INT32 | フルアクセスをもつグループ番号 |
ALL_GROUP_NAME | VARCHAR | フルアクセスをもつグループ名 |
注: システムテーブルには、SYSTEM_SCHEMAという名前の特別なスキーマが割り当てられます。このスキーマを修正・削除することはできません。このスキーマは、テーブルインスペクタパレットに表示されるスキーマリストには含まれません。すべてのユーザは、読み込み専用でこのスキーマにアクセスできます。
4D SQLサーバのレベルでは、マルチデータベースのアーキテクチャが実装されています。4Dでは以下のことが可能です:
SQLランゲージでは主キーを使用して、テーブル中のレコード (ロー) を指定するカラム (フィールド) 決定します。主キーの設定は特に4Dテーブルのレコード複製機能において必要となります (SQLを使用した複製参照)。
4Dでは2つの方法を使用してテーブルの主キーを管理できます:
テーブルを作成するとき (CREATE TABLEコマンドを使用) またはカラムを追加や変更するとき (ALTER TABLEコマンドを使用)、主キーを設定できます。主キーはPRIMARY KEY句とそれに続くカラム名またはカラムリストで指定されます。 詳細はを参照してください。
4Dではストラクチャエディタのコンテキストメニューを使用して直接主キーを作成したり削除したりできます。
主キーを作成するには:
主キーに含められたフィールドにはエディタ中で下線が引かれ、SQL定義にはPRIMARY KEYキーワードが表示されます。
主キーに属するフィールドには重複する値が含まれてはいけません。既にテーブルレコードに重複する値が存在する場合、このことを知らせる警告ダイアログが表示されます。
Note: 主キーに属するカラムはNULL値を受け入れません。
テーブルから主キーを取り除くには:
プロダクト: 4D
テーマ: 4DでSQLを使用する