{"id":20294,"date":"2025-05-06T07:41:17","date_gmt":"2025-05-06T07:41:17","guid":{"rendered":"https:\/\/techpearl.com\/1719395789229\/?p=20294"},"modified":"2025-05-14T06:23:50","modified_gmt":"2025-05-14T06:23:50","slug":"single-table-design-in-dynamodb","status":"publish","type":"post","link":"https:\/\/techpearl.com\/1719395789229\/single-table-design-in-dynamodb\/","title":{"rendered":"Real-World Implementation of Single Table Design in AWS DynamoDB"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"20294\" class=\"elementor elementor-20294\" data-elementor-settings=\"[]\">\n\t\t\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-2cd63f20 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"2cd63f20\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-437687b9 jltma-glass-effect-no\" data-id=\"437687b9\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6fd6e2d4 jltma-glass-effect-no elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"6fd6e2d4\" data-element_type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Real-World Implementation of Single Table Design in AWS DynamoDB<\/h1>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-654a0e5 elementor-author-box--align-left elementor-author-box--image-valign-top elementor-author-box--name-yes elementor-author-box--biography-yes elementor-author-box--link-no jltma-glass-effect-no elementor-widget elementor-widget-author-box\" data-id=\"654a0e5\" data-element_type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\t\t\t\t\t<div >\n\t\t\t\t\t\t<span class=\"elementor-author-box__name\">Trupti Panchal<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-author-box__bio\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-49769c6d bdt-ss-btns-view-icon bdt-ss-btns-shape-rounded bdt-ss-btns-align-left bdt-ep-grid-0 bdt-ss-btns-style-flat bdt-ss-btns-color-original jltma-glass-effect-no elementor-widget elementor-widget-bdt-social-share\" data-id=\"49769c6d\" data-element_type=\"widget\" data-widget_type=\"bdt-social-share.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"bdt-social-share bdt-ep-grid\">\n\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-linkedin\" data-social=\"linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-linkedin\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-twitter\" data-social=\"twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-twitter\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-facebook\" data-social=\"facebook\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-facebook\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-8ca0303 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"8ca0303\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a869007 jltma-glass-effect-no\" data-id=\"a869007\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-08201a5 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"08201a5\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Blog-image-1.png\" class=\"attachment-full size-full\" alt=\"Blog image 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Blog-image-1.png 1024w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Blog-image-1-300x169.png 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Blog-image-1-768x432.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-30b5d308 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"30b5d308\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6d839c4d jltma-glass-effect-no\" data-id=\"6d839c4d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5f800df jltma-glass-effect-no elementor-widget elementor-widget-table-of-contents\" data-id=\"5f800df\" data-element_type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;marker_view&quot;:&quot;numbers&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t<h4 class=\"elementor-toc__header-title\">Table of Contents<\/h4>\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b9db82a jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"b9db82a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introduction<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b59a29f jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"3b59a29f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\tAs web applications scale and diversify, traditional relational database models often become bottlenecks for performance and agility. Enter DynamoDB with Single Table Design (STD)\u2014a strategy that aligns your data model with actual access patterns, delivering ultra-fast, scalable performance. In this blog, we\u2019ll walk through applying STD in a real-world web app that manages Quality managers, Technicians, devices, and inspections.\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-be6d6d8 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"be6d6d8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Use Case: Manufacturing Quality Control System<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5642bf0 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"5642bf0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>We&#8217;re building a <strong>Work Order (WO)-driven system<\/strong> to manage production quality control. The system will support both quality managers and floor technicians with tailored access via web and mobile platforms. It needs to efficiently handle data related to users, WOs, measurement tools, and quality standards &#8211; all with low latency and high scalability.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3020162 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"3020162\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Problem Statement<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2b46cf jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"e2b46cf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Design a system to manage interactions between<strong> quality managers<\/strong>, <strong>technicians<\/strong>, <strong>measurement devices<\/strong>, and <strong>WO data<\/strong>, supporting fast, role-specific access patterns.<\/p><ul><li><strong>Quality Managers<\/strong>: Create and manage technicians, Schedule and assign <strong>WOs<\/strong> to production lines, Track devices and Generate quality reports from <strong>WO results<\/strong><\/li><li><strong>Technicians<\/strong>:Execute <strong>WOs<\/strong> using calibrated devices,Record product measurements against <strong>WO specifications,<\/strong>Upload<strong> WO completion data<\/strong> for manager review<\/li><li><strong>Devices<\/strong>: Require tracking for calibration status and maintenance cycles<\/li><li><strong>Metadata:<\/strong> Defines <strong>WO test parameters<\/strong> (tolerances, test methods),Classifies defect types for <strong>WO analysis<\/strong><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a518236 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"a518236\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What is Single Table Design (STD) in DynamoDB?<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c85ec7d jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c85ec7d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Single Table Design (STD) is a strategy where <strong>all entities<\/strong> in your application\u2014such as users, devices, work orders, and metadata\u2014are stored in a <strong>single DynamoDB table<\/strong>. Instead of creating a separate table for each entity, you design your keys and indexes around <strong>how your application accesses the data<\/strong>, not how it&#8217;s structured logically.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61698f3 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"61698f3\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Key Concepts<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a26834c jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a26834c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li><strong>Shared Table<\/strong>: All data types (users, devices, etc.) live in one table.<\/li><li><strong>Access Pattern\u2013First Design<\/strong>: Keys and indexes are structured based on how data is queried.<\/li><li><strong>Composite Keys<\/strong>: Every item uses a combination of a partition key (PK) and sort key (SK) to uniquely identify and organize data.<\/li><li><strong>Entity Prefixing<\/strong>: Prefixes like USER# or DEVICE# are used in keys to avoid collisions and make querying easier.<\/li><li><strong>Global Secondary Indexes (GSIs)<\/strong>: Additional indexes let you query data in multiple ways.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d019765 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"d019765\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Why AWS Recommends Single Table Design<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d0d7cb jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"8d0d7cb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>AWS advocates for STD in DynamoDB to:<\/p><ul><li><strong>Reduce the number of read\/write operations<\/strong> needed to join or aggregate data.<\/li><li><strong>Improve query performance<\/strong> by minimizing the number of round-trips to the database.<\/li><li><strong>Simplify data modeling<\/strong> for real-time applications.<\/li><li><strong>Leverage the high throughput and scalability<\/strong> of DynamoDB efficiently with well-designed keys and indexes.<\/li><li><strong>Enable atomic operations<\/strong> across related items using DynamoDB transactions.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eecc7de elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"eecc7de\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">The Traditional Approach (Multi-Table)<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28948e1 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"28948e1\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"240\" height=\"528\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/The-Traditional-Approach-Multi-Table.png\" class=\"attachment-large size-large\" alt=\"The Traditional Approach Multi Table\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/The-Traditional-Approach-Multi-Table.png 240w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/The-Traditional-Approach-Multi-Table-136x300.png 136w\" sizes=\"auto, (max-width: 240px) 100vw, 240px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3127922 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"3127922\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Our Single Table Solution<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20cdedc elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"20cdedc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"878\" height=\"278\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Our-Single-Table-Solution.png\" class=\"attachment-large size-large\" alt=\"Our Single Table Solution\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Our-Single-Table-Solution.png 878w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Our-Single-Table-Solution-300x95.png 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/05\/Our-Single-Table-Solution-768x243.png 768w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c151b0c jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"c151b0c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Designing the Schema Based on Access Patterns<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21170fd jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"21170fd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 1: Identify the Core Entities<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c36efff jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c36efff\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li><strong>Users<\/strong> (Quality Manager, Technicians)<\/li><li><strong>Devices<\/strong><\/li><li><strong>Work Orders (WOs)<\/strong><\/li><li><strong>Metadata<\/strong> Tolerances, Test Methods, Defects<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43af213 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"43af213\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 2: Primary Key Design (PK\/SK)<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf1a39c jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"cf1a39c\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-family: Arial, sans-serif;\r\n  }\r\n\r\n  .responsive-table th,\r\n  .responsive-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 600px) {\r\n    .responsive-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n    }\r\n\r\n    .responsive-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n\r\n<table class=\"responsive-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>Entity<\/th>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"Entity\">Users<\/td>\r\n      <td data-label=\"PK\">USER#&lt;username&gt;<\/td>\r\n      <td data-label=\"SK\">USER#&lt;username&gt;<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"Entity\">Work Orders<\/td>\r\n      <td data-label=\"PK\">WO#&lt;WO-id&gt;<\/td>\r\n      <td data-label=\"SK\">USER#&lt;username&gt;<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"Entity\">Devices<\/td>\r\n      <td data-label=\"PK\">DEVICE#&lt;device-id&gt;<\/td>\r\n      <td data-label=\"SK\">USER#&lt;username&gt;<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"Entity\">Metadata<\/td>\r\n      <td data-label=\"PK\">METADATA#&lt;type&gt;<\/td>\r\n      <td data-label=\"SK\">METADATA#&lt;specific value&gt;<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cc2e08 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"2cc2e08\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 3: Global Secondary Indexes (GSIs)<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2578084 jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"2578084\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-gsi-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-family: Arial, sans-serif;\r\n  }\r\n\r\n  .responsive-gsi-table th,\r\n  .responsive-gsi-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-gsi-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 600px) {\r\n    .responsive-gsi-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-gsi-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-gsi-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n    }\r\n\r\n    .responsive-gsi-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-gsi-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>GSI<\/th>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>Use Case<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"GSI\">GSI1<\/td>\r\n      <td data-label=\"PK\">USER#&lt;username&gt;<\/td>\r\n      <td data-label=\"SK\">TECHNICIANS#&lt;username&gt;<\/td>\r\n      <td data-label=\"Use Case\">List &amp; sort technicians<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"GSI\">GSI2<\/td>\r\n      <td data-label=\"PK\">PROJECT#&lt;project-id&gt;<\/td>\r\n      <td data-label=\"SK\">WO#&lt;WO-id&gt;<\/td>\r\n      <td data-label=\"Use Case\">List WOs under a project<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"GSI\">GSI3<\/td>\r\n      <td data-label=\"PK\">USER#&lt;username&gt;<\/td>\r\n      <td data-label=\"SK\">WO#&lt;WO-id&gt;<\/td>\r\n      <td data-label=\"Use Case\">List\/sort WOs by user<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91c37ca jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"91c37ca\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 4: Access Pattern Mapping<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6ad7dd7 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"6ad7dd7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Below is a breakdown of how the <strong>access patterns<\/strong> map to our schema:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f9619a jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"3f9619a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-app-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-family: Arial, sans-serif;\r\n  }\r\n\r\n  .responsive-app-table th,\r\n  .responsive-app-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-app-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 768px) {\r\n    .responsive-app-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-app-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-app-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n      border: none;\r\n      border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .responsive-app-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n      white-space: nowrap;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-app-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>App<\/th>\r\n      <th>Access Pattern<\/th>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>GSI<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Get manager-user with username - Edit<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">List all Technician-users<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">TECHNICIANS#&lt;username&gt;<\/td><td data-label=\"GSI\">GSI1<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Sort by Technician-user username<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">TECHNICIANS#&lt;username&gt;<\/td><td data-label=\"GSI\">GSI1<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Sort by certificate expiry\/type\/status<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">TECHNICIANS#&lt;username&gt;<\/td><td data-label=\"GSI\">GSI1<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Get Technician-user with username - Edit<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">List all devices<\/td><td data-label=\"PK\">DEVICE#&lt;device-id&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Sort devices by model\/serial\/user<\/td><td data-label=\"PK\">DEVICE#&lt;device-id&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Get device with device-id - Edit<\/td><td data-label=\"PK\">DEVICE#&lt;device-id&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">List work orders and filter by Project<\/td><td data-label=\"PK\">PROJECT#&lt;project-id&gt;<\/td><td data-label=\"SK\">WO#&lt;WO-id&gt;<\/td><td data-label=\"GSI\">GSI2<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Manager-Web<\/td><td data-label=\"Access Pattern\">Get WO based on WO-id<\/td><td data-label=\"PK\">WO#&lt;WO-id&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Technician App<\/td><td data-label=\"Access Pattern\">Get Technician-user<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Technician App<\/td><td data-label=\"Access Pattern\">List all WO, filter by user<\/td><td data-label=\"PK\">USER#&lt;username&gt;<\/td><td data-label=\"SK\">WO#&lt;WO-id&gt;<\/td><td data-label=\"GSI\">GSI3<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Technician App<\/td><td data-label=\"Access Pattern\">Get WO based on WO-id<\/td><td data-label=\"PK\">WO#&lt;WO-id&gt;<\/td><td data-label=\"SK\">USER#&lt;username&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n    <tr><td data-label=\"App\">Technician App<\/td><td data-label=\"Access Pattern\">List meta data (tolerance, test methods)<\/td><td data-label=\"PK\">METADATA#&lt;type&gt;<\/td><td data-label=\"SK\">METADATA#&lt;specific value&gt;<\/td><td data-label=\"GSI\">N\/A<\/td><\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aa55c25 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"aa55c25\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 5: Example Data Model<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f74ae5 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"1f74ae5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li><strong>User (Manager \/ Technician):<\/strong><ul><li><strong>PK<\/strong>: USER#johndoe<\/li><li><strong>SK<\/strong>: USER#johndoe<\/li><li><strong>Type<\/strong>: Technician<\/li><li><strong>Status<\/strong>: Active<\/li><li><strong>CertificateExpiry<\/strong>: 2026-12-31<\/li><\/ul><\/li><li><strong>Work Order (WO)<\/strong>:<ul><li><strong>PK<\/strong>: WO#12345<\/li><li><strong>SK<\/strong>: USER#johndoe<\/li><li><strong>ProjectID<\/strong>: P123<\/li><li><strong>ScheduledDate<\/strong>: 2025-03-10<\/li><li><strong>Status<\/strong>: Pending<\/li><\/ul><\/li><li><strong>Device<\/strong>:<ul><li><strong>PK<\/strong>: DEVICE#D123<\/li><li><strong>SK<\/strong>: USER#johndoe<\/li><li><strong>Model<\/strong>: M-001<\/li><li><strong>SerialNumber<\/strong>: SN12345678<\/li><\/ul><\/li><li><strong>Metadata (Tolerance)<\/strong>:<ul><li><strong>PK<\/strong>: METADATA#TOLERANCE<\/li><li><strong>SK<\/strong>: METADATA#TOL_025<\/li><\/ul><\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2f2e14 jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"c2f2e14\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Responsive Table - All 20 Rows<\/title>\n <style>\n    .table-container {\n      overflow-x: auto;\n      max-width: 100%;\n    }\n\n    .responsive-wide-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-family: Arial, sans-serif;\n      min-width: 1200px; \/* Ensures horizontal scroll on smaller viewports *\/\n    }\n\n    .responsive-wide-table th,\n    .responsive-wide-table td {\n      border: 1px solid #ccc;\n      padding: 8px;\n      text-align: left;\n      font-size: 12px;\n      white-space: nowrap; \/* Prevent wrapping inside cells *\/\n    }\n\n    .responsive-wide-table th {\n      background-color: #f2f2f2;\n      font-weight: bold;\n    }\n\n    @media screen and (max-width: 1024px) {\n      .responsive-wide-table td {\n        font-size: 11px;\n      }\n    }\n  <\/style>\n<\/head>\n<body>\n    \n    <div class=\"table-container\">\n  <table class=\"responsive-wide-table\">\n    <thead>\n      <tr><th>PK<\/th><th>SK<\/th><th>Type<\/th><th>Name<\/th><th>Role<\/th><th>Status<\/th><th>CertificateExp<\/th><th>ProjectID<\/th><th>ScheduledDate<\/th><th>Model<\/th><th>SerialNum<\/th><th>Description<\/th><th>GSI1PK<\/th><th>GSI1SK<\/th><th>GSI2PK<\/th><th>GSI2SK<\/th><th>GSI3PK<\/th><th>GSI3SK<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n  <td data-label=\"PK\">USER#manager001<\/td>\n  <td data-label=\"SK\">USER#manager001<\/td>\n  <td data-label=\"Type\">Manager<\/td>\n  <td data-label=\"Name\">Alice Lee<\/td>\n  <td data-label=\"Role\">Manager<\/td>\n  <td data-label=\"Status\">Active<\/td>\n  <td data-label=\"CertificateExp\">N\/A<\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">USER#manager002<\/td>\n  <td data-label=\"SK\">USER#manager002<\/td>\n  <td data-label=\"Type\">Manager<\/td>\n  <td data-label=\"Name\">David Kim<\/td>\n  <td data-label=\"Role\">Manager<\/td>\n  <td data-label=\"Status\">Active<\/td>\n  <td data-label=\"CertificateExp\">N\/A<\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">USER#tech001<\/td>\n  <td data-label=\"SK\">USER#tech001<\/td>\n  <td data-label=\"Type\">Technician<\/td>\n  <td data-label=\"Name\">Bob Smith<\/td>\n  <td data-label=\"Role\">Technician<\/td>\n  <td data-label=\"Status\">Active<\/td>\n  <td data-label=\"CertificateExp\">2026-12-31<\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\">USER#manager001<\/td>\n  <td data-label=\"GSI1SK\">TECHNICIANS#tech001<\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">USER#tech002<\/td>\n  <td data-label=\"SK\">USER#tech002<\/td>\n  <td data-label=\"Type\">Technician<\/td>\n  <td data-label=\"Name\">Jenny Lopez<\/td>\n  <td data-label=\"Role\">Technician<\/td>\n  <td data-label=\"Status\">Suspended<\/td>\n  <td data-label=\"CertificateExp\">2025-11-15<\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\">USER#manager001<\/td>\n  <td data-label=\"GSI1SK\">TECHNICIANS#tech002<\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">USER#tech003<\/td>\n  <td data-label=\"SK\">USER#tech003<\/td>\n  <td data-label=\"Type\">Technician<\/td>\n  <td data-label=\"Name\">John Lopez<\/td>\n  <td data-label=\"Role\">Technician<\/td>\n  <td data-label=\"Status\">Active<\/td>\n  <td data-label=\"CertificateExp\">2025-11-15<\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\">USER#manager001<\/td>\n  <td data-label=\"GSI1SK\">TECHNICIANS#tech003<\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">DEVICE#D100<\/td>\n  <td data-label=\"SK\">USER#tech001<\/td>\n  <td data-label=\"Type\">Device<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">InUse<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\">ABC-1000<\/td>\n  <td data-label=\"SerialNum\">SN100-A<\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">DEVICE#D101<\/td>\n  <td data-label=\"SK\">USER#tech002<\/td>\n  <td data-label=\"Type\">Device<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Calibrating<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\">XYZ-2000<\/td>\n  <td data-label=\"SerialNum\">SN200-B<\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">DEVICE#D102<\/td>\n  <td data-label=\"SK\">USER#tech003<\/td>\n  <td data-label=\"Type\">Device<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Available<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\">ABC-2000<\/td>\n  <td data-label=\"SerialNum\">SN300-C<\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">DEVICE#D103<\/td>\n  <td data-label=\"SK\">USER#tech001<\/td>\n  <td data-label=\"Type\">Device<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Maintenance<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\">XYZ-2000<\/td>\n  <td data-label=\"SerialNum\">SN400-D<\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">DEVICE#D104<\/td>\n  <td data-label=\"SK\">USER#tech003<\/td>\n  <td data-label=\"Type\">Device<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">InUse<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\">ABC-1000<\/td>\n  <td data-label=\"SerialNum\">SN500-E<\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">WO#WO001<\/td>\n  <td data-label=\"SK\">USER#tech001<\/td>\n  <td data-label=\"Type\">WorkOrder<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Pending<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\">P001<\/td>\n  <td data-label=\"ScheduledDate\">2025-03-10<\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\">PROJECT#P001<\/td>\n  <td data-label=\"GSI2SK\">WO#WO001<\/td>\n  <td data-label=\"GSI3PK\">USER#tech001<\/td>\n  <td data-label=\"GSI3SK\">WO#WO001<\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">WO#WO002<\/td>\n  <td data-label=\"SK\">USER#tech002<\/td>\n  <td data-label=\"Type\">WorkOrder<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Complete<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\">P002<\/td>\n  <td data-label=\"ScheduledDate\">2025-02-28<\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\">PROJECT#P002<\/td>\n  <td data-label=\"GSI2SK\">WO#WO002<\/td>\n  <td data-label=\"GSI3PK\">USER#tech002<\/td>\n  <td data-label=\"GSI3SK\">WO#WO002<\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">WO#WO003<\/td>\n  <td data-label=\"SK\">USER#tech003<\/td>\n  <td data-label=\"Type\">WorkOrder<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Pending<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\">P003<\/td>\n  <td data-label=\"ScheduledDate\">2025-04-01<\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\">PROJECT#P003<\/td>\n  <td data-label=\"GSI2SK\">WO#WO003<\/td>\n  <td data-label=\"GSI3PK\">USER#tech003<\/td>\n  <td data-label=\"GSI3SK\">WO#WO003<\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">WO#WO004<\/td>\n  <td data-label=\"SK\">USER#tech003<\/td>\n  <td data-label=\"Type\">WorkOrder<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">InProgress<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\">P001<\/td>\n  <td data-label=\"ScheduledDate\">2025-04-15<\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\">PROJECT#P001<\/td>\n  <td data-label=\"GSI2SK\">WO#WO004<\/td>\n  <td data-label=\"GSI3PK\">USER#tech003<\/td>\n  <td data-label=\"GSI3SK\">WO#WO004<\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">WO#WO005<\/td>\n  <td data-label=\"SK\">USER#tech001<\/td>\n  <td data-label=\"Type\">WorkOrder<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\">Cancelled<\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\">P004<\/td>\n  <td data-label=\"ScheduledDate\">2025-03-20<\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\"><\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\">PROJECT#P004<\/td>\n  <td data-label=\"GSI2SK\">WO#WO005<\/td>\n  <td data-label=\"GSI3PK\">USER#tech001<\/td>\n  <td data-label=\"GSI3SK\">WO#WO005<\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">METADATA#TOLERANCE<\/td>\n  <td data-label=\"SK\">METADATA#TOL_025<\/td>\n  <td data-label=\"Type\">TOLERANCE<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\"><\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\">Standard Tolerance<\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">METADATA#TOLERANCE<\/td>\n  <td data-label=\"SK\">METADATA#TOL_001<\/td>\n  <td data-label=\"Type\">TOLERANCE<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\"><\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\">Precision Tolerance<\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">METADATA#TEST_METHOD<\/td>\n  <td data-label=\"SK\">METADATA#PullTest<\/td>\n  <td data-label=\"Type\">TEST_METHOD<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\"><\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\">Adhesion pull test method<\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n<tr>\n  <td data-label=\"PK\">METADATA#TEST_METHOD<\/td>\n  <td data-label=\"SK\">METADATA#DropTest<\/td>\n  <td data-label=\"Type\">TEST_METHOD<\/td>\n  <td data-label=\"Name\"><\/td>\n  <td data-label=\"Role\"><\/td>\n  <td data-label=\"Status\"><\/td>\n  <td data-label=\"CertificateExp\"><\/td>\n  <td data-label=\"ProjectID\"><\/td>\n  <td data-label=\"ScheduledDate\"><\/td>\n  <td data-label=\"Model\"><\/td>\n  <td data-label=\"SerialNum\"><\/td>\n  <td data-label=\"Description\">Impact drop test<\/td>\n  <td data-label=\"GSI1PK\"><\/td>\n  <td data-label=\"GSI1SK\"><\/td>\n  <td data-label=\"GSI2PK\"><\/td>\n  <td data-label=\"GSI2SK\"><\/td>\n  <td data-label=\"GSI3PK\"><\/td>\n  <td data-label=\"GSI3SK\"><\/td>\n<\/tr>\n\n    <\/tbody> \n  <\/table>\n  <\/div>\n<\/body>\n<\/html>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-61699da jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"61699da\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 6: Querying the Data<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0acbba jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"a0acbba\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">1.\tGet Technicians User Profile<\/h4>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6eb62c jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c6eb62c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong>Use Case:<\/strong> Technician logs into the app; we want their profile.<\/p><ul><li>PK: USER#tech001<\/li><li>SK: USER#tech001<\/li><li>Query: Query using PK = USER#tech001 AND SK = USER#tech001<\/li><\/ul><p>{<\/p><p>\u00a0 &#8220;KeyConditionExpression&#8221;: &#8220;PK = :pk AND SK = :sk&#8221;,<\/p><p>\u00a0 &#8220;ExpressionAttributeValues&#8221;: {<\/p><p>\u00a0\u00a0\u00a0 &#8220;:pk&#8221;: &#8220;USER#tech001&#8221;,<\/p><p>\u00a0\u00a0\u00a0 &#8220;:sk&#8221;: &#8220;USER#tech001&#8221;<\/p><p>\u00a0 }<\/p><p>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4cf77f8 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"4cf77f8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">2.\tList All Work Orders for a Specific Technician<\/h4>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-597c822 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"597c822\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong>Use Case<\/strong>: Technician sees their assigned WOs.<\/p><ul><li>GSI3 PK: USER#tech001<\/li><li>SK begins_with: WO#<\/li><\/ul><p>{<\/p><p>\u00a0 &#8220;IndexName&#8221;: &#8220;GSI3&#8221;,<\/p><p>\u00a0 &#8220;KeyConditionExpression&#8221;: &#8220;PK = :pk AND begins_with(SK, :skprefix)&#8221;,<\/p><p>\u00a0 &#8220;ExpressionAttributeValues&#8221;: {<\/p><p>\u00a0\u00a0\u00a0 &#8220;:pk&#8221;: &#8220;USER#tech001&#8221;,<\/p><p>\u00a0\u00a0\u00a0 &#8220;:skprefix&#8221;: &#8220;WO#&#8221;<\/p><p>\u00a0 }<\/p><p>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d48478 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"5d48478\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">3.\tList Work Orders Under a Project<\/h4>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8753e3f jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"8753e3f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong>Use Case<\/strong>: Manager filters WOs by project.<\/p><ul><li>GSI2 PK: PROJECT#P001<\/li><li>SK begins_with: WO#<\/li><\/ul><p>{<\/p><p>\u00a0 &#8220;IndexName&#8221;: &#8220;GSI2&#8221;,<\/p><p>\u00a0 &#8220;KeyConditionExpression&#8221;: &#8220;PK = :project AND begins_with(SK, :wo)&#8221;,<\/p><p>\u00a0 &#8220;ExpressionAttributeValues&#8221;: {<\/p><p>\u00a0\u00a0\u00a0 &#8220;:project&#8221;: &#8220;PROJECT#P001&#8221;,<\/p><p>\u00a0\u00a0\u00a0 &#8220;:wo&#8221;: &#8220;WO#&#8221;<\/p><p>\u00a0 }<\/p><p>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7b27a5 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"c7b27a5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Users (Admins & Inspectors)<\/h5>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43426cb elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"43426cb\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-user-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n  }\r\n\r\n  .responsive-user-table th,\r\n  .responsive-user-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-user-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 768px) {\r\n    .responsive-user-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-user-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-user-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n      border: none;\r\n      border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .responsive-user-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n      white-space: nowrap;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-user-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>Type<\/th>\r\n      <th>Name<\/th>\r\n      <th>Role<\/th>\r\n      <th>Status<\/th>\r\n      <th>LicenseExp<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#admin001<\/td>\r\n      <td data-label=\"SK\">USER#admin001<\/td>\r\n      <td data-label=\"Type\">Admin<\/td>\r\n      <td data-label=\"Name\">Alice Lee<\/td>\r\n      <td data-label=\"Role\">Admin<\/td>\r\n      <td data-label=\"Status\">Active<\/td>\r\n      <td data-label=\"LicenseExp\">N\/A<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#admin002<\/td>\r\n      <td data-label=\"SK\">USER#admin002<\/td>\r\n      <td data-label=\"Type\">Admin<\/td>\r\n      <td data-label=\"Name\">David Kim<\/td>\r\n      <td data-label=\"Role\">Admin<\/td>\r\n      <td data-label=\"Status\">Active<\/td>\r\n      <td data-label=\"LicenseExp\">N\/A<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#insp001<\/td>\r\n      <td data-label=\"SK\">USER#insp001<\/td>\r\n      <td data-label=\"Type\">Inspector<\/td>\r\n      <td data-label=\"Name\">Bob Smith<\/td>\r\n      <td data-label=\"Role\">Inspector<\/td>\r\n      <td data-label=\"Status\">Active<\/td>\r\n      <td data-label=\"LicenseExp\">2026-12-31<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#insp002<\/td>\r\n      <td data-label=\"SK\">USER#insp002<\/td>\r\n      <td data-label=\"Type\">Inspector<\/td>\r\n      <td data-label=\"Name\">Jenny Lopez<\/td>\r\n      <td data-label=\"Role\">Inspector<\/td>\r\n      <td data-label=\"Status\">Suspended<\/td>\r\n      <td data-label=\"LicenseExp\">2025-11-15<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ff65a2e elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"ff65a2e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Devices<\/h5>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-375cce9 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"375cce9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-device-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n  }\r\n\r\n  .responsive-device-table th,\r\n  .responsive-device-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-device-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 768px) {\r\n    .responsive-device-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-device-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-device-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n      border: none;\r\n      border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .responsive-device-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n      white-space: nowrap;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-device-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>Type<\/th>\r\n      <th>Model<\/th>\r\n      <th>SerialNum<\/th>\r\n      <th>Status<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"PK\">DEVICE#D100<\/td>\r\n      <td data-label=\"SK\">USER#insp001<\/td>\r\n      <td data-label=\"Type\">Device<\/td>\r\n      <td data-label=\"Model\">XRF-1000<\/td>\r\n      <td data-label=\"SerialNum\">SN100-A<\/td>\r\n      <td data-label=\"Status\">InUse<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">DEVICE#D101<\/td>\r\n      <td data-label=\"SK\">USER#insp002<\/td>\r\n      <td data-label=\"Type\">Device<\/td>\r\n      <td data-label=\"Model\">XRF-2000<\/td>\r\n      <td data-label=\"SerialNum\">SN200-B<\/td>\r\n      <td data-label=\"Status\">Calibrating<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">DEVICE#D102<\/td>\r\n      <td data-label=\"SK\">USER#insp003<\/td>\r\n      <td data-label=\"Type\">Device<\/td>\r\n      <td data-label=\"Model\">XRF-2000<\/td>\r\n      <td data-label=\"SerialNum\">SN300-C<\/td>\r\n      <td data-label=\"Status\">Available<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">DEVICE#D103<\/td>\r\n      <td data-label=\"SK\">USER#insp001<\/td>\r\n      <td data-label=\"Type\">Device<\/td>\r\n      <td data-label=\"Model\">XRF-2000<\/td>\r\n      <td data-label=\"SerialNum\">SN400-D<\/td>\r\n      <td data-label=\"Status\">Maintenance<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">DEVICE#D104<\/td>\r\n      <td data-label=\"SK\">USER#insp003<\/td>\r\n      <td data-label=\"Type\">Device<\/td>\r\n      <td data-label=\"Model\">XRF-1000<\/td>\r\n      <td data-label=\"SerialNum\">SN500-E<\/td>\r\n      <td data-label=\"Status\">InUse<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc7b278 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"fc7b278\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\"> Work Orders (WOs)<\/h5>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd713d9 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"bd713d9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-wo-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n  }\r\n\r\n  .responsive-wo-table th,\r\n  .responsive-wo-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-wo-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 768px) {\r\n    .responsive-wo-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-wo-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-wo-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n      border: none;\r\n      border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .responsive-wo-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n      white-space: nowrap;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-wo-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>Type<\/th>\r\n      <th>ProjectID<\/th>\r\n      <th>Status<\/th>\r\n      <th>ScheduledDate<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"PK\">WO#WO001<\/td>\r\n      <td data-label=\"SK\">USER#insp001<\/td>\r\n      <td data-label=\"Type\">WorkOrder<\/td>\r\n      <td data-label=\"ProjectID\">P001<\/td>\r\n      <td data-label=\"Status\">Pending<\/td>\r\n      <td data-label=\"ScheduledDate\">2025-03-10<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">WO#WO002<\/td>\r\n      <td data-label=\"SK\">USER#insp002<\/td>\r\n      <td data-label=\"Type\">WorkOrder<\/td>\r\n      <td data-label=\"ProjectID\">P002<\/td>\r\n      <td data-label=\"Status\">Complete<\/td>\r\n      <td data-label=\"ScheduledDate\">2025-02-28<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">WO#WO003<\/td>\r\n      <td data-label=\"SK\">USER#insp003<\/td>\r\n      <td data-label=\"Type\">WorkOrder<\/td>\r\n      <td data-label=\"ProjectID\">P003<\/td>\r\n      <td data-label=\"Status\">Pending<\/td>\r\n      <td data-label=\"ScheduledDate\">2025-04-01<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">WO#WO004<\/td>\r\n      <td data-label=\"SK\">USER#insp003<\/td>\r\n      <td data-label=\"Type\">WorkOrder<\/td>\r\n      <td data-label=\"ProjectID\">P001<\/td>\r\n      <td data-label=\"Status\">InProgress<\/td>\r\n      <td data-label=\"ScheduledDate\">2025-04-15<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">WO#WO005<\/td>\r\n      <td data-label=\"SK\">USER#insp001<\/td>\r\n      <td data-label=\"Type\">WorkOrder<\/td>\r\n      <td data-label=\"ProjectID\">P004<\/td>\r\n      <td data-label=\"Status\">Cancelled<\/td>\r\n      <td data-label=\"ScheduledDate\">2025-03-20<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05ad764 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"05ad764\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">GSI Entries (e.g., for Project and User Work Order Indexing)<\/h5>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e27b7ed elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"e27b7ed\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-gsi-wo-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n  }\r\n\r\n  .responsive-gsi-wo-table th,\r\n  .responsive-gsi-wo-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-gsi-wo-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 768px) {\r\n    .responsive-gsi-wo-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-gsi-wo-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-gsi-wo-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n      border: none;\r\n      border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .responsive-gsi-wo-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n      white-space: nowrap;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-gsi-wo-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>GSI Use Case<\/th>\r\n      <th>Notes<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"PK\">PROJECT#P001<\/td>\r\n      <td data-label=\"SK\">WO#WO001<\/td>\r\n      <td data-label=\"GSI Use Case\">GSI2<\/td>\r\n      <td data-label=\"Notes\">WO#WO001 under P001<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">PROJECT#P001<\/td>\r\n      <td data-label=\"SK\">WO#WO004<\/td>\r\n      <td data-label=\"GSI Use Case\">GSI2<\/td>\r\n      <td data-label=\"Notes\">WO#WO004 under P001<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#insp001<\/td>\r\n      <td data-label=\"SK\">WO#WO001<\/td>\r\n      <td data-label=\"GSI Use Case\">GSI3<\/td>\r\n      <td data-label=\"Notes\">All WOs for insp001<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#insp001<\/td>\r\n      <td data-label=\"SK\">WO#WO005<\/td>\r\n      <td data-label=\"GSI Use Case\">GSI3<\/td>\r\n      <td data-label=\"Notes\">All WOs for insp001<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">USER#insp003<\/td>\r\n      <td data-label=\"SK\">WO#WO004<\/td>\r\n      <td data-label=\"GSI Use Case\">GSI3<\/td>\r\n      <td data-label=\"Notes\">All WOs for insp003<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4791a41 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"4791a41\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Metadata (Room Types, Substrates, etc.)<\/h5>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ad6518 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"9ad6518\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n  .responsive-metadata-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n  }\r\n\r\n  .responsive-metadata-table th,\r\n  .responsive-metadata-table td {\r\n    border: 1px solid #ccc;\r\n    padding: 8px;\r\n    text-align: left;\r\n  }\r\n\r\n  .responsive-metadata-table th {\r\n    background-color: #f2f2f2;\r\n  }\r\n\r\n  @media screen and (max-width: 768px) {\r\n    .responsive-metadata-table thead {\r\n      display: none;\r\n    }\r\n\r\n    .responsive-metadata-table tr {\r\n      display: block;\r\n      margin-bottom: 15px;\r\n      border: 1px solid #ddd;\r\n      padding: 10px;\r\n    }\r\n\r\n    .responsive-metadata-table td {\r\n      display: block;\r\n      text-align: right;\r\n      position: relative;\r\n      padding-left: 50%;\r\n      border: none;\r\n      border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .responsive-metadata-table td::before {\r\n      content: attr(data-label);\r\n      position: absolute;\r\n      left: 10px;\r\n      width: 45%;\r\n      padding-left: 10px;\r\n      font-weight: bold;\r\n      text-align: left;\r\n      white-space: nowrap;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<table class=\"responsive-metadata-table\">\r\n  <thead>\r\n    <tr>\r\n      <th>PK<\/th>\r\n      <th>SK<\/th>\r\n      <th>Type<\/th>\r\n      <th>Description<\/th>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr>\r\n      <td data-label=\"PK\">METADATA#ROOMTYPE<\/td>\r\n      <td data-label=\"SK\">METADATA#Kitchen<\/td>\r\n      <td data-label=\"Type\">RoomType<\/td>\r\n      <td data-label=\"Description\">Kitchen area<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">METADATA#ROOMTYPE<\/td>\r\n      <td data-label=\"SK\">METADATA#Bathroom<\/td>\r\n      <td data-label=\"Type\">RoomType<\/td>\r\n      <td data-label=\"Description\">Bathroom area<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">METADATA#SUBSTRATE<\/td>\r\n      <td data-label=\"SK\">METADATA#Concrete<\/td>\r\n      <td data-label=\"Type\">Substrate<\/td>\r\n      <td data-label=\"Description\">Concrete construction<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">METADATA#SUBSTRATE<\/td>\r\n      <td data-label=\"SK\">METADATA#Wood<\/td>\r\n      <td data-label=\"Type\">Substrate<\/td>\r\n      <td data-label=\"Description\">Wood substrate<\/td>\r\n    <\/tr>\r\n    <tr>\r\n      <td data-label=\"PK\">METADATA#COMPONENT<\/td>\r\n      <td data-label=\"SK\">METADATA#WallPanel<\/td>\r\n      <td data-label=\"Type\">Component<\/td>\r\n      <td data-label=\"Description\">Wall panel material<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77f57cc elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"77f57cc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li><strong>Query Inspector Users Sorted by License Expiry<\/strong>: Using GSI1, query all users with the &#8220;Inspector&#8221; type and sort by license expiry.<\/li><li><strong>Get All Work Orders for a Project<\/strong>: Using GSI2, list all work orders under a particular project ID and apply filters as necessary.<\/li><li><strong>Get Devices for a User<\/strong>: Query by USER#&lt;username&gt; as the partition key and sort by device ID.<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aee1132 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"aee1132\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Lessons Learned<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f23f633 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"f23f633\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Pros<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0dfce54 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"0dfce54\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li><strong>Blazing-fast queries:<\/strong> With access-pattern-based keys and no joins, query latency is incredibly low.<\/li><li><strong>Simplified scaling:<\/strong> DynamoDB\u2019s architecture handles throughput spikes and high concurrency with ease.<\/li><li><strong>Cost-effective:<\/strong> You pay for what you use\u2014queries, reads, and writes\u2014without managing multiple tables or servers.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28f3751 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"28f3751\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Challenges<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-110c639 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"110c639\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li><strong>Steep learning curve:<\/strong> Designing a single-table schema requires you to know your access patterns <em>before<\/em> you write your first line of code.<\/li><li><strong>Debugging complexity:<\/strong> With all data types in one table, naming conventions and key discipline are critical to avoid chaos.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d8abc63 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"d8abc63\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">When to Use (and When Not to Use) Single Table Design<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c40fe9 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"3c40fe9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">When It Makes Sense<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-085795a jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"085795a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li><strong>Well-defined access patterns<\/strong>: Ideal when you know exactly how data will be queried.<\/li><li><strong>High-performance needs<\/strong>: Perfect for apps that require low-latency responses and scalability.<\/li><li><strong>Minimizing joins<\/strong>: Works great if your data is related and you want to reduce complex joins.<\/li><li><strong style=\"font-size: 16px;\">Tightly linked entities<\/strong><span style=\"font-size: 16px;\">: Best when entities (e.g., users, devices) share strong relationships.<\/span><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7302a9f jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"7302a9f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">When It\u2019s Not Ideal<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c5047dc jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c5047dc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li><strong>Evolving data access patterns<\/strong>: Avoid if your app is still figuring out how data will be queried.<\/li><li><strong>Complex relational queries<\/strong>: Not suitable if you rely on complex joins and foreign keys.<\/li><li><strong>Independent data types<\/strong>: If entities don\u2019t interact much, separate tables might be simpler.<\/li><li><strong>Frequent ad-hoc querying<\/strong>: Limited flexibility for exploratory or analytical queries.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ad4289 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"1ad4289\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7da755d jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"7da755d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Single Table Design in DynamoDB is a powerful strategy that simplifies data modeling while optimizing performance for real-time applications. By unifying all data into a single table and designing keys and GSIs around your application\u2019s access patterns, you can significantly improve query efficiency, reduce operational complexity, and better align with how DynamoDB is built to scale.<\/p><p>AWS recommends this approach because it embraces <strong>access-pattern-first design<\/strong>, making your application leaner, faster, and more scalable in the long run.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Table of Contents Introduction As web applications scale and diversify, traditional relational database models often become bottlenecks for performance and agility. Enter DynamoDB with Single Table Design (STD)\u2014a strategy that aligns your data model with actual access patterns, delivering ultra-fast, scalable performance. In this blog, we\u2019ll walk through applying STD in a real-world web app &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/techpearl.com\/1719395789229\/single-table-design-in-dynamodb\/\"> <span class=\"screen-reader-text\">Real-World Implementation of Single Table Design in AWS DynamoDB<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":4,"featured_media":20424,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63,23],"tags":[],"class_list":["post-20294","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-web-development"],"_links":{"self":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts\/20294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/comments?post=20294"}],"version-history":[{"count":60,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts\/20294\/revisions"}],"predecessor-version":[{"id":20472,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts\/20294\/revisions\/20472"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/media\/20424"}],"wp:attachment":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/media?parent=20294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/categories?post=20294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/tags?post=20294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}