メインコンテンツまでスキップ

データベース

Squid は複数のデータベースとシームレスに統合できるため、データに簡単にアクセスできます。各データベースは異なる認可(authorization)およびアクセス制御で構成でき、公開したいデータのみをユーザーがアクセスできるようにできます。

Squid の database connectors は、パワフルさとシンプルさの両方を備えている点が魅力です。database connectors を追加すると、整理された SDK を使ってデータにアクセスし、操作できます。

Squid は、無限にカスタマイズ可能なセキュリティ関数、自然言語でデータに対するアドホックな質問ができる Query with AI、さらには別々の database connectors の結果同士を join できるような粒度の細かいデータクエリなど、多くのデータベース機能を提供します。

データベースに接続する

  1. Squid Console の Connectors タブに移動します。
  2. 「Available Connectors」をクリックし、データベースの種類を選択します。
  3. 必要な接続情報を入力し、接続テストを行います。
  4. 「Next」をクリックし、表示されているスキーマが正確であることを確認します。必要に応じて、Squid で使用する予定のないテーブルを削除します(後でいつでも追加し直せます)。
  5. 「Save」をクリックして connector を確定します。

Squid's IP address

To prevent denial-of-service attacks, brute force password attacks, and other forms of malicious activity, some providers recommend restricting your network to allow access only from specific IP addresses. This procedure is commonly known as allowlisting, and it limits access to your resources by only accepting connections from a specific list of endpoints.

Refer to your resource provider to determine if you need to add Squid's IP addresses to your access list. If allowlisting is required, you can find Squid's IP addresses on the application overview page of the Squid Console (located in the Cloud Provider section).

Query with AI

Query with AI を使うと、自然言語でデータについて質問できます。Squid AI は、自然言語形式の回答に加えて、回答を得るために実行したデータベースクエリと手順も返します。SQL や NoSQL クエリを書かずにデータを探索したり、アドホックな質問をしたりできます。Query with AI は、データベース connector の Schema タブ、または Squid の AI Agent Studio 内で利用できます。

Query with AI でできることについては、documentation を参照してください。

接続済みデータベースを使用する

クライアントからデータにアクセスするには、connector 作成時に指定した値である connector ID を使用します。connector ID は、Squid Console の connectors ページで確認できます。

Client code
await squid
.collection('COLLECTION_NAME', 'YOUR_CONNECTOR_ID')
.query()
.eq('field', 'value')
.snapshots()
.subscribe((data) => {
// Do something with your data
});

フルスタックアプリケーションで database connector とやり取りする方法については、documentation を参照してください。

データベースを保護する

データベース connector を保護するには、データベースセキュリティデコレーター(@secureDatabase または @secureCollection)を使用する関数を 1 つ以上作成します。以下は、ユーザーがドキュメント内の userId フィールドを変更できないようにするために、バックエンドプロジェクトへ追加できる、より複雑なセキュリティルールの例です。

Backend code
export class ExampleService extends SquidService {
@secureCollection('table_name', 'update', 'CONNECTOR_ID')
secureUpdate(context: MutationContext): boolean {
// If the user is not authenticated, the update is not allowed.
const auth = this.getUserAuth();
if (!auth) return false;

// If the userId has changed, the update is not allowed.
const { after, before } = context.beforeAndAfterDocs;
if (after.userId !== before.userId) return false;

// The update is only allowed if the user making the request
// matches the user being updated.
return after.userId !== auth.userId;
}
}

データベース connectors の保護について詳しくは、データ保護(securing data)の documentation を参照してください。

データベーススキーマ

データベースを Squid に接続すると、データベース内の既存スキーマに基づいてスキーマが自動生成されます。スキーマを表示するには、Squid Console で対象のデータベース connector に移動し、... ボタンをクリックして、ドロップダウンメニューから Schema を選択します。

このインターフェースを使って、スキーマ構造の確認、スキーマ変更、ルールの検証管理を行い、データの正確性を担保できます。

コレクション(collections)とフィールド(fields)を理解する

コレクションはデータベース内の主要な整理単位であり、その基盤となる構造は database connector の種類によって異なります。SQL データベースでは、コレクションは table を表します。一方 NoSQL データベースでは、コレクションは ドキュメントのコレクション を表します。

コレクションは connector 内で一意の名前で識別されます。コレクションは 1 つ以上のドキュメントで構成され、SQL データベースではドキュメントは row を表し、NoSQL データベースでは document を表します。ドキュメントには、異なるデータ要素を表す 1 つ以上のフィールドが含まれます。コレクション内の各フィールドには特定の属性セットがあり、効率的なデータ管理と connector 操作を可能にします。

以下は、コレクションとフィールドの一般的な構造および属性の詳細です。

Collections:

  • Name: 関連する row または document の集合をグルーピングし参照するために役立つ、connector 内の一意な識別子。

Documents:

  • ID: コレクション内の一意な識別子。ID はランダムにできますが、ユーザー ID やその他の重要なデータポイントにすることもできます。

Fields:

  • Name: フィールド名。insert/update/query を行う際は、ドキュメントのフィールド名と一致させる必要があります。
  • Type: フィールドが属するデータカテゴリを指定します。stringnumberbooleandatemaparray などが含まれます。選択した type によって追加の検証ルールが決まる場合があります。
    • String: 最小長と最大長を設定できます。
    • Number: 最小値と最大値を設定できます。
  • Primary Key: フィールドがコレクション内の一意な識別子として機能するかを示し、レコードの識別に役立ちます。
  • Required: フィールドへのデータ入力が必須かどうかを示します。
  • Default Value: フィールドに事前設定値を割り当てます。

追加フィールドを許可する(Allowing extra fields)

一部の database connectors(多くは NoSQL のデータ構造を持つもの)は dynamic schema をサポートします。dynamic schema はデータを追加するにつれて変化するため、事前にスキーマを定義する必要がありません。データが insert/update/remove されると、データベースが自動的にスキーマを構築します。dynamic schema がサポートされているかどうかは、使用している database connector の documentation を参照してください。

dynamic schema をサポートする connectors では、デフォルトで extra fields が許可されます。コレクションのスキーマ変更を防ぎたい場合は、Schema に移動して対象のコレクションを選択し、Allow extra fields をオフに切り替えます。無効化すると、extra fields を含むドキュメントの insert または update は拒否されます。

追加フィールドを許可するトグル

Allow extra fields が無効になっていても、Rediscover schema をクリックした後に、以前は未知だったフィールドが既知のスキーマの一部になった場合、その新しいフィールドはシームレスに受け入れられます。