はじめに
Salesforceでリレーション項目を作成するときに、子リレーション名を設定する必要があります。
「子オブジェクトの複数形」で命名することが一般的です。
標準項目でも「子オブジェクトの複数形」で命名されています。
(Contacts
、Assets
、Cases
など)
しかし、親のオブジェクト名がつけられていたり、項目名と同じ命名がされていたり、
めちゃくちゃな命名がされていることもよく見かけます。
項目名と同じだと何がだめなのか
Apexでクエリを書いたときに問題があります。
子リレーション名を項目名と一緒にしてしまった例
親オブジェクト: 拠点 Office__c
子オブジェクト: 従業員 Employee__c
従業員の項目: 勤務先拠点 Office__c
勤務先拠点の子リレーション名: Office__r
(悪例)
List<Office__c> offices = [ SELECT Id, (SELECT Id, Name FROM Office__r) FROM Office__c ];
List<Employee__c> employees = offices.get(0).Office__r;
項目名または親オブジェクト名で子リレーション名を設定すると、上の例のようになり、
子オブジェクト(Employee__c
)にもかかわらず、親オブジェクトのように(Office__r
)見えてしまい、可読性が落ちてしまいます。
また、複数形にしないことで、Listであることがわかりにくくなってしまいます。
子リレーション名に「子オブジェクト名の複数形」を使用した例
勤務先拠点の子リレーション名: Employees__r
にすることでわかりやすくなります。
List<Office__c> offices = [ SELECT Id, (SELECT Id, Name FROM Employees__r) FROM Office__c ];
List<Employee__c> employees = offices.get(0).Employees__r;
子リレーション名の命名
子リレーション名はあくまでも「親からみた子の関係」に名前をつけたものなので、そのことを意識した命名をする必要があります。
一般的には、子オブジェクトの複数形で命名しますが、同じオブジェクトにリレーション項目が複数ある場合は注意する必要があります。
例
親オブジェクト: User
子オブジェクト: Employee
項目ラベル名: 考課者
API参照名: Appraiser__c
子リレーション名: Appraisees__r
項目ラベル名: 研修担当者
API参照名: Traininer__c
子リレーション名: Trainees__r