DevelopmentSystem ArchitectureData Model[Ken] Design Version Element

[Ken] Design Version Element

Design Version Elements represents individual material options within a design versionโ€™s material slots. They are generated by joining material slot definitions with attribute option configurations and visual ordering metadata.

๐ŸŽจ

Key Concept

Design Version Elements joins the following tables:

  • Material Slots (defined per design version, owns material_type)
  • AAOJ (Attribute_Attribute_Option_Junction) - junction table
  • ForcegentoAttributeOptionVisualOrder (AV) - represents the actual material

When you create a new ForcegentoAttributeOptionVisualOrder record linked to an AAOJ, a corresponding Design Version Element automatically appears in the view.


What is a Design Version Element?

A Design Version Element combines data from Material Slot, AAOJ, and ForcegentoAttributeOptionVisualOrder to provide a complete picture of available material options for each material slot. It enables:

  • Material Options - Each slotโ€™s available material choices (fabrics, paints, etc.)
  • Visual Configuration - Control color tinting, thumbnails, and display properties
  • Attribute Linking - Connect product attributes to specific material options
  • Ordering & Display - Position and visibility rules per material option
  • Localization - Support multiple languages for element names and labels

Hierarchy Relationship

Design Family โ†’ Design Version โ†’ Material Slot โ†’ Design Version Element(s)
                                       โ†“
                                  Design Product Attribute Junction (DPJ)
                                       โ†“
                    Attribute Attribute Option Junction (AAOJ) โ†โ†’ ForcegentoAttributeOptionVisualOrder (AV) โ†โ†’ Material
                                       โ†“
                            (generates view records)
                                       โ†“
                              Design Version Elements

Database Structure:

  1. Material Slot - Defined at Design Version level, owns a material_type (fabric, paint, etc.)
  2. AAOJ (Attribute_Attribute_Option_Junction) - Junction table that links attributes to attribute options
  3. ForcegentoAttributeOptionVisualOrder (AV) - Represents the actual material with visual properties, position, and metadata
  4. Design Version Element - Database VIEW that joins the above tables

Example: Sofa Customization

Design Family: "DANISH SOFA"
โ””โ”€โ”€ Design Version: "v2.0"
    โ”œโ”€โ”€ Material Slot: "Element0" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ Element: "Standard Gray Fabric" (AAOJ: #123)
    โ”‚       โ”œโ”€โ”€ Element: "Premium Navy Fabric" (AAOJ: #124)
    โ”‚       โ””โ”€โ”€ Element: "Luxury Velvet" (AAOJ: #125)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "Element1" (material_type: "paint")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ Element: "White Oak" (AAOJ: #126)
    โ”‚       โ”œโ”€โ”€ Element: "Walnut Stain" (AAOJ: #127)
    โ”‚       โ””โ”€โ”€ Element: "Black Matte" (AAOJ: #128)
    โ”‚
    โ””โ”€โ”€ Material Slot: "Element2" (material_type: "wood")
        โ””โ”€โ”€ Design Version Elements (view records):
            โ”œโ”€โ”€ Element: "Natural Wood" (AAOJ: #129)
            โ””โ”€โ”€ Element: "Brushed Metal" (AAOJ: #130)

Key Insight:

  • Material Slot defines WHERE and WHAT TYPE (e.g., โ€œElement0โ€ accepts โ€œfabricโ€ materials)
  • AAOJ is a junction table linking attributes to attribute options
  • ForcegentoAttributeOptionVisualOrder (AV) represents the material itself
  • Each AV record linked via AAOJ creates a Design Version Element (the specific material option)

Attributes & Metadata

Design Version Elements are database view records that expose joined data from multiple tables. The attributes come from different source tables in the underlying data model.

โš ๏ธ

Database View Nature

Since Design Version Element is a view (not a table), you cannot directly insert/update/delete records. Instead:

  • Create/update AAOJ records to link attributes
  • Create/update ForcegentoAttributeOptionVisualOrder (AV) records - these represent the materials
  • The view automatically reflects these changes

Core Identity

Basic identifiers and naming (from AAOJ and related tables):

AttributeTypeDescription
sfidString (18 chars)Primary key, Salesforce ID format
index_numberIntegerNumeric identifier for 3D App
nameString (max 80)Design version name
element_nameString (max 255)AV value name
element_label_nameString (max 255)material label name
element_sfidString (18 chars)AV sfid

Example:

sfid: "a80OQ000002A34BYAS"
index_number: 1
name: "v2.0"
element_name: "AV-xxxxxx"
element_label_name: "Burnt Orange Fabric"
element_sfid: "a81OQ000002A35CYAS"

Relationships

Links to parent entities and attribute configurations (these define what appears in the view):

AttributeTypeDescription
design_family_sfidForeign KeyReference to parent Design Family
design_product_attribute_junction_sfidForeign KeyJunction to product attributes (links to Material Slot)
attribute_attribute_option_junction_sfidForeign KeyAAOJ - Junction table linking attribute to attribute option

Data Flow:

Design Version
โ”œโ”€โ”€ Defines Material Slots (via design_product_attribute_junction)
โ”‚   โ””โ”€โ”€ Each slot has material_type (fabric, paint, etc.)
โ”‚
AAOJ (Attribute_Attribute_Option_Junction)
โ”œโ”€โ”€ Junction table: links Attribute โ†” Attribute Option
โ”œโ”€โ”€ Does NOT contain material data
โ””โ”€โ”€ Referenced by: attribute_attribute_option_junction_sfid
    โ†“
ForcegentoAttributeOptionVisualOrder (AV)
โ”œโ”€โ”€ Represents the MATERIAL itself
โ”œโ”€โ”€ Contains: material properties, visual settings, position, thumbnails, RGBA
โ”œโ”€โ”€ Links to AAOJ via aaoj_sfid
โ””โ”€โ”€ This is the actual material record
    โ†“
Design Version Element (VIEW)
โ””โ”€โ”€ Joins Material Slot + AAOJ + AV โ†’ Shows materials per slot

Creating a New Material Option:

To add a new material to a slot:

  1. AAOJ exists or create - Junction linking attribute to attribute option
  2. Create ForcegentoAttributeOptionVisualOrder (AV) - This represents the material
  3. Design Version Element automatically appears in the view

Example:

// Step 1: AAOJ junction (may already exist)
AAOJ Record #131
โ”œโ”€โ”€ attribute_sfid: "element0_attribute" (links to Material Slot "Element0")
โ”œโ”€โ”€ attribute_option_sfid: "burnt_orange_option"
โ””โ”€โ”€ Purpose: Junction linking attribute to option

// Step 2: ForcegentoAttributeOptionVisualOrder (THE MATERIAL)
AV Record #450
โ”œโ”€โ”€ aaoj_sfid: #131 (references AAOJ)
โ”œโ”€โ”€ sfid: "AV-xxxxxx"
โ”œโ”€โ”€ name: "v2.0"
โ”œโ”€โ”€ position: 10
โ”œโ”€โ”€ thumbnail_on_app: "cloudinary.com/..."
โ”œโ”€โ”€ r: 0.9, g: 0.5, b: 0.2, a: 1.0 (orange tint)
โ”œโ”€โ”€ visibility_app_jp_ja: "Catalog, Search"
โ”œโ”€โ”€ is_default: false
โ””โ”€โ”€ This IS the material record

// Step 3: Design Version Element appears automatically
Design Version Element (view record)
โ”œโ”€โ”€ sfid: (computed from view)
โ”œโ”€โ”€ attribute_attribute_option_junction_sfid: #131
โ”œโ”€โ”€ name: "v2.0" (from AV)
โ”œโ”€โ”€ material_slot: "Element0" (from Material Slot)
โ”œโ”€โ”€ material_type: "fabric" (from Material Slot)
โ”œโ”€โ”€ position: 10 (from AV)
โ”œโ”€โ”€ thumbnail_on_app: "cloudinary.com/..." (from AV)
โ””โ”€โ”€ r, g, b, a: from AV

Material Properties

Material type and slot information (inherited from Material Slot definition):

AttributeTypeDescriptionSource
material_typeString (Enum)Type of material (fabric, paint, leather, etc.)From Material Slot
base_material_typeStringBase material classificationFrom AV (ForcegentoAttributeOptionVisualOrder)
replaceable_materialsString/ArrayMaterials that can replace this elementFrom Material Slot configuration
material_slotStringSlot identifier where material is appliedFrom Material Slot

Material Type Values:

The material_type is owned by the Material Slot, not the individual element. All Design Version Elements within the same slot share the same material_type.

TypeCommon Use Cases
fabricUpholstery, cushions, curtains
paintWood frames, walls, metal finishes
leatherPremium upholstery, accents
woodNatural wood finishes, flooring
metalHardware, legs, frames
wallpaperWall coverings
hdriEnvironmental lighting
floorFlooring materials
pictureDecorative images, artwork

Example Configuration:

// Material Slot definition
Material Slot: "Element0"
โ”œโ”€โ”€ material_type: "fabric"
โ”œโ”€โ”€ material_slot: "cushion_main"
โ””โ”€โ”€ replaceable_materials: ["fabric", "leather", "velvet"]

// All materials (AV records) in this slot inherit the material_type
AV Record: "Gray Fabric" (material_type: "fabric" from slot)
AV Record: "Navy Fabric" (material_type: "fabric" from slot)
AV Record: "Beige Fabric" (material_type: "fabric" from slot)

// Separate slot with different material_type
Material Slot: "Element1"
โ”œโ”€โ”€ material_type: "paint"
โ”œโ”€โ”€ material_slot: "frame_surface"
โ””โ”€โ”€ replaceable_materials: ["paint", "stain", "lacquer"]

AV Record: "White Oak" (material_type: "paint" from slot)
AV Record: "Walnut" (material_type: "paint" from slot)
๐ŸŽจ

Slot-Level Material Type

The material_type is defined at the Material Slot level, not per element. This ensures consistency - all fabric options appear together, all paint options together, etc.


Default Material Flags

Boolean flags indicating which default material category this element belongs to:

AttributeTypeDescription
default_fabricBooleanDefault fabric material element
default_paintBooleanDefault paint material element
default_leatherBooleanDefault leather material element
default_floorBooleanDefault floor material element
default_curtainBooleanDefault curtain material element
default_hdriBooleanDefault HDRI environment element
default_wallpaperBooleanDefault wallpaper material element
default_pictureBooleanDefault picture/artwork element

Usage Pattern:

Each Design Version Element typically has only one default flag set to true:

// Cushion fabric element
default_fabric: true
default_paint: false
default_leather: false
// ... other flags: false

// Frame paint element
default_fabric: false
default_paint: true
default_leather: false
// ... other flags: false

// Premium leather option
default_fabric: false
default_paint: false
default_leather: true
// ... other flags: false

Application Flow:

  1. Initial Load - System checks default flags
  2. Material Assignment - Applies the flagged material type
  3. User Override - Customer can change if replaceable_materials allows
  4. Rendering - 3D engine applies material to specified material_slot
โš ๏ธ

Default Material Priority

Only one default flag should be true per element. Multiple flags set to true may cause undefined behavior in material application.


Visual Properties

Controls appearance, color tinting, and thumbnail display (from ForcegentoAttributeOptionVisualOrder - the material record):

AttributeTypeDescriptionSource
thumbnail_on_appURLThumbnail image URL for app displayAV (ForcegentoAttributeOptionVisualOrder)
element_thumbnail_urlURLElement-specific thumbnailAV (ForcegentoAttributeOptionVisualOrder)
rFloat (0-1)Red channel for texture tintingAV (ForcegentoAttributeOptionVisualOrder)
gFloat (0-1)Green channel for texture tintingAV (ForcegentoAttributeOptionVisualOrder)
bFloat (0-1)Blue channel for texture tintingAV (ForcegentoAttributeOptionVisualOrder)
aFloat (0-1)Alpha channel for transparencyAV (ForcegentoAttributeOptionVisualOrder)
original_hIntegerOriginal texture height in pixelsAV (ForcegentoAttributeOptionVisualOrder)
original_wIntegerOriginal texture width in pixelsAV (ForcegentoAttributeOptionVisualOrder)

RGBA Color Tinting:

The RGBA values allow runtime color adjustments without creating new textures:

// Pure white (no tint)
r: 1.0, g: 1.0, b: 1.0, a: 1.0

// Red tint (25% red overlay)
r: 1.0, g: 0.75, b: 0.75, a: 1.0

// Blue tint (50% blue overlay)
r: 0.5, g: 0.5, b: 1.0, a: 1.0

// Semi-transparent (50% opacity)
r: 1.0, g: 1.0, b: 1.0, a: 0.5

Thumbnail URLs:

Both thumbnail fields serve different purposes:

  • thumbnail_on_app: Used in mobile/web apps for material selection UI
  • element_thumbnail_url: Used in catalog and preview contexts

Example:

thumbnail_on_app: "https://res.cloudinary.com/.../cushion_fabric_thumb.jpg"
element_thumbnail_url: "https://res.cloudinary.com/.../cushion_fabric_preview.jpg"

r: 1.0
g: 1.0
b: 1.0
a: 1.0

original_h: 1024
original_w: 1024

Color Tinting Workflow:

  1. Load base texture from asset system
  2. Apply RGBA multipliers in shader
  3. Result: Tinted material without new texture file
  4. Performance: Fast, memory-efficient color variations

Positioning and Display

Controls element ordering and visibility (from ForcegentoAttributeOptionVisualOrder - the material record):

AttributeTypeDescriptionSource
positionIntegerSort order position in UI listsAV (ForcegentoAttributeOptionVisualOrder)
is_defaultBooleanWhether this is the default element for its slotAV (ForcegentoAttributeOptionVisualOrder)
visibility_app_jp_jaString (Enum)Visibility settings for Japanese appAV (ForcegentoAttributeOptionVisualOrder)
visibility_limitedBooleanWhether visibility is restrictedAV (ForcegentoAttributeOptionVisualOrder)

Position Sorting:

Lower position values appear first in UI. These values come from ForcegentoAttributeOptionVisualOrder (AV - the material records):

Material Slot: "Element0"
โ”œโ”€โ”€ Material (AV): "Standard Gray" (position: 1, AAOJ: #123) โ† Shown first
โ”œโ”€โ”€ Material (AV): "Premium Navy" (position: 2, AAOJ: #124)
โ”œโ”€โ”€ Material (AV): "Luxury Beige" (position: 3, AAOJ: #125)
โ””โ”€โ”€ Material (AV): "Exclusive Velvet" (position: 10, AAOJ: #126) โ† Shown last

Default Element:

Only one material per material_slot should have is_default: true. This is set in the ForcegentoAttributeOptionVisualOrder (AV) record:

// Element0 slot - multiple material options
Material (AV): "Standard Fabric" (is_default: true, AAOJ: #123) โ† Selected by default
Material (AV): "Premium Fabric" (is_default: false, AAOJ: #124)
Material (AV): "Leather Option" (is_default: false, AAOJ: #125)

Visibility Controls:

Visibility SettingBehavior
"Catalog, Search"Visible in both catalog and search
"Catalog"Catalog only, hidden from search
"Exclusive Custom Catalog"Custom/curated collections only
"Don't Show in App"Hidden from all UI

Visibility Limited:

When visibility_limited: true:

  • Element restricted to specific user groups
  • May require special permissions
  • Typically used for premium/exclusive options

Localization

Multi-language support for element names and labels (from various source tables):

AttributeTypeDescriptionSource
japaneseString (max 50)Japanese element nameAAOJ/Attribute Option
color_palette_tab_labelStringEnglish label for color palette UIAV (ForcegentoAttributeOptionVisualOrder)
color_palette_tab_label_jaStringJapanese label for color palette UIAV (ForcegentoAttributeOptionVisualOrder)

Localization Example:

// Element configuration
name: "Seat Cushion Fabric"
japanese: "ๅบง้ข็”Ÿๅœฐ"
color_palette_tab_label: "Cushion Colors"
color_palette_tab_label_ja: "ใ‚ฏใƒƒใ‚ทใƒงใƒณใ‚ซใƒฉใƒผ"

UI Display Flow:

User Language: Japanese (ja-JP)
โ”œโ”€โ”€ Element Name: Use 'japanese' field
โ”‚   โ””โ”€โ”€ Fallback: Use 'name' if japanese is empty
โ”‚
โ””โ”€โ”€ Color Palette Tab: Use 'color_palette_tab_label_ja'
    โ””โ”€โ”€ Fallback: Use 'color_palette_tab_label' if _ja is empty

User Language: English (en-US)
โ”œโ”€โ”€ Element Name: Use 'name' field
โ””โ”€โ”€ Color Palette Tab: Use 'color_palette_tab_label'

Best Practices:

  • Always provide English (name, color_palette_tab_label)
  • Provide Japanese for Japan market (japanese, color_palette_tab_label_ja)
  • Keep translations concise (50 character limit for Japanese names)
  • Use culturally appropriate terminology
๐ŸŒ

Localization Priority

Japanese market customization UI always checks localized fields first. Missing translations fall back to English to ensure UI functionality.


Basic Sofa Customization

Simple furniture with multiple material slots:

Example: Two-Tone Sofa

Design Family: "NORDIC SOFA"
โ””โ”€โ”€ Design Version: "1.0"
    โ”œโ”€โ”€ Material Slot: "Element0" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Materials (AV records):
    โ”‚       โ”œโ”€โ”€ AV: "Gray Linen" (AAOJ: #110, position: 1, is_default: true)
    โ”‚       โ”œโ”€โ”€ AV: "Navy Cotton" (AAOJ: #111, position: 2)
    โ”‚       โ””โ”€โ”€ AV: "Brown Leather" (AAOJ: #112, position: 3)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "Element1" (material_type: "paint")
    โ”‚   โ””โ”€โ”€ Materials (AV records):
    โ”‚       โ”œโ”€โ”€ AV: "White Oak" (AAOJ: #120, position: 1, is_default: true)
    โ”‚       โ”œโ”€โ”€ AV: "Walnut Stain" (AAOJ: #121, position: 2)
    โ”‚       โ””โ”€โ”€ AV: "Black Matte" (AAOJ: #122, position: 3)
    โ”‚
    โ””โ”€โ”€ Material Slot: "Element2" (material_type: "wood")
        โ””โ”€โ”€ Materials (AV records):
            โ”œโ”€โ”€ AV: "Natural Wood" (AAOJ: #130, position: 1, is_default: true)
            โ”œโ”€โ”€ AV: "Dark Walnut" (AAOJ: #131, position: 2)
            โ””โ”€โ”€ AV: "Brushed Metal" (AAOJ: #132, position: 3)

Data Structure Behind the Scenes:

Material Slot Table:
โ”œโ”€โ”€ "Element0" โ†’ material_type: "fabric"
โ”œโ”€โ”€ "Element1" โ†’ material_type: "paint"
โ””โ”€โ”€ "Element2" โ†’ material_type: "wood"

AAOJ Table (9 junction records):
โ”œโ”€โ”€ #110, #111, #112 โ†’ linked to "Element0" attribute
โ”œโ”€โ”€ #120, #121, #122 โ†’ linked to "Element1" attribute
โ””โ”€โ”€ #130, #131, #132 โ†’ linked to "Element2" attribute

ForcegentoAttributeOptionVisualOrder (AV) Table (9 material records):
โ”œโ”€โ”€ Each AV record IS a material
โ”œโ”€โ”€ Contains: name, thumbnails, position, visibility, RGBA, dimensions
โ”œโ”€โ”€ References AAOJ via aaoj_sfid
โ””โ”€โ”€ These ARE the actual materials

Design Version Element VIEW:
โ””โ”€โ”€ Joins Material Slot + AAOJ + AV โ†’ Shows 9 materials across 3 slots

Customization Flow:

  1. Customer selects sofa from catalog
  2. UI displays material slots (seat, frame, legs)
  3. Each slot shows its Design Version Elements in position order
  4. Default elements (is_default: true) are pre-selected
  5. Customer can change to other options within each slot
  6. 3D preview updates materials in real-time

Complex Multi-Element Design

Furniture with many customization options across multiple slots:

Example: Modular Sectional Sofa

Design Family: "MODULAR SECTIONAL"
โ””โ”€โ”€ Design Version: "3.0"
    โ”œโ”€โ”€ Material Slot: "main_cushion" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ "Standard Linen" (AAOJ: #200, position: 1, is_default: true)
    โ”‚       โ”œโ”€โ”€ "Premium Cotton" (AAOJ: #201, position: 2)
    โ”‚       โ”œโ”€โ”€ "Velvet Luxury" (AAOJ: #202, position: 3)
    โ”‚       โ””โ”€โ”€ "Leather Premium" (AAOJ: #203, position: 4)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "accent_cushion" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ "Matching Accent" (AAOJ: #210, position: 1, is_default: true)
    โ”‚       โ”œโ”€โ”€ "Contrast Blue" (AAOJ: #211, position: 2, r: 0.3, g: 0.5, b: 0.9)
    โ”‚       โ””โ”€โ”€ "Contrast Red" (AAOJ: #212, position: 3, r: 0.9, g: 0.3, b: 0.3)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "back_panel" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ "Standard Fabric" (AAOJ: #220, position: 1, is_default: true)
    โ”‚       โ””โ”€โ”€ "Leather Back" (AAOJ: #221, position: 2)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "frame_finish" (material_type: "paint")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ "Natural Oak" (AAOJ: #230, position: 1, is_default: true)
    โ”‚       โ”œโ”€โ”€ "Walnut Stain" (AAOJ: #231, position: 2)
    โ”‚       โ””โ”€โ”€ "Black Lacquer" (AAOJ: #232, position: 3)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "leg_hardware" (material_type: "metal")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ "Brushed Steel" (AAOJ: #240, position: 1, is_default: true)
    โ”‚       โ”œโ”€โ”€ "Polished Chrome" (AAOJ: #241, position: 2)
    โ”‚       โ””โ”€โ”€ "Matte Black" (AAOJ: #242, position: 3)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "piping" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements (view records):
    โ”‚       โ”œโ”€โ”€ "Standard Piping" (AAOJ: #250, position: 1, is_default: true)
    โ”‚       โ””โ”€โ”€ "Contrast Piping" (AAOJ: #251, position: 2, visibility_limited: true)
    โ”‚
    โ””โ”€โ”€ Material Slot: "throw_pillow" (material_type: "fabric")
        โ””โ”€โ”€ Design Version Elements (view records):
            โ”œโ”€โ”€ "Matching Pillow" (AAOJ: #260, position: 1, is_default: true)
            โ”œโ”€โ”€ "Velvet Pillow" (AAOJ: #261, position: 2)
            โ””โ”€โ”€ "Pattern Pillow" (AAOJ: #262, position: 3)

Database Record Count:

  • Material Slots: 7
  • AAOJ Records: 20 (links to attribute options)
  • ForcegentoAttributeOptionVisualOrder Records: 20 (visual properties)
  • Design Version Elements (VIEW): 20 (automatically generated)

Benefits:

  • โœ… Granular control over every material surface
  • โœ… Each slot groups related material options
  • โœ… Mix and match across slots
  • โœ… Color tinting for accent elements (RGB values)
  • โœ… Premium options via visibility_limited
  • โœ… Organized by slot, then by position within slot

Room Scene Configuration

Environmental elements for 3D room scenes with multiple material slots:

Example: Complete Room Design

Design Family: "LIVING ROOM SCENE"
โ””โ”€โ”€ Design Version: "2.0"
    โ”œโ”€โ”€ Material Slot: "sofa_upholstery" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements:
    โ”‚       โ”œโ”€โ”€ "Gray Linen" (AAOJ: #300)
    โ”‚       โ”œโ”€โ”€ "Navy Cotton" (AAOJ: #301)
    โ”‚       โ””โ”€โ”€ "Beige Velvet" (AAOJ: #302)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "wall_surface" (material_type: "paint")
    โ”‚   โ””โ”€โ”€ Design Version Elements:
    โ”‚       โ”œโ”€โ”€ "Warm White" (AAOJ: #310)
    โ”‚       โ”œโ”€โ”€ "Light Gray" (AAOJ: #311)
    โ”‚       โ””โ”€โ”€ "Sage Green" (AAOJ: #312)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "accent_wall" (material_type: "wallpaper")
    โ”‚   โ””โ”€โ”€ Design Version Elements:
    โ”‚       โ”œโ”€โ”€ "No Wallpaper" (AAOJ: #320, is_default: true)
    โ”‚       โ”œโ”€โ”€ "Geometric Pattern" (AAOJ: #321)
    โ”‚       โ”œโ”€โ”€ "Floral Design" (AAOJ: #322)
    โ”‚       โ””โ”€โ”€ "Solid Color" (AAOJ: #323)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "floor_surface" (material_type: "floor")
    โ”‚   โ””โ”€โ”€ Design Version Elements:
    โ”‚       โ”œโ”€โ”€ "Oak Hardwood" (AAOJ: #330)
    โ”‚       โ”œโ”€โ”€ "Marble Tile" (AAOJ: #331)
    โ”‚       โ””โ”€โ”€ "Beige Carpet" (AAOJ: #332)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "window_treatment" (material_type: "fabric")
    โ”‚   โ””โ”€โ”€ Design Version Elements:
    โ”‚       โ”œโ”€โ”€ "Sheer White" (AAOJ: #340, default_curtain: true)
    โ”‚       โ”œโ”€โ”€ "Linen Drapes" (AAOJ: #341)
    โ”‚       โ””โ”€โ”€ "Blackout Curtain" (AAOJ: #342)
    โ”‚
    โ”œโ”€โ”€ Material Slot: "artwork_frame" (material_type: "picture")
    โ”‚   โ””โ”€โ”€ Design Version Elements:
    โ”‚       โ”œโ”€โ”€ "Abstract Art 1" (AAOJ: #350, original_h: 1920, original_w: 1080)
    โ”‚       โ”œโ”€โ”€ "Abstract Art 2" (AAOJ: #351, original_h: 1920, original_w: 1080)
    โ”‚       โ””โ”€โ”€ "Landscape Photo" (AAOJ: #352, original_h: 1920, original_w: 1080)
    โ”‚
    โ””โ”€โ”€ Material Slot: "environment_light" (material_type: "hdri")
        โ””โ”€โ”€ Design Version Elements:
            โ”œโ”€โ”€ "Daylight Soft" (AAOJ: #360, default_hdri: true)
            โ”œโ”€โ”€ "Sunset Warm" (AAOJ: #361)
            โ””โ”€โ”€ "Studio Bright" (AAOJ: #362)

Scene Composition:

This configuration enables complete room customization through 7 material slots:

SlotMaterial TypePurposeElements
sofa_upholsteryfabricFurniture materials3 options
wall_surfacepaintWall finishes3 options
accent_wallwallpaperFeature wall4 options
floor_surfacefloorFlooring materials3 options
window_treatmentfabricCurtains/drapes3 options
artwork_framepictureWall decorations3 options
environment_lighthdriLighting atmosphere3 options

Total: 7 Material Slots, 22 Design Version Elements (view records)


Premium Material Options

Exclusive materials with visibility controls managed through ForcegentoAttributeOptionVisualOrder:

Example: Luxury Armchair Collection

Design Family: "LUXURY ARMCHAIR"
โ””โ”€โ”€ Design Version: "1.0"
    โ””โ”€โ”€ Material Slot: "upholstery" (material_type: "fabric")
        โ””โ”€โ”€ Design Version Elements (view records from different tiers):
            โ”œโ”€โ”€ "Standard Fabric" (Public Tier)
            โ”‚   โ”œโ”€โ”€ AAOJ: #400
            โ”‚   โ”œโ”€โ”€ position: 1
            โ”‚   โ”œโ”€โ”€ is_default: true
            โ”‚   โ”œโ”€โ”€ visibility_app_jp_ja: "Catalog, Search"
            โ”‚   โ””โ”€โ”€ visibility_limited: false
            โ”‚
            โ”œโ”€โ”€ "Premium Linen" (Public Tier)
            โ”‚   โ”œโ”€โ”€ AAOJ: #401
            โ”‚   โ”œโ”€โ”€ position: 2
            โ”‚   โ”œโ”€โ”€ is_default: false
            โ”‚   โ”œโ”€โ”€ visibility_app_jp_ja: "Catalog, Search"
            โ”‚   โ””โ”€โ”€ visibility_limited: false
            โ”‚
            โ”œโ”€โ”€ "Premium Leather" (Limited Tier)
            โ”‚   โ”œโ”€โ”€ AAOJ: #402
            โ”‚   โ”œโ”€โ”€ position: 3
            โ”‚   โ”œโ”€โ”€ is_default: false
            โ”‚   โ”œโ”€โ”€ visibility_app_jp_ja: "Catalog"
            โ”‚   โ””โ”€โ”€ visibility_limited: true
            โ”‚
            โ”œโ”€โ”€ "Exclusive Velvet" (Exclusive Tier)
            โ”‚   โ”œโ”€โ”€ AAOJ: #403
            โ”‚   โ”œโ”€โ”€ position: 4
            โ”‚   โ”œโ”€โ”€ is_default: false
            โ”‚   โ”œโ”€โ”€ visibility_app_jp_ja: "Exclusive Custom Catalog"
            โ”‚   โ””โ”€โ”€ visibility_limited: true
            โ”‚
            โ””โ”€โ”€ "Italian Leather" (Hidden)
                โ”œโ”€โ”€ AAOJ: #404
                โ”œโ”€โ”€ position: 5
                โ”œโ”€โ”€ is_default: false
                โ”œโ”€โ”€ visibility_app_jp_ja: "Don't Show in App"
                โ””โ”€โ”€ visibility_limited: true

Visibility Configuration:

All visibility settings come from ForcegentoAttributeOptionVisualOrder records:

AAOJ IDMaterial OptionVisibility SettingLimited?Who Sees It
#400Standard Fabric"Catalog, Search"falseEveryone
#401Premium Linen"Catalog, Search"falseEveryone
#402Premium Leather"Catalog"trueRegistered users
#403Exclusive Velvet"Exclusive Custom Catalog"trueVIP/Partners
#404Italian Leather"Don't Show in App"trueAdmin only

Data Flow Diagram

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Design Version  โ”‚
โ”‚                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚ has many
         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      owns      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Material Slot   โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚material_type โ”‚
โ”‚                 โ”‚                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚ defines attribute
         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Attribute               โ”‚
โ”‚                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚ linked by
         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ AAOJ                       โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚ AttributeOption  โ”‚
โ”‚ (junction table)           โ”‚  links โ”‚ (japanese name)  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚ referenced by
         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ForcegentoAttributeOption        โ”‚
โ”‚ VisualOrder (AV)                 โ”‚
โ”‚ **THIS IS THE MATERIAL**         โ”‚
โ”‚                                  โ”‚
โ”‚ Contains:                        โ”‚
โ”‚ - name, thumbnails               โ”‚
โ”‚ - position, visibility           โ”‚
โ”‚ - RGBA color values              โ”‚
โ”‚ - dimensions (h, w)              โ”‚
โ”‚ - localization labels            โ”‚
โ”‚ - base_material_type             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
         โ”‚ all joined into
         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ DesignVersionElement             โ”‚
โ”‚ (DATABASE VIEW - read only)      โ”‚
โ”‚ Shows materials per slot         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Working with the View

โš ๏ธ

Read-Only View

You cannot directly INSERT, UPDATE, or DELETE Design Version Element records. All changes must be made to the underlying source tables.