# エンティティ
エンティティは、データベース内に情報を保持し、データベースモデルを実装することを可能にする要素です。 これは、データベースのテーブルまたはビューとみなすことができます。
エンティティは、関連する情報を保存するエンティティアトリビュートを介して定義されます。エンティティアトリビュートの例は次のとおりです: Name、Address、Zip Code、Cityなど。
## 主キー
OutSystemsでは、主キーは「エンティティ識別子」と呼ばれます。
エンティティが作成されると、「Id」というアトリビュートが自動的にエンティティ識別子として追加されます。 デフォルトではデータ型はLong Integerで、自動的にシーケンス番号として値が計算されます(OutSystemsではAutoNumber)。 そのため、個々のエンティティレコードを一意に識別するための特別なロジックを実装する必要はありません。
別のデータ型をエンティティ識別子として使ったり、アトリビュートのAutoNumberを無効にしたりできます。 その場合は、個々のエンティティレコードを一意に識別するためのロジックを実装する必要があります。
別のアトリビュートをエンティティ識別子として設定するには、そのアトリビュートを右クリックして識別子として設定します。
OutSystemsでは、エンティティ識別子となれるのは1つのアトリビュートだけであるため、複合キーを持つことはできません。 ただし、インデックスを使用して代替キーを作成できます(インデックスについては以下を参照)。
## シーケンシャルアトリビュート
エンティティ識別子アトリビュートには、シーケンシャルアトリビュートが便利です。 これにより、簡単に各レコードが一意の主キーを持てるようになります。
エンティティアクションによって新しいレコードが作成されると、シーケンシャルで一意の新しい値をプラットフォームが自動的に計算します。
1つのエンティティに許可されるシーケンシャルアトリビュートは1つだけです。
## インデックス
関係データベースのように、OutSystemsは、エンティティのデータにすばやくアクセスするためのインデックスを提供します。 通常、エンティティの1つまたは複数のアトリビュートで検索やソートを行う場合、これらのアトリビュートに基づいたインデックスを作成することで高速化できます。
インデックスは、代替キーや複合キーを作成するために使用することもできます。
インデックスを作成する際には、データの取得と挿入のどちらを優先するかを考える必要があります(後者にいくらかのオーバーヘッドが生じる可能性があるため)。
## エンティティ変更時の影響
新しいエンティティアトリビュートを作成すると、データベースに保存されているすべてのレコードの更新をプラットフォームが自動的に管理します。 新しいアトリビュートはレコードに追加され、そのデータ型のデフォルト値が設定されます。
エンティティアトリビュートを必須として設定すると、ユーザーインターフェイス上でプラットフォームによって自動的に検証されます。 しかし、データベースでは必須アトリビュートはNull値を許容するように作成されるため、データベースレベルでは必須アトリビュートは検証されません。
エンティティやエンティティアトリビュートを削除すると、それが使用されているかどうかにかかわらずプラットフォームは許可して削除しますが、使用されている場合は要素を修正する必要があります。 データベースでは、プラットフォームがエンティティやエンティティアトリビュートを削除することはありません。
## エンティティと静的エンティティを選択する
管理する必要があるデータのタイプに基づいてエンティティと静的エンティティを使用します。
- 時間的とともに変化する可能性のあるデータを保存する場合は、エンティティを使用します。エンティティは、実行時の作成、読み取り、更新、削除(CRUD)の各操作をサポートしています。
- 実行時に変化しない固定の事前定義されたデータの場合は、静的エンティティを使用します。静的エンティティは読み取り操作のみをサポートし、列挙型として機能します。詳細については、[「静的エンティティ」](https://success.outsystems.com/ja-jp/documentation/11/building_apps/data_management/data_modeling/static_entities/)をご覧ください。
たとえば、経理アプリでユーザーの詳細を保存する必要があるとします。このデータは頻繁に変更される可能性があるため、エンティティに保存します。一方、[PaymentStatus]フィールドに「Pending」、「Completed」、「Failed」などの事前定義された値を保存する場合は、固定値であるため、静的エンティティを使用する必要があります。
### エンティティを静的エンティティに変換する
既存のエンティティを静的エンティティに変換するには、エンティティを右クリックして[ **Advanced** ]メニューから[ **Convert to Static Entity** ]を選択します。
エンティティを静的エンティティに変換した後、データベースのレコードを静的レコードとしてインポートできます。データベースのレコードをインポートするには、静的エンティティを右クリックして[ **Edit Entity** ]を選択し、[ **Import from Database** ]ボタンをクリックします。
既存の静的エンティティをエンティティに変換するには、エンティティを右クリックして[ **Advanced** ]メニューから[ **Convert to Entity** ]を選択します。