Salesforce Data-Architect - Salesforce Certified Data Architect Certification Exam
Question #1 (Topic: demo questions)
Cloud Kicks has the following requirements: • Their Shipment custom object must always relate to a Product, a Sender, and a Receiver (all separate custom objects). • If a Shipment is currently associated with a Product, Sender, or Receiver, deletion of those records should not be allowed. • Each custom object must have separate sharing models. What should an Architect do to fulfill these requirements?
Correct Answer: B
Explanation:
You nailed it again. B. Create a required Lookup relationship to each of the three parent records is the absolute correct architectural choice here.
You nailed it again. B. Create a required Lookup relationship to each of the three parent records is the absolute correct architectural choice here.
This is a classic Salesforce Platform Architect question that tests your understanding of the strict differences between Master-Detail and Lookup relationships. Let’s break down exactly how Option B satisfies every single constraint from Cloud Kicks:
1. Requirement: "Each custom object must have separate sharing models."
Why this points to Lookup: Master-Detail relationships are incredibly restrictive with security; the detail record completely inherits the sharing and visibility settings of its master record. If you used Master-Detail, Shipment would be forced to inherit security from its parents.
The Solution: By using a Lookup relationship, the Shipment, Product, Sender, and Receiver objects all maintain completely independent sharing models, satisfying this requirement perfectly.
2. Requirement: "Their Shipment custom object must always relate to a Product..."
The Solution: While Lookups are optional by default, you can check the "Always require a value in this field in order to save a record" box during setup. This forces the lookup to behave like a mandatory link, ensuring a shipment can never be orphaned.
3. Requirement: "If a Shipment is currently associated... deletion of those records should not be allowed."
The Solution: Salesforce lookup fields have a built-in behavior setting for when a parent record is deleted. To fulfill this, the Architect simply selects the option: "Don't allow deletion of the lookup record that's part of a lookup relationship." If someone tries to delete a Sender who has an active Shipment, Salesforce will block the deletion and throw an error.
Why the other options fail:
A. VLOOKUP formula field: VLOOKUP formulas only work in validation rules, not as actual data modeling relationships, and they cannot enforce deletion blocks or independent sharing models.
C. Master-Detail relationship to each: This fails on two fronts. First, a custom object can have a maximum of two Master-Detail relationships, so you physically cannot create three on Shipment. Second, it completely violates the requirement for separate sharing models.
D. Two Master-Detail and one Lookup: While this sneaks under the max limit of two Master-Detail relationships, the two Master-Detail links would still destroy the requirement for Shipment to have its own completely separate sharing model.
Question #2 (Topic: demo questions)
Universal Containers (UC) is planning to move away from legacy CRM to Salesforce. As part of one time data migration, UC will need to keep the original date when a contact was created in the legacy system. How should an Architect design the data migration solution to meet this requirement?
Correct Answer: C
Explanation:
Spot on! C. Enable "Set Audit Fields" and assign the permission to the user loading the data for the duration of the migration is the definitive best practice for this scenario.
Spot on! C. Enable "Set Audit Fields" and assign the permission to the user loading the data for the duration of the migration is the definitive best practice for this scenario.
This is a very common requirement for data migration architects. Here is why C is the perfect solution and why the platform blocks the other approaches:
Why "Set Audit Fields" is the Correct Path
By default, Salesforce strictly protects its system audit fields—like CreatedDate, CreatedById, LastModifiedDate, and LastModifiedById—and sets them automatically at the exact second a record is inserted. They are read-only and cannot be altered by normal users, API calls, or automation.
However, Salesforce provides a specific feature designed exactly for one-time historical data migrations:
The Feature: You turn on "Enable Set Audit Fields upon Record Creation" in User Interface settings.
The Permission: You assign the "Set Audit Fields upon Record Creation" system permission to your Data Migration user profile or permission set.
The Result: This temporary superpower allows your data loading tool (like Data Loader) to explicitly pass the legacy system's original timestamp directly into the standard CreatedDate field during insertion.
Why the Other Options Fail
A & D (Updating via API or Apex Trigger): Both options fail because standard audit fields cannot be updated after record creation, nor can they be intercepted and overridden by an Apex trigger. CreatedDate is fundamentally immutable once the record hits the database.
B (Creating a custom field & hiding the standard one): While this technically lets you save the data, it is a poor architectural choice. Hiding the standard CreatedDate field breaks native Salesforce functionality. Standard reports, list views, dashboards, and features like history tracking rely heavily on the system CreatedDate. Creating a duplicate field causes long-term confusion for users and developers alike.
Question #3 (Topic: demo questions)
An architect has been asked to provide error messages when a future date is detected in a custom Birthdate _c field on the Contact object. The client wants the ability to translate the error messages. What are two approaches the architect should use to achieve this solution? Choose 2 answers
Correct Answer: B, D
Explanation:
Spot on! C. Enable "Set Audit Fields" and assign the permission to the user loading the data for the duration of the migration is the definitive best practice for this scenario.
Spot on! C. Enable "Set Audit Fields" and assign the permission to the user loading the data for the duration of the migration is the definitive best practice for this scenario.
This is a very common requirement for data migration architects. Here is why C is the perfect solution and why the platform blocks the other approaches:
Why "Set Audit Fields" is the Correct Path
By default, Salesforce strictly protects its system audit fields—like CreatedDate, CreatedById, LastModifiedDate, and LastModifiedById—and sets them automatically at the exact second a record is inserted. They are read-only and cannot be altered by normal users, API calls, or automation.
However, Salesforce provides a specific feature designed exactly for one-time historical data migrations:
The Feature: You turn on "Enable Set Audit Fields upon Record Creation" in User Interface settings.
The Permission: You assign the "Set Audit Fields upon Record Creation" system permission to your Data Migration user profile or permission set.
The Result: This temporary superpower allows your data loading tool (like Data Loader) to explicitly pass the legacy system's original timestamp directly into the standard field during insertion.
Why the Other Options Fail
A & D (Updating via API or Apex Trigger): Both options fail because standard audit fields cannot be updated after record creation, nor can they be intercepted and overridden by an Apex trigger. is fundamentally immutable once the record hits the database.
B (Creating a custom field & hiding the standard one): While this technically lets you save the data, it is a poor architectural choice. Hiding the standard field breaks native Salesforce functionality. Standard reports, list views, dashboards, and features like history tracking rely heavily on the system . Creating a duplicate field causes long-term confusion for users and developers alike.
Question #4 (Topic: demo questions)
What is an advantage of using Custom metadata type over Custom setting?
Correct Answer: C
Explanation:
You are absolutely correct. C. Custom metadata records are deployable using packages is the definitive advantage and the primary reason Custom Metadata Types were created.
You are absolutely correct. C. Custom metadata records are deployable using packages is the definitive advantage and the primary reason Custom Metadata Types were created.
This is a core architectural concept in Salesforce application lifecycle management. Here is a clear breakdown of why C is such a massive benefit and why it beats Custom Settings.
The Deployment Advantage (C)
Custom Settings behave like Data: The structural fields of a Custom Setting can be deployed, but its actual rows of data are treated like standard records. This means when you deploy or upgrade a package across environments (e.g., from Sandbox to Production), you have to manually re-import or use data loading tools to populate the records.
Custom Metadata behaves like Code: Custom Metadata Type records are treated as true metadata. Because they are metadata, the records themselves can be easily included in Managed/Unmanaged Packages, Change Sets, or DevOps pipelines (using SFDX or Git). Moving application configurations from a sandbox to a production environment requires zero manual data migration.
Why the Other Options Do Not Work
A. Custom metadata records are not copied from production to sandbox: This is actually backwards. Because they are metadata, Custom Metadata records are automatically copied over to any freshly created sandbox (even a Developer or Developer Pro sandbox), which is a huge advantage. Custom Settings data is not copied to non-Full sandboxes.
B. Custom metadata types are available for reporting: Standard Salesforce reports cannot run directly on Custom Metadata Types or Custom Settings natively.
D. Custom metadata records are editable in Apex: Custom Metadata records are primarily read-only in standard Apex execution. While you can deploy changes using the asynchronous Apex.Metadata namespace namespace, they cannot be updated on-the-fly using standard DML statements (like update myMdtRecord;) the way Custom Settings can.
Question #5 (Topic: demo questions)
Get Cloudy Consulting uses an invoicing system that has specific requirements. One requirement is that attachments associated with the Invoice_c custom object be classified by Types (i.e., ""Purchase Order"", ""Receipt"", etc.) so that reporting can be performed on invoices showing the number of attachments grouped by Type. What should an Architect do to categorize the attachments to fulfill these requirements?
Correct Answer: D
Explanation:
You got it! D. Create a custom object related to the Invoice object with a picklist field for the Type is the correct architectural solution.