【Salesforce】【資格】デベロッパー勉強メモ：データモデリング

デベロッパー試験勉強時にまとめたメモ書きです。内容が間違っていたら優しくご指摘ください。
他投稿は[デベロッパー試験に関する記事](#デベロッパー試験に関する記事)からどうぞ。

**あくまでも個人のメモ書きなので信用しすぎてはいけません。**
[参考](#参考)にSalesforce公式ページを載せていますので、最新かつ正しい情報をご確認ください。

# 標準オブジェクトの必須項目
　　取引先：Name
　　取引先責任者：LastName
　　商談：Name、CloseDate、StageName
　　商談商品：OppID、Quantity
　　商品：Name
　　ToDo：Subject
　　ユーザ：UserName、LastName、FirstName、Emailなど
　　価格表：Name
　　価格表エントリ：UnitPrice、Product2ID、PriceBook2ID　
　　　※価格表にリストされる商品とその価格
　　キャンペーン：Name
　　キャンペーンメンバー：CampaignID、LeadID、ContactID

:::note info
項目はAPI名で書いていますが、表示ラベルも覚えておいたほうがいいかもです。
:::

# 項目データ型の型
　　String　　　自動採番、テキスト、URL、電話、メール、選択リスト
　　Decimal　　通貨
　　Location　　地理位置
　　Boolean　　チェックボックス
　　Date 　　　日付
　　DateTime　日付日時

# 項目データ型の変更でデータが失われる可能性があるもの
　　日付型　→　日付/時間型
　　日付/時間型　→　日付型
　　他の型　→　数値型
　　他の型　→　通貨型
　　他の型　→　パーセント型
　　他の型　→　チェックボックス型
　　他の型　→　選択リスト (複数選択)
　　選択リスト (複数選択) 型　→　他の型
　　自動採番型　→　他の型
　　テキスト以外の型　→　自動採番型
　　テキスト　→　選択リストに変更する
　　テキストエリア (ロング) 型　→　メール、電話、テキスト、テキストエリア、URL 以外の型

:::note info
選択リスト　→　選択リスト（複数選択）について
　＊現在定義されている選択リスト値は維持
　＊定義にない値はレコードから削除
:::

# リレーション
|  | 1オブジェクト| 階層 | 親削除 |積み上げ集計|セキュリティ|
|:-:|:-:|:-:|:-:|:-:|:-:|
|主従|2個まで|3レベル|不可|可|親を継承|
|参照|40個まで|複数レベル|①空②子も削除③不可|不可|親と別|　

・積み上げ集計：子レコードについて件数または指定項目の合計、最大、最小を取得できる
★特殊★積み上げ集計が使用できる標準オブジェクト
　　　取引先ー商談
　　　商談ー商談商品
　　　キャンペーンーキャンペーンメンバー

:::note info
上記は参照関係ではないのでセキュリティは別で、積み上げ集計を作成できます！！
ひっかけ問題に注意！！
:::
・クロスオブジェクト数式：アクセス権不要で10レベル上までの親レコードの値を取得できる

#特殊なリレーション
・多対多かつ孤立するレコード無し　　　　　　　　　　→連結オブジェクト（主従関係２つ）
・親が外部オブジェクト、子が標準orカスタムor外部　　→外部参照関係項目　　
・親が標準orカスタム、子→外部オブジェクト　　　　　→間接参照関係項目

# カスタム設定
・リストカスタム設定：国コードなど
　　例）Apexでのカスタム設定データの取得

```
　　Map<String_dataset_name, CustomSettingName__c> mcs = CustomSettingName__c.getAll();
```

・階層カスタム設定：ユーザ・プロファイル設定など
　　例）Apexでのプロファイルと紐づくカスタム設定データの取得　

```
CustomSettingName__c mc = CustomSettingName__c.getInstance(Profile_ID);
```
　　例）Visualforceでの実行ユーザに紐づくカスタム設定データの取得

```
{!$Setup.CustomSettingName__c.CustomField__c} 
```

:::note info
この時ユーザIDを渡したりする必要がないので注意
:::

# Big Object
・標準：Salesforce によって定義され、Salesforce 製品に含まれるオブジェクト
・カスタム：[設定] でカスタム Big Object を作成し、定義や項目、インデックスを設定できる
・Big Objectのクエリ
　①返されるデータが少量であることがわかっている場合、結果をすぐに返す必要がある場合　→SOQL
　②クエリ対象のデータが非常に大きいためにリアルタイムで結果を待てない場合　→非同期SOQL
　※!=、LIKE、NOT IN、EXCLUDES、INCLUDES 演算子、集計関数は無効です。　　　　

# その他
・マルチ通貨を使用しているときの積み上げ集計：通貨は主レコードを踏襲（従レコードの値変換→合計）
・商談、ケース、ソリューション、リードのフェーズや状況の項目はレコードタイプで使用できない
・項目削除は使用場所の除外をしてから

# 参考
↓Salesforce公式の開発者ガイドやヘルプページなどのリンクになっています
[項目データ型の変更](https://help.salesforce.com/s/articleView?id=sf.notes_on_changing_custom_field_types.htm&type=5)
[連結オブジェクト](https://help.salesforce.com/s/articleView?id=sf.relationships_manytomany.htm&type=5)
[外部オブジェクトリレーション](https://help.salesforce.com/s/articleView?id=sf.external_object_relationships.htm&type=5)
[カスタム設定](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_customsettings.htm)
[Big Object](https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/big_object.htm)
[Big Objectのクエリ](https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_limits.htm)

# デベロッパー試験に関する記事
[Salesforce 認定 Platform デベロッパー 合格までのあれこれ](https://qiita.com/piepie1231/items/8da91897192dc44584be)
[デベロッパー勉強メモ：Salesforceの基本](https://qiita.com/piepie1231/items/bd94f6c3780f68b89251)
[デベロッパー勉強メモ：データモデリング](https://qiita.com/piepie1231/items/1ea83e14b553698f2aff)  ←当記事
[デベロッパー勉強メモ：プロセスの自動化とロジック①](https://qiita.com/piepie1231/items/407aad4ef1de5da297df)
[デベロッパー勉強メモ：プロセスの自動化とロジック②](https://qiita.com/piepie1231/items/e5eeb25ae2af0f79fd58)
[デベロッパー勉強メモ：ユーザインタフェース](https://qiita.com/piepie1231/items/179e5a39a98d65cb238d)
[デベロッパー勉強メモ：テスト、デバッグ、リリース](https://qiita.com/piepie1231/items/b90b82ec643b0cf5715b)