（なぐり書き）資料作成にあたり、最低限必要な知識_データモデル・

SalesCloud、ServiceCloud、FieldServiceにおける論理データモデルは必須で暗記する必要があります。
公式のデータモデル図は以下になります。（後段に参考のデータモデルも掲載していますが、オフィシャルはこちらとなります。）

かなり下にスクロールする必要あり。Data Model Gallery
https://architect.salesforce.com/diagrams#architecture-gallery

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/01a645a0-cfde-44bb-b886-90c2dae38ba1.png)


#### point
:::note warn
注意
先日の最終試験で、データモデル図が汚すぎ＆一般的な書き方じゃなかったので、減点されました:scream:(本当にすみません。) これから受験されるかたは絶対にSalesforce公式おすすめの [Lucidchart](https://www.lucidchart.com/pages/ja/landing/free-flowchart-software?utm_source=google&utm_medium=cpc&utm_campaign=_chart_ja_allcountries_desktop_search_nb_exact-phrase_&km_CPC_CampaignId=2069993892&km_CPC_AdGroupID=155757396845&km_CPC_Keyword=%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%20%E3%82%B5%E3%82%A4%E3%83%88&km_CPC_MatchType=b&km_CPC_ExtensionID=&km_CPC_Network=g&km_CPC_AdPosition=&km_CPC_Creative=686537897036&km_CPC_TargetID=kwd-410362361210&km_CPC_Country=1009310&km_CPC_Device=c&km_CPC_placement=&km_CPC_target=&gad_source=1&gclid=CjwKCAiAiOa9BhBqEiwABCdG8xpL8BTJMIJ1keojitmrM6PRU2nb_60GsOa4FK4gYgEytgnAVckM0RoCVkYQAvD_BwE)を使ってください！
私のこの記事はあまり参考にならないかもしれません…:cold_sweat:
:::

データモデルをスライドにまとめる際に、凡例の記述が必須です。
標準オブジェクトなのか、カスタムオブジェクトなのか、線は参照なのか、主従なのか、大量データはどこか、識別します。（あと、私は**時間がなくて端折ったんですけれど、本当はOWD(所有者)や共有設定(公開か非公開かなど)の記述が必要**です。ほかの受験者のかたはみなさん書かれてました・・・）
また、大量データが存在する場合に、対処も口述する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/4a5b27ea-696a-4193-9bd7-6a4de773eef0.png)


**データモデルの記述について**
まず、データモデルの定義の仕方ですが、目的や用途に応じてオブジェクトを定義します。
また、リレーションの性質として、権限が親に確実に同等なのか(いわゆる主従)、そうでないのか(参照)を記述する必要があります。

**＜Case1＞**
例えば、会社に従業員が複数名所属しています。そうすると以下のようなデータモデルになりますよね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/252e9be6-1f45-40d8-8d4c-37d8397f9c11.png)

Salesforceには会社や従業員にマッチする取引先、取引先テーブルがありますので、データモデルは以下のように記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/9ced4f1f-7792-4d2a-854f-3aeae0364397.png)

**＜Case2＞**
例えば、トレーニングマスタがあって、だれがその受講をしたか管理したい場合、以下となります。
受講したトレーニングには、トレーニングと取引先責任者を紐づける中間テーブルです。（例：田中課長は10/23にTOEICトレーニングの受講が完了した。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/7c3b93c1-2eff-4013-a9cc-10005cd8dcdd.png)

**データ件数の数え方**
もし、トレーニングが50個、従業員が50万人、平均5個受講している場合、受講したトレーニングは5個×50万で約250万となります。
**100万件以上のデータを扱うため、大量データという判断**になります。（私は今までの案件の経験から100万件以上データが入るとレポートやリストビューがタイムアウトしうるので、100万件を大量データの閾値としていますが、ここは人によって考え方が違います。ほかの受験者のかたは200万をバーにしているかたもいました。）
※ちなみに、一般的な案件でもそうだと思いますが、年間ではなく、一定期間システムが稼働したことを考慮し、**5年間のランニングで100万件以上**のデータを対象としていました。つまり毎年20万件増加していく場合はLDVの対象とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/988be68c-d651-4b7f-940d-0e823a716c76.png)

もし、トレーニングが見える人は、必ず受講したトレーニングが参照でき、かつ、トレーニング受講者が何件いたか数を積み上げたいケースは以下となります。（主従関係のリレーション）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/a3c8c8c0-b332-4f94-a26e-1c06ca7c9afb.png)


**大量データの対処（データ）**
次に、LDV（大量データ）を特定した際に、その対処を伝えます。
・リストビューやレポートは大量データの場合、画面表示がタイムアウトする可能性があるので、スキニーテーブル(Salesforceサポートへ問合せがひつよう)やインデックスをはる対処を考えます。
・そもそもオブジェクトに投入されているデータが少なければガバナ制約に抵触しづらくなったり、タイムアウトの懸念が減るため、上記と合わせてデータパージ（削除）やアーカイブも検討します。その際に、どのようにパージやアーカイブをするか問われる可能性がありますので、回答を整理するようにしましょう。
例）ETLで定期的にSalesforceの履歴オブジェクトのデータを取得し、外部のストレージサービス（例えば安価で実績のあるAWSのS3）にデータを登録。そのあとSalesforceの履歴オブジェクトは削除する。
・もし、定義が変わりづらい単純な履歴要件であれば、BigObjectにデータを格納（画面で見たい場合、LWCでカスタム画面を構築）する手段もあるでしょう。（BigObjectはインデックスを変更するなどの際に、テーブルを作成しなおし、データの再投入が必要となりますので、よくテーブル定義が変わるようなデータの保管は向いていません。）
・仮にSalesforceに持ってくることのできない大量データをSalesforce上で参照したい場合、SalesforceConnectを活用するのも一案です。ただし1時間あたり2万回CallOutなどの制限が存在します。また、細やかなアクセス権限はできません。左記に抵触する可能性がある場合、カスタムで画面を作ることも検討が必要です。
[＜アクセス権限＞SalesforceConnectの外部データソースは、Apexから取得でき、Where句で条件をかけられるのか？](https://qiita.com/nori83/items/4469651c24246d05b2e4)
・尚、海外の人では、Salesforceに履歴カスタムオブジェクトを用意し、ETLでAWSS3にアーカイブする際に、AWSS3へのリンクを履歴カスタムオブジェクトに書き込む、というかたもいました。そうすればアクセス権限も柔軟に対応できるかと思います。

以下も試験前に自分の中でシミュレーションすることをおすすめします。
・このデータは誰がどのように検索するのか？
・スキニーテーブルやインデックス、BigObjectの定義、制約
・SalesforceConncetは具体的にどこに何を設定するのか？
※ERPの請求データを、Salesforce上にSalesforceConnectを使って表示するケースがありますが、SAPのERPだと、すでにOdataに対応しており、ミドルウェアで変換せずに直接つなぐことができるケースがあります。古いERPだと、ミドルウェア(ESB)がODataプロバイダとして振る舞います。


**大量データの対処（ファイル）**
データだけでなくファイルストレージ（いわゆる見積書、アップロード画像など）についても、現状のキャパシティにはまるのか否か、はまらない場合は多少であれば追加ストレージの購入を検討、かなり外れるのであれば外部ストレージの購入／アーカイブを検討します。（私は、5年程度のファイルがキャパシティにはまりそうなら標準のSalesforceFileを使うことにしていました。）

具体例を挙げると、
　・社員数が1,000人　※内部
　・利用しているSalesforceのEdition（いわゆるOrg・組織のグレード）はエンタープライズ向けの大規模システムのため、Unlimited(Performance) Edition
　・ファイル数は、10万件のケースに10MBの問題商品画像がアップロードされる。（5年間）

キャパシティ＝2,020GB＝10GB(Unlimited組織のキャップ)＋2GB×1,000人(Salesforceライセンスは2GB)
利用ストレージ(5年)＝1,000GB＝100,000×10MB
⇒明らかに キャパシティ＜利用ストレージ のため、外部ストレージを検討します。

※コミュニティユーザに、ファイルストレージの容量はつきません。
※B, KB, MB, GB, TBくらいまでは単位の定義を覚えておきましょう。
※ファイルストレージのキャパシティ計算は必須、知識としてデータストレージやAPIコール数の上限の計算はできるようにしておきましょう。

ストレージ計算
https://help.salesforce.com/s/articleView?id=sf.overview_storage.htm&type=5

APIコール数
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm


＜ひっかけ＞注意ポイントとして、外部ストレージにアーカイブする際に、画面を標準にするのかカスタムにするのか検討が必要です。

＜必読＞大量のデータを使用するリリースのベストプラクティス
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_large_data_volumes_bp.meta/salesforce_large_data_volumes_bp/ldv_deployments_introduction.htm

#### その他参考


・Data Model Gallery：かなり下にスクロールする必要あり。
https://architect.salesforce.com/diagrams#architecture-gallery

・私の過去のブログ
https://qiita.com/nori83/items/492132cb298e4cece5eb


**＜注意＞今後受験されるかたはlucidchartを使ってください！！**
SalesとServiceのデータモデル　※一部抜粋

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/1aeb75d6-c0c4-4193-848b-0ead10c3c661.png)

FieldServiceのデータモデル　※一部抜粋

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/997b4785-470a-4b0e-9084-3898a56fb89b.png)