Salesforceのデータベースを徹底解説


Salesforceは15万社以上の有料顧客を持ち、市場の20%を占めています。これは、CRM市場がいかに分断されているかを考えると、信じられないことです。これはかなりの金額です。

Salesforce の価値を本当に理解するには、そのデータベースの仕組みを理解する必要があります。Excelと同様に、Salesforceにもデータベースがあり、すべての顧客情報を整然と管理しています。しかし、Excelとは異なり、Salesforceにはいくつかの優れた仕組みがあります。リレーショナルな特性がその１つです。

ここでは、Salesforceのデータベース構造と、日頃からSalesforceを使って仕事をされている方にとってなぜ重要なのか、見ていきたいと思います。

# Salesforceデータベースについて
Salesforceは**Oracle**をデータベースとして使用しています。SalesforceとOracleは直接の競合関係であるため、不思議に思われるかもしれません。しかし、AppleとSamsungのように、実のところ両者は半共生関係にあります。Oracle CXはSalesforceと競合しているかもしれませんが、Salesforceは彼らの製品を改善するために、Oracleデータベース機能の１つである[自己保護機能と自己修復機能](https://go.oracle.com/LP=70582)を活用しています。SalesforceはPostgreSQLや他のいくつかの言語も利用していますが、プラットフォームの大部分はOracleデータベース上で動作しています。

Salesforceのデータベースを本当に理解するには、Oracle についてもっと詳しく知ることをお勧めします。参考になるリソースをいくつかご紹介します。

https://www.oracle.com/database/
https://www.oracle.com/database/what-is-a-relational-database/

# Salesforceのテーブルを理解する 
Salesforceは、テーブルを「**オブジェクト**」、行を「**レコード**」、列を「**フィールド**」と呼びます。つまり、Salesforceにはフィールドを持つオブジェクトと、たくさんのレコードがあります。これらのオブジェクトを他のオブジェクトとどのように関連付けるかについては、後ほど詳しく説明します。とりあえず、オブジェクト、フィールド、レコードという3つのコア機能を見ていきたいと思います。

## オブジェクトについて
Salesforceには、主に3つの種類のオブジェクトがあります。

- **標準オブジェクト** : これらのオブジェクトは、Salesforceを初めて起動したときに既に確立されているオブジェクトです。Account Object、Lead Object、Contact Object などがこれにあたります。
- **カスタムオブジェクト** : これは、お客様独自のニーズに基づいて作成するオブジェクトです。例えば、イベント企画ビジネスを運営している場合は、イベントオブジェクトが必要になるかもしれません。 
- **外部オブジェクト** : これらは、Salesforceの外部にデータをマッピングするカスタムオブジェクトです。

これらのオブジェクトは基本的にはデータコンテナです。そして、フィールドやレコードを使って構造化することができます。はっきり言って、Salesforceのカスタムオブジェクトは、単純な Excel スプレッドシートよりも多くの機能を提供します。リレーショナル機能を超えて、Salesforceのカスタムオブジェクトはカスタムレイアウトを生成し、各カスタムオブジェクトにレポート機能や分析機能を素早く設定できます。

## フィールドについて
フィールドとは、Salesforceのカラムのことです。Salesforceの標準オブジェクトには、あらかじめ構築された標準フィールドが付属しています。また、カスタムオブジェクトには自動的に3つの標準フィールドが付属します。

- ID : これには、各レコードの 15 文字の一意のデータ識別子が含まれます。ID フィールドは、Salesforceのキーフィールドです。ここのデータは各データセットに固有のものであり、Salesforce のリレーショナル構造の中核をなすコンポーネントです (これについては後ほど説明します)。
- 名前 : これは単にレコードの名前です。数字や名前を指定することができます。
- システム : これらは読み取り専用で、通常はレコードが最後にタッチされた時間を示します。したがって、LastModifiedByIDのようなものになります。

これらのフィールドは、タイプに関係なく、すべてのSalesforceオブジェクトにあります。

これらのフィールドの他にも、カスタムフィールドがあります。各カスタムフィールドには、それに関連付けられたデータ型があります。つまり、これらのフィールドには、チェックボックス、数式、日付、その他多くのものが含まれます。 [こちらのリスト](https://help.salesforce.com/articleView?id=custom_field_types.htm&type=5)で確認ください。

## レコードについて

オブジェクトとそのフィールドを定義すると、そのオブジェクトにレコードを作成することができます。つまり、「Leads」オブジェクトに新しいアカウントを追加したい場合は、Salesforceで新しいレコードを作成し、事前に定義したフィールドに必要事項を入力してレコードを作成します。

データベースの行と同様に、レコードも一意の識別子 (別名、識別子フィールド) を持ちます。例えば、営業チームがリードと判断した顧客がいるとします。セールスチームは、Salesforceの「Leads」オブジェクトの下に新しいレコードを作成します。そのレコードには一意のIDが与えられ、営業チームメンバーがそのレコードに入力したすべての情報をその特定のアカウントに関連付けます。

# Salesforceのリレーショナルな性質を理解する

典型的なデータベースでは、テーブルは同じタイプのデータを共有することができます。しかし、それらがお互いに関係をもち、お互いのデータを相互利用することはありません。しかし、Salesforceのようなリレーショナル・データベースでは、それが可能です。

オブジェクトのリレーションシップによって、オブジェクトを関連づけて情報を共有し、動的かつ最終的に有用なデータの洗練されたネットワークを作成することができます。例えば、Salesforceの標準オブジェクトである「アカウント」オブジェクトと「コンタクト」オブジェクトがあるとします。リレーションが定義されていることで各アカウントには、そのアカウントに紐づく複数のコンタクト情報が存在することが分かります。

Salesforceでは、カスタムオブジェクトとオブジェクトのリレーションシップを設定することができます。そして、標準オブジェクトはすでにリレーションシップを共有しています。そのため、Salesforce内の「アカウント」タブの上隅に「コンタクト」が自動で表示されています。

次のセクションでは、Salesforceのリレーションシップの種類について説明します。

## Salesforceの2種類のリレーションシップ
- **ルックアップ リレーションシップ** : これらはリレーションシップであり、オブジェクト自体の中から関連するオブジェクトを「検索」することができます。これは、Salesforce内で最も基本的なリレーションシップです。
- **マスター詳細リレーションシップ** : これは、ルックアップリレーションシップと同じですが、大きな違いがあります。マスターと詳細の関係は、ハードリレーションシップを共有しています。つまり、一方のオブジェクトがマスターオブジェクトで、もう一方が詳細オブジェクトです。マスターオブジェクトは詳細オブジェクトを制御します。例えば、Accountsマスターオブジェクトと連絡先Detailオブジェクトがあったとします。Accountsを削除すると、連絡先がすべて削除されてしまいます。これらは非常に複雑になり、複雑なオブジェクト関係のウェブを作成することができます。

通常、オブジェクト同士を常に連動させる場合は、マスター-ディティール関係を使用します。また、オブジェクトが時々関連している場合は、ルックアップ・リレーションシップを使用します。

上記で紹介した2つのリレーションシップの傘下には、他にもいくつかのタイプのリレーションシップがあります。

- **自己参照**
- **外部参照**
- **間接参照**
- **多対多**
- **階層**


Salesforceのリレーションシップタイプについては、[こちら](https://help.salesforce.com/articleView?id=overview_of_custom_object_relationships.htm&type=5)を参照してください。 

# まとめ
Salesforceは、複雑に入り組んだレイヤーをいくつも持つ巨大なデータベースです。すべてのデータポイントは、他のデータポイントと即座に関連付けることができ、ビジネスの原動力となる非常に複雑なデータモデルを作成することができます。マスター詳細やルックアップなど、すべてのリレーションシップが、データモデルの複雑さを大幅に増大させることを理解しておく必要があります。また、リレーションシップが多数ある場合、レコードの削除、レコードの追加、およびレコードの修正は、データモデルとデータ領域内で広範囲に影響を及ぼす可能性があります。


## Salesforce内のデータをもっと活用したい方へ

Salesforceの[S2S接続](https://www.xplenty.com/jp/blog/salesforce-to-salesforce-ja/#3)により、組織間のレコードやオブジェクトの共有を迅速に設定でき、データ共有の方法や戦略を簡単にすることができます。 また、クラウドベースのETL製品であるXplentyを使うことで、Salesforce、S2S、そしてレガシーサーバーやクラウドデータウェアハウスのほとんど全てに対して、ビジュアライゼーションされたデータパイプラインを迅速に作成することができます。



関連ブログ: [Salesforceデータ統合に関するブログをまとめて紹介](https://qiita.com/Azabu10ban/items/99963f7eca90a331aa32)