Salesforce Trailhead的Create Object Relationships将对象关系定义为连接两个对象的一种特殊字段类型。课程用标准Account与Contact说明公司及其联系人之间的关联,再以DreamHouse的Property和Offer说明自定义对象也可建立关系。这里的“关系”先有软件对象与字段的位置,并非只是在两份文字资料中同时出现了一个公司名称。[1]
Lookup关系可以是一对一,也可以是一对多。课程把Account到Contact列为一对多,因为一个Account可关联多个Contact;另以Property与Home Seller设想一对一的课程关系。两种数量结构同属lookup,不能把lookup这个类型名称直接翻译成“只能有一个关联对象”。它还需连同该对象关系的数量来理解。[1]
在对象独立性上,原文使用typically和usually等限定:lookup通常用于只在部分情况下有关联的对象,这些对象通常能独立存在,并有各自界面标签。Master-detail的detail则不作为独立对象工作,而高度依赖master。两者的差别不仅是结果里显示一条还是多条关联,也涉及被关联对象是否作为独立资料存在。[1]
Master-detail中的关系字段建立在detail一侧。课程进一步说明,master记录被删除时,相关detail记录也被删除。这个既定行为把依赖方向说得更具体:detail侧保存关系字段,其记录又依赖master的存续。这里只识读课程所定义的对象联系,没有删除记录,也不据此为客户库提出保留或清理方案。[1]
Hierarchical是另一种被单独点名的关系,它属于特殊lookup,但只在User对象上可用。课程将其联系到用户之间的管理链。User这一适用对象是定义中的限制,不会因为其他页面出现parent或child两个词,就自动使那些对象也成为同一种hierarchical关系。[1]
第二个课程从需要返回什么资料区分关系查询。若主结果要列联系人,并同时包含每位联系人所关联账户的名称,就是child-to-parent;若主结果要列账户,再包含每个账户的相关联系人,则是parent-to-child。前者从Contact出发向上带入字段,后者以Account为主带入下级记录;两份结果都涉及这对对象,主对象却相反。[2]
这种关系查询仍以一个FROM主对象为基础,相关对象的字段通过关系纳入结果。课程对master-detail另作数量说明:一个master可有多个detail,每个detail只有一个master。这里的“一”和“多”首先限定该类型的主从联系,不是替整个CRM里该记录可能参与的所有业务关联计算总数。[2]
具体到Contact,AccountId是字段名,其数据类型为Lookup(Account);Account Name是字段标签。AccountId字段详情中的Child Relationship Name又是复数Contacts。三种文字分别命名一个联系账户的字段、该字段面向人的标签,以及从账户一侧联系子记录时使用的关系名称,不能在摘录时互相替换。[2]
课程所说的标准对象子关系名称,默认采用子对象名称的复数形式。因此,Contact是对象名,Contacts在这个上下文中是关系名,末尾复数并非随意拼写差异。结合前面的两种查询方向,可以看见资料中为何既出现单个联系账户的字段,也出现用于表达相关联系人集合的名称;这里没有运行任何查询。[2]
本篇限于两份公开课程的对象与名称语义,不提供关系配置、SOQL代码、权限或客户资料操作。删除级联只转述定义,不判断现实公司隶属、数据权属或隐私合法性;首发日期未知。
信息来源
- Salesforce Trailhead:Create Object Relationships — Trailhead
- Salesforce Trailhead:Create Relationship Queries with Standard Objects — Trailhead
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。