ข้ามไปยังเนื้อหา

เปลี่ยนโมเดลให้เป็น Salesforce

มีให้อ่านอีก 28 ภาษา

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A white card model rising from the plan it was drawn on, built from repeated standard window pieces with one curved wooden wall, the rest of the plan still bare.
ภาพสร้างด้วย AI

โมดูลที่ 6 จาก 6 ในบท การสร้างโมเดลข้อมูลเพื่อความหมาย บทที่ 2 ของหลักสูตร Data Architect แต่ละโมดูลอ่านแยกกันได้ ก่อนหน้า: ออกแบบถึงรูปแบบบรรทัดฐานที่สาม แล้วถอยออกมา · ถัดไป: คู่มือทบทวนประจำบท แล้วต่อด้วยบทถัดไป: สถาปัตยกรรมข้อมูล Salesforce

คำถามที่โมดูลนี้ตอบ: โมเดลข้อมูลเชิงตรรกะกลายเป็นโมเดลข้อมูล Salesforce เชิงกายภาพได้อย่างไร?

ในที่สุดเราก็จะพูดถึง Salesforce ถ้าคุณอดใจไม่เปลี่ยนทุกกล่องให้เป็นออบเจกต์มาตลอด ตอนนี้ทำได้แล้ว แต่สังเกตลำดับที่เราเดินมา: เราเข้าใจธุรกิจ อธิบายข้อมูล วางข้อเท็จจริงแต่ละข้อในที่ที่ควรอยู่ และตัดสินใจว่าจะตั้งใจดัดมันตรงไหน เพิ่งตอนนี้เองที่ผมถามว่า Salesforce ควร implement มันอย่างไร นั่นคือลำดับที่ผมอยากให้คุณจำ: เชิงแนวคิด → เชิงตรรกะ → เชิงกายภาพ โมเดลเชิงแนวคิดอธิบายธุรกิจ โมเดลเชิงตรรกะอธิบายข้อมูล โมเดลเชิงกายภาพอธิบายว่าเราจะสร้างมันจริงอย่างไร

ขั้นเชิงกายภาพเห็นได้ง่ายที่สุดกับสิ่งเล็กๆ สัตว์เลี้ยงจึงมาก่อน

ใครคือธุรกิจ และใครคือคน? ผู้เพาะพันธุ์เป็นธุรกิจ จึงกลายเป็นบัญชี (Account) ที่มีประเภทเรกคอร์ด Breeder (ผู้เพาะพันธุ์) เจ้าของก็เป็นบัญชีด้วย หรือเป็นบัญชีบุคคล ที่มีประเภทเรกคอร์ด Owner (เจ้าของ) ออบเจกต์มาตรฐานเดียวกันสองประเภท อยู่เคียงกันที่ด้านบนของไดอะแกรม ตรงที่พวกมันอยู่มาตั้งแต่โมดูลที่ 1

อะไรไม่มีบ้านมาตรฐาน? สัตว์เลี้ยง สายพันธุ์ ท่า ท่าของสัตว์เลี้ยง และการประเมินท่า กลายเป็นออบเจกต์ที่กำหนดเอง และจำสปีชีส์ที่เราคัดลอกไว้บนสัตว์เลี้ยงในโมดูลที่ 5 ได้ไหม? ตรงนี้มันได้งานของมัน: มันกลายเป็นประเภทเรกคอร์ดของสัตว์เลี้ยง สุนัขหรือแมว ออบเจกต์เดียวที่มีสองประเภทเรกคอร์ด แต่ละประเภทมีเลย์เอาต์หน้าและค่า picklist ของตัวเอง แทนที่จะมีออบเจกต์สุนัขและออบเจกต์แมว

ความสัมพันธ์ใดเป็น master-detail? ผมใช้ master-detail เฉพาะเมื่อลูกจะไม่มีวันถูกย้ายไปอยู่กับแม่ตัวอื่น ท่าของสัตว์เลี้ยงเป็นของสัตว์เลี้ยงของมันไปตลอดชีวิต และการประเมินท่าแต่ละครั้งเป็นของท่าของสัตว์เลี้ยงนั้น ทั้งสองจึงเป็น master-detail ซึ่งให้ผลตอบแทนทันที: master-detail คือสิ่งที่ทำให้สัตว์เลี้ยงเก็บฟิลด์สรุปยอด (roll-up summary) ของท่าของสัตว์เลี้ยงได้ จำนวนท่าที่ทำได้จากโมดูลที่ 5 จึงตรงกันอยู่เสมอได้เอง แต่สัตว์เลี้ยงย้ายบ้านได้ เจ้าของจึงเป็น lookup

อะไรเป็น lookup? Salesforce ไม่แนะนำให้มีลูกเกิน 10,000 รายการบนแม่ตัวเดียว ท่ายอดนิยมอย่างนั่ง สายพันธุ์ที่พบบ่อย หรือผู้เพาะพันธุ์รายใหญ่ อาจเกินจำนวนนั้นได้ง่ายๆ ท่าของสัตว์เลี้ยงจึงชี้ไปที่ท่าด้วย lookup และสัตว์เลี้ยงชี้ไปที่สายพันธุ์และผู้เพาะพันธุ์แบบเดียวกัน และหลีกเลี่ยงความสัมพันธ์แบบ polymorphic เมื่อทำได้ คือแบบที่ฟิลด์เดียวชี้ไปได้หลายประเภทออบเจกต์ มันสะดวกในวันแรก แต่ยากขึ้นสำหรับทุกอย่างที่ต้องอ่านมันในภายหลัง: รายงาน การผสานรวม และตอนนี้ก็เอเจนต์

อะไรอยู่นอกแพลตฟอร์ม? ถ้าสัตว์เลี้ยงสวมปลอกคอ GPS ที่รายงานตำแหน่งของมัน ตำแหน่งนั้นไม่จำเป็นต้องถูกคัดลอกเข้ามาเลย มันเป็นออบเจกต์ภายนอกได้ อ่านสดจากระบบติดตามของปลอกคอ

โมเดลสัตว์เลี้ยงใน Salesforce โมเดลสัตว์เลี้ยงในรูปออบเจกต์ Salesforce ด้านบนมีบัญชีสองรายการ: รายการหนึ่งมีประเภทเรกคอร์ดเจ้าของ อีกรายการมีประเภทเรกคอร์ดผู้เพาะพันธุ์ Pet__c ด้านล่างมีประเภทเรกคอร์ดสุนัขและแมว หมายเลขไมโครชิปเป็น External ID มี lookup ไปยังเจ้าของ ผู้เพาะพันธุ์ และ Breed__c และมี Tricks_Known__c เป็น roll-up, Pet_Trick__c อยู่ในความสัมพันธ์แบบ master-detail กับ Pet__c และมี lookup ไปยัง Trick__c พร้อมระดับทักษะและวันที่เรียน, Trick_Assessment__c อยู่ในความสัมพันธ์แบบ master-detail กับ Pet_Trick__c, Breed__c มีสปีชีส์ ชื่อ และขนาด ส่วน Trick__c มีชื่อและความยาก lookup lookup lookup master detail lookup master detail บัญชี (เจ้าของ) Id ID ของเรกคอร์ด ประเภทเรกคอร์ด: เจ้าของ ชื่อ โทรศัพท์ บัญชี (ผู้เพาะพันธุ์) Id ID ของเรกคอร์ด ประเภทเรกคอร์ด: ผู้เพาะพันธุ์ ชื่อ Pet__c Id ID ของเรกคอร์ด ประเภทเรกคอร์ด: สุนัข, แมว Microchip_Number__c EXTERNAL ID Owner__c LOOKUP Breeder__c LOOKUP Breed__c LOOKUP ชื่อ Birth_Date__c Tricks_Known__c ROLL-UP Breed__c Id ID ของเรกคอร์ด Species__c ชื่อ Size__c Pet_Trick__c Id ID ของเรกคอร์ด Pet__c MASTER-DETAIL Trick__c LOOKUP Skill_Level__c Date_Learned__c Trick__c Id ID ของเรกคอร์ด ชื่อ Difficulty__c Trick_Assessment__c Id ID ของเรกคอร์ด Pet_Trick__c MASTER-DETAIL Date__c Skill_Level__c Assessed_By__c หนึ่งพอดี ศูนย์หรือหนึ่ง หนึ่งหรือหลาย ศูนย์หรือหลาย © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

ทุกการตัดสินใจบนไดอะแกรมนั้นย้อนกลับไปหาสิ่งที่เราตัดสินใจไว้ก่อนหน้า และนั่นคือประเด็น ทีนี้มาทำขั้นเดียวกันกับ Steve Trucking

โมเดลเชิงตรรกะของ Steve Trucking ตอนนี้มีพันธมิตรค้าปลีก ศูนย์กระจายสินค้า ใบรายการสินค้า การจัดส่ง รายการจัดส่ง ผู้รับ เส้นทาง จุดแวะ ทีมจัดส่ง รถบรรทุก และการมอบหมายทีม สิ่งเหล่านั้นเป็นแนวคิดทางธุรกิจ และตอนนี้ผมเริ่มแมปมันไปยัง Salesforce ได้

พันธมิตรค้าปลีกอาจเป็นบัญชี การจัดส่งอาจแมปไปยังสิ่งที่ Salesforce มีอยู่แล้วสำหรับงานภาคสนามที่มีกำหนดการ หรืออาจกลายเป็นออบเจกต์ที่กำหนดเอง ใบรายการสินค้าไม่มีอะไรมาตรฐานที่เข้ากัน จึงน่าจะเป็นแบบกำหนดเอง และผู้รับเป็นคำถามที่ยากจริงๆ: บัญชีบุคคล ผู้ติดต่อ หรือแค่ข้อมูลบนการจัดส่ง? เราจะตอบข้อนั้นอย่างเหมาะสมในบทถัดไป

คำสำคัญยังคงเป็นอาจ อย่าสันนิษฐานการ implement เพียงเพราะแนวคิดทางธุรกิจฟังดูเหมือนออบเจกต์ Salesforce นั่นคือเหตุผลที่เราสร้างโมเดลเชิงตรรกะก่อน: มันให้สิ่งที่เราใช้ทดสอบการออกแบบ Salesforce ได้

เอนทิตีทางธุรกิจไม่ได้แปลว่าออบเจกต์ที่กำหนดเองโดยอัตโนมัติ

หัวข้อที่มีชื่อว่า “เอนทิตีทางธุรกิจไม่ได้แปลว่าออบเจกต์ที่กำหนดเองโดยอัตโนมัติ ”

นี่คือกับดักที่ผมอยากให้ผู้ดูแลระบบหลีกเลี่ยง: “เราระบุเอนทิตีได้สิบเอ็ดตัว ดังนั้นเราต้องการออบเจกต์ที่กำหนดเองสิบเอ็ดตัว” ไม่ใช่ เอนทิตีเชิงตรรกะบอกเราว่าแนวคิดทางธุรกิจนั้นสำคัญ แต่ไม่ได้กำหนดว่า Salesforce ต้องเก็บมันอย่างไร แนวคิดหนึ่งอาจกลายเป็นออบเจกต์มาตรฐาน ออบเจกต์ที่กำหนดเอง ความสัมพันธ์ระหว่างออบเจกต์ ฟิลด์หนึ่งหรือสองสามฟิลด์ ค่าที่จัดการในการตั้งค่า หรือข้อมูลที่อยู่นอก Salesforce ไปเลย (รูปถ่ายการจัดส่งของ Steve Trucking เป็นตัวเลือกที่ดีสำหรับแบบนั้น) โมเดลเชิงกายภาพคือที่ที่ตัวเลือกเหล่านั้นถูกตัดสิน ซึ่งเป็นเหตุผลที่เราไม่ได้ตัดสินมันในการคุยครั้งแรก

การเปลี่ยนผ่านแบบเดียวกันเกิดกับแอตทริบิวต์ รถบรรทุกเชิงตรรกะของเรามีหมายเลขประจำคัน VIN ยี่ห้อ รุ่น ปีรุ่น ป้ายทะเบียน และสถานะ ตอนนี้เราตัดสินว่ามันจะมีอยู่ในเชิงกายภาพอย่างไร: ออบเจกต์ไหนเป็นเจ้าของ ใช้ประเภทฟิลด์อะไร อันไหนบังคับ อันไหนต้องไม่ซ้ำ อันไหนเป็นตัวระบุภายนอก อันไหนต้องตรวจสอบความถูกต้อง อันไหนคำนวณแทนการเก็บ และอันไหนอ่อนไหว ในระดับเชิงตรรกะเราถามว่ารถบรรทุกหมายถึงอะไร ในระดับเชิงกายภาพเราถามว่าSalesforce จะแทนรถบรรทุกอย่างไร คนละคำถามกัน

รถบรรทุก: จากเอนทิตีเชิงตรรกะสู่ออบเจกต์ Salesforce การ์ดสองใบเทียบกันทีละบรรทัด เชิงตรรกะ รถบรรทุก รถบรรทุกหมายถึงอะไร: ID รถบรรทุก หมายเลขประจำคัน VIN ยี่ห้อ รุ่น ปีรุ่น ป้ายทะเบียน สถานะ เชิงกายภาพ Truck__c Salesforce จะแทนมันอย่างไร: Id คือ ID ของเรกคอร์ด Salesforce, Name เป็นข้อความที่เก็บหมายเลขประจำคัน, VIN__c เป็นข้อความ 17 ตัวอักษร ไม่ซ้ำ และเป็น External ID, Make__c เป็น picklist, Model__c เป็นข้อความ 40 ตัวอักษร, Model_Year__c เป็นตัวเลขสี่หลัก, License_Plate__c เป็นข้อความ 10 ตัวอักษร, Status__c เป็น picklist ที่ Required (จำเป็น) หมายเหตุด้านล่าง: เชิงตรรกะถามว่ารถบรรทุกหมายถึงอะไร เชิงกายภาพถามว่า Salesforce จะแทนมันอย่างไร เชิงตรรกะ: รถบรรทุก รถบรรทุก หมายถึงอะไร ID รถบรรทุก หมายเลขประจำคัน VIN ยี่ห้อ รุ่น ปีรุ่น ป้ายทะเบียน สถานะ เชิงกายภาพ: Truck__c Salesforce จะแทนมัน อย่างไร Id: ID ของเรกคอร์ด Salesforce Name: ข้อความ, หมายเลขประจำคัน VIN__c: ข้อความ(17), ไม่ซ้ำ, External ID Make__c: picklist Model__c: ข้อความ(40) Model_Year__c: ตัวเลข(4) License_Plate__c: ข้อความ(10) Status__c: picklist, Required เชิงตรรกะถามว่ารถบรรทุกหมายถึงอะไร เชิงกายภาพถามว่า Salesforce จะแทนมันอย่างไร © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

ความสัมพันธ์กลายเป็นการตัดสินใจเรื่องแพลตฟอร์ม

หัวข้อที่มีชื่อว่า “ความสัมพันธ์กลายเป็นการตัดสินใจเรื่องแพลตฟอร์ม ”

เวลาทั้งหมดที่เราใช้กับความสัมพันธ์คุ้มค่าตรงนี้ เรารู้อยู่แล้วว่าแต่ละความสัมพันธ์เป็นหนึ่งต่อหนึ่ง หนึ่งต่อหลาย หรือหลายต่อหลาย บังคับหรือเป็นทางเลือก และประวัติของมันสำคัญหรือไม่ ตอนนี้เราตัดสินว่า Salesforce จะ implement มันอย่างไร: lookup, master-detail หรือ Junction Object ของ Salesforce (ออบเจกต์ที่กำหนดเองที่มีความสัมพันธ์ master-detail สองชุด) และอาจเป็น junction ที่มีแอตทริบิวต์ของตัวเอง เพราะอย่างที่เราพบ ตัวความสัมพันธ์เองมีความหมายทางธุรกิจได้

นึกย้อนไปถึงการมอบหมายทีม เราอาจเริ่มบทนี้ด้วยการพูดว่า “มาสร้าง Junction Object ของ Salesforce ระหว่างทีมจัดส่งกับรถบรรทุกกันเถอะ” ดูสิ่งที่เราจะข้ามไป: ทำไมความสัมพันธ์นี้มีอยู่ มันต้องมีวันที่และเส้นทางไหม มีสถานะไหม และการเคลมความเสียหายในอีกหลายสัปดาห์ต้องการประวัติของมันไหม คำถามทางธุรกิจเหล่านั้นบอกเราว่าการมอบหมายทีมคืออะไร หลังจากนั้นเท่านั้นเราจึงควรตัดสินว่า Salesforce จะสร้างมันอย่างไร และ Salesforce มีอะไรที่ทำงานนี้อยู่แล้วหรือไม่

ไดอะแกรมเปลี่ยนอีกครั้ง โมเดลเชิงแนวคิดแสดงแนวคิดทางธุรกิจและเส้นง่ายๆ โมเดลเชิงตรรกะเพิ่มแอตทริบิวต์ คีย์ cardinality และเอนทิตีที่ซ่อนอยู่ในความสัมพันธ์ ตอนนี้โมเดลเชิงกายภาพเริ่มดูเหมือน Salesforce: ออบเจกต์มาตรฐาน ออบเจกต์ที่กำหนดเอง ฟิลด์ ประเภทความสัมพันธ์ และสิ่งที่อยู่นอกแพลตฟอร์ม

ธุรกิจเดียวกันในสามระดับ สามแผง ส่วนเดียวกันในสามระดับ เชิงแนวคิด มีอะไรอยู่บ้าง: พันธมิตรค้าปลีก ร้านค้าปลีกที่เราจัดส่งให้ ส่งการจัดส่ง และการจัดส่งแต่ละรายการ คือคำสั่งซื้อหนึ่งรายการถึงผู้รับหนึ่งคน ประกอบด้วยรายการจัดส่ง คือสินค้าหนึ่งชิ้นในการจัดส่ง เชิงตรรกะ ข้อมูลมีโครงสร้างอย่างไร: ทั้งสามเอนทิตีเดิมพร้อม ID ของเรกคอร์ดและฟิลด์บางส่วน การจัดส่งยังเรียกได้ด้วยหมายเลขคำสั่งซื้อของพันธมิตร รายการจัดส่งเก็บ ID สินค้าและจำนวน เชิงกายภาพ Salesforce จะสร้างอย่างไร: พันธมิตรค้าปลีกเป็นบัญชี (Account) มาตรฐานที่มีประเภทเรกคอร์ดพันธมิตรค้าปลีก การจัดส่งเป็นออบเจกต์ที่กำหนดเอง Delivery__c ที่มีหมายเลขคำสั่งซื้อของพันธมิตรเป็น External ID และมี lookup ไปยังบัญชี รายการจัดส่งเป็นออบเจกต์ที่กำหนดเอง Delivery_Item__c ในความสัมพันธ์แบบ master-detail กับการจัดส่งของมัน พร้อมจำนวน หมายเหตุด้านล่าง: ธุรกิจ เชิงแนวคิด เชิงตรรกะ เชิงกายภาพ ชี้ไปที่อะไรก็ได้ทางขวา แล้วย้อนรอยกลับไปทางซ้ายได้ เชิงแนวคิด: มีอะไรอยู่บ้าง? เชิงตรรกะ: ข้อมูลมีโครงสร้าง อย่างไร? เชิงกายภาพ: SALESFORCE จะสร้าง อย่างไร? ส่ง ประกอบด้วย ส่ง ประกอบด้วย lookup master detail พันธมิตรค้าปลีก ร้านค้าปลีกที่เราจัดส่งให้ การจัดส่ง คำสั่งซื้อหนึ่งรายการ ถึงผู้รับหนึ่งคน รายการจัดส่ง สินค้าหนึ่งชิ้น ในการจัดส่ง พันธมิตรค้าปลีก ID พันธมิตรค้าปลีก ID ของเรกคอร์ด ชื่อ สถานะ การจัดส่ง ID การจัดส่ง ID ของเรกคอร์ด หมายเลขคำสั่งซื้อ ของพันธมิตร หรือเรียกว่า วันที่จัดส่ง สถานะ รายการจัดส่ง ID รายการจัดส่ง ID ของเรกคอร์ด ID สินค้า จำนวน บัญชี (มาตรฐาน) Id ID ของเรกคอร์ด ประเภทเรกคอร์ด: พันธมิตรค้าปลีก ชื่อ Delivery__c Id ID ของเรกคอร์ด Partner_Order_Number__c EXTERNAL ID Retail_Partner__c LOOKUP Delivery_Item__c Id ID ของเรกคอร์ด Delivery__c MASTER-DETAIL Quantity__c ธุรกิจ → เชิงแนวคิด → เชิงตรรกะ → เชิงกายภาพ: ชี้ไปที่อะไรก็ได้ทางขวา แล้วย้อนรอยกลับไปทางซ้ายได้ © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

ผมอยากให้คุณวางไดอะแกรมทั้งสามเคียงกันแล้วเห็นความต่อเนื่อง: ไม่ใช่ไดอะแกรมสามแผ่นที่ไม่เกี่ยวกัน แต่เป็นธุรกิจเดียวกันในสามระดับ

ขอพูดสักนิดว่าผมวาดสิ่งเหล่านี้อย่างไร เพราะเลย์เอาต์เป็นส่วนหนึ่งของสาร ผมวางออบเจกต์หลักไว้ตรงกลาง ต่ำลงมาเล็กน้อย ถ้ามันมีออบเจกต์แม่ ผมวางไว้สูงขึ้นไปเล็กน้อย เพื่อให้คุณอ่านโมเดลจากบนลงล่าง ซ้ายไปขวา แบบที่ธุรกิจคิด ข้อมูลอ้างอิงไปอยู่ด้านข้าง สีก็มีความหมาย: ผมให้ Salesforce เป็นสีน้ำเงินเสมอ และเลือกสีให้ระบบของบริษัทเอง มักเป็นสีเขียว เพราะสีเขียวเป็นสีที่เป็นมิตร ผมไม่ใช้สีแดง และสีเหลืองก็ดูแรงไปหน่อย เมื่อโมเดลถูกจัดวางแบบนั้น มันเหมือนร้องเพลงให้ผมฟัง ไดอะแกรมจำนวนมากที่คุณเจอจริงๆ แล้วเป็นการจัดการพื้นที่: จะจอดรถทุกคันในโรงรถที่แออัดได้อย่างไร? ผมอยากวาดภาพที่เป็นตรรกะซึ่งจิตใจจับได้มากกว่า

Salesforce ไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ทั่วไป มันมีความคิดเห็นของตัวเองเกี่ยวกับความสัมพันธ์ ความเป็นเจ้าของ ความปลอดภัย และการทำรายงาน มีข้อจำกัด พฤติกรรมคิวรี และระบบอัตโนมัติ และสถาปัตยกรรมที่ส่งผลต่อพฤติกรรมของโมเดลในขนาดใหญ่ ดังนั้นโมเดลเชิงตรรกะที่ดูสมบูรณ์แบบบนไวต์บอร์ดอาจต้องเปลี่ยนเมื่อกลายเป็นเชิงกายภาพ นั่นไม่ใช่ Salesforce มาขวางทาง แต่หมายความว่าแพลตฟอร์มมีรูปร่างของมัน และสถาปนิกที่ดีเข้าใจรูปร่างนั้น บทถัดไปว่าด้วยเรื่องนั้นโดยตรง

บางครั้งโมเดลเชิงกายภาพจะตั้งใจต่างจากโมเดลเชิงตรรกะที่สะอาดด้วย เพราะการตัดสินใจเรื่อง denormalization ที่เราทำในโมดูลที่ 5 นั่นไม่เป็นไร ตราบใดที่เราอธิบายได้ว่าทำไม

มีนิสัยหนึ่งที่ผมอยากให้คุณเลิกถ้ามี: เริ่มสถาปัตยกรรมข้อมูลที่ Setup → Object Manager → New Custom Object แล้วคิดโมเดลไปเรื่อยๆ ระหว่างทาง Salesforce ทำให้การสร้างสิ่งต่างๆ ง่ายอย่างไม่น่าเชื่อ นั่นเป็นจุดแข็งข้อหนึ่ง และเป็นหนึ่งในเหตุผลที่โมเดลข้อมูลที่อ่อนแอเกิดขึ้นได้เร็ว คลิกไม่กี่ครั้งคุณก็ได้ออบเจกต์ คลิกอีกไม่กี่ครั้งก็ได้ฟิลด์และความสัมพันธ์ แล้วข้อมูลก็มาถึง Flow ถูกสร้าง รายงานถูกสร้าง การผสานรวมพึ่งพามัน และออบเจกต์ที่คุณสร้างในห้านาทีก็มีราคาแพงมากที่จะเปลี่ยน นั่นคือการทดสอบความย้อนกลับได้จากบทที่ 1 ดังนั้นก่อนคลิก New Custom Object ให้วาดโมเดล

มีอีกเหตุผลที่ผมแยกโมเดลทั้งสามไว้: เทคโนโลยีเปลี่ยน วันนี้ข้อมูลบางส่วนของ Steve Trucking อยู่บน Salesforce core พรุ่งนี้บางส่วนอาจอยู่ใน Data 360 คลังข้อมูล หรือระบบที่เรายังไม่ได้เลือก และผู้ช่วย AI ก็ต้องการตัวแทนของตัวเอง สถาปัตยกรรมเชิงกายภาพเปลี่ยนได้ ขณะที่แนวคิดทางธุรกิจคงที่อย่างน่าทึ่ง: พันธมิตรค้าปลีก การจัดส่ง และผู้รับยังคงมีอยู่ นั่นคือสิ่งที่ทำให้โมเดลเชิงตรรกะมีค่า มันเป็นคำอธิบายธุรกิจที่คงทนซึ่งไม่ผูกกับการ implement ของวันนี้

เมื่อผมเปลี่ยนโมเดลเชิงตรรกะให้เป็นโมเดล Salesforce เชิงกายภาพ ผมกำลังตัดสินใจว่า:

  • เอนทิตีทางธุรกิจใดแมปไปยังความสามารถมาตรฐานของ Salesforce และอันใดต้องใช้ออบเจกต์ที่กำหนดเองหรือรูปแบบอื่น
  • แอตทริบิวต์เชิงตรรกะกลายเป็นฟิลด์เชิงกายภาพอย่างไร และความสัมพันธ์ถูก implement บนแพลตฟอร์มอย่างไร
  • denormalization ที่ตั้งใจควรอยู่ตรงไหนในการออกแบบเชิงกายภาพ
  • ข้อมูลใดควรอยู่บน Salesforce และข้อมูลใดควรอยู่ที่อื่น
  • คุณลักษณะใดของแพลตฟอร์มที่ทำให้โมเดลเชิงกายภาพต้องต่างจากเชิงตรรกะ

ที่สำคัญที่สุด ผมอยากสืบย้อนแต่ละการตัดสินใจได้ ถ้าคุณชี้ไปที่อะไรสักอย่างในโมเดลเชิงกายภาพของผมแล้วถามว่า “ทำไมสิ่งนี้อยู่ตรงนี้?” ผมควรพาคุณย้อนผ่านโมเดลเชิงตรรกะและเชิงแนวคิดไปถึงสิ่งที่ธุรกิจต้องการจริงๆ ได้: ธุรกิจ → เชิงแนวคิด → เชิงตรรกะ → เชิงกายภาพ

นอกเหนือจากการสอบ: AI เปลี่ยนอะไร ตอนนี้ AI พาเอกสารความต้องการไปจนถึงออบเจกต์และฟิลด์ของ Salesforce ได้ในการกระโดดครั้งเดียว นั่นทำให้ลำดับขั้นตอนสำคัญขึ้น ไม่ใช่ลดลง: ถ้ามันข้ามจากความต้องการไปสู่การตั้งค่า ให้ขอให้มันแสดงสิ่งที่เกิดขึ้นระหว่างทาง: มันตัดสินว่าอะไรเป็นเอนทิตี เลือกคีย์อะไร สันนิษฐานความสัมพันธ์อะไร และทำ denormalization ตรงไหน สิ่งเหล่านั้นเป็นการตัดสินใจเชิงสถาปัตยกรรม และสถาปนิกยังต้องเห็นมัน

เราเริ่มบทนี้ในการคุยครั้งแรก ฟังหาคำนาม และจบด้วยโมเดลเชิงกายภาพที่เราสืบย้อนกลับไปหาธุรกิจได้ เมื่อเราเลือกสร้างบน Salesforce แล้ว คำถามถัดไปก็ลึกขึ้น: เรากำลังสร้างอยู่บนแพลตฟอร์มข้อมูลแบบไหนจริงๆ?

  • Designing Record Access for Enterprise Scale: Parent-Child Data Skew (opens in a new tab), Salesforce Developers, Winter ‘27 (ภาษาอังกฤษ ตรวจสอบเมื่อ 2026-10-02): “กำหนดความสัมพันธ์แม่ลูกให้มีลูกไม่เกิน 10,000 รายการต่อเรกคอร์ดแม่หนึ่งรายการ” เป็นแนวทางเรื่องข้อมูลกระจุกตัว (data skew) ไม่ใช่ขีดจำกัดตายตัว บทที่ 7 จะลงลึกกว่านี้
  • Roll-Up Summary Field (opens in a new tab), Salesforce Help (ภาษาอังกฤษ ตรวจสอบเมื่อ 2026-10-12): ฟิลด์สรุปยอดนับหรือรวมยอดเรกคอร์ด detail ผ่านความสัมพันธ์แบบ master-detail