Data Model
Lexical.cloud curates cloud products into hierarchical groups, also known as a taxonomy. Taxonomy terms are populated by metadata in each product, product tier and glossary entry.
Entry Type | Description | Directory in product catalog |
---|---|---|
Product | Documented cloud products | products/{service}/{provider}/{product} |
Product Tier | Tiers of cloud products | products/{service}/{provider}/{product}/{tier}/{tierProduct} |
Glossary | Terms in product taxonomy | glossary/ |
Help us improve!
Use “Create docs issue” to submit ideas for improving the below illustrations. Thanks!Taxonomy Group
Terms for each group originate in products. The glossary independently defines a term.
erDiagram
GLOSSARY |o..|| SERVICE : defines
GLOSSARY |o..|| PROVIDER : defines
GLOSSARY |o..|| DOMAIN : defines
GLOSSARY |o..|| CATEGORY : defines
GLOSSARY |o..|| FEATURE : defines
GLOSSARY |o..|| LABEL : defines
SERVICE ||--o{ PRODUCT : originates
PROVIDER ||--o{ PRODUCT : originates
DOMAIN ||--o{ PRODUCT : originates
CATEGORY ||--o{ PRODUCT : originates
FEATURE ||--o{ PRODUCT : originates
FEATURE ||--o{ PRODUCT-TIER : originates
LABEL ||--o{ PRODUCT : originates
LABEL ||--o{ PRODUCT-TIER : originates
PRODUCT ||--o{ PRODUCT-TIER : has
PRODUCT-TIER ||--o{ PRODUCT-TIER : has
Group | Description | Example Terms |
---|---|---|
Service | Purpose of a cloud product | Monitor, Governance |
Provider | Originator of a cloud product | AWS, Azure, Google Cloud |
Domain | Collection of services with intersecting categories | Observability, Modernization |
Category | Group specific to a domain and/or service | Auditing, Dashboards |
Feature | Specific functionality from a product | Alerts, Reports |
Label | Attribute of a product | Deprecated |
Example Metadata
Let’s explore product entries for monitoring products:
---
services:
- "monitor"
providers:
- "aws"
domains:
- "observability"
categories:
- "telemetry data"
features:
- "alerts"
- "open telemetry"
title: "Amazon CloudWatch"
linkTitle: "Amazon CloudWatch"
---
---
services:
- "monitor"
providers:
- "azure"
domains:
- "observability"
categories:
- "telemetry data"
- "auditing"
features:
- "alerts"
title: "Azure Monitor"
linkTitle: "Azure Monitor"
---
---
services:
- "monitor"
providers:
- "gcp"
domains:
- "observability"
categories:
- "dashboards"
- "telemetry data"
features:
- "alerts"
- "open telemetry"
title: "Google Cloud Monitoring"
linkTitle: "Google Cloud Monitoring"
---
And glossary entries that support them:
---
title: "Observability"
linkTitle: "observability"
definitionLink: "https://glossary.cncf.io/observability/"
services:
- "monitor"
---
---
title: "Telemetry Data"
linkTitle: "telemetry data"
definitionLink: "https://en.wikipedia.org/wiki/Telemetry"
services:
- "monitor"
domains:
- "observability"
---
---
title: "Open Telemetry"
linkTitle: "open telemetry"
domains:
- "observability"
---
---
title: "Alerts"
linkTitle: "alerts"
definitionLink: "https://en.wikipedia.org/wiki/Alert_messaging"
---
Notice the relationship of glossary linkTitle
with the product entries.
What about product tier entries?
The products above did not have any product tiers, but examples would be:
---
features:
- "example feature"
labels:
- "example label"
title: "Product Name (model name)"
linkTitle: "Model Name"
productHierarchyTier: "model"
---
---
features:
- "example feature"
labels:
- "example label"
title: "Product Component Name"
linkTitle: "Component Name"
productHierarchyTier: "component"
---
Notice that services, categories and domains were not listed. They’re inherited from the product. It’s possible to list additional entries for all groups, but that is not illustrated on this page.
Products vs Product Tiers
Difference | Product | Product Tier |
---|---|---|
Location | {product-path}/product-id.md |
{product-path}/product-id/tier-id/tier-product-id.md |
Attribute | N/A | productHierarchyTier="model" or "component" |
Groups | can inherit from glossary | also inherits from product |
Models vs Components
Difference | Model | Component |
---|---|---|
Purpose | Types of a product | Sub-products |
Nesting | Under product or component | Under product |
Term Relations
The glossary optionally relates each term to ancestor groups. Many products reference each term.
erDiagram
PRODUCT ||--o{ PRODUCT-TIER : has
GLOSSARY |o..|| SERVICE : defines
GLOSSARY |o..|| PROVIDER : defines
GLOSSARY |o..|| DOMAIN : defines
GLOSSARY |o..|| CATEGORY : defines
GLOSSARY |o..|| FEATURE : defines
GLOSSARY |o..|| LABEL : defines
SERVICE ||--o{ PRODUCT : relates
PROVIDER ||--o{ PRODUCT : creates
DOMAIN ||--o{ PRODUCT : relates
CATEGORY ||--o{ PRODUCT : relates
FEATURE ||--o{ PRODUCT : relates
FEATURE ||--o{ PRODUCT-TIER : relates
LABEL ||--o{ PRODUCT : describes
LABEL ||--o{ PRODUCT-TIER : describes
DOMAIN }|--o{ DOMAIN : relates
DOMAIN ||--o{ SERVICE : relates
CATEGORY ||--o{ DOMAIN : relates
CATEGORY }|--o{ CATEGORY: relates
FEATURE ||--o{ CATEGORY : relates
Group | Ancestors | Descendants |
---|---|---|
Service | N/A | Domain, Category, Feature |
Provider | N/A | N/A |
Domain | Domain | Service, Category, Feature |
Category | Domain, Service, Category | Feature |
Feature | Domain, Service, Category | N/A |
Label | N/A | N/A |
Domain and Category can have subgroups. i.e. container orchestrator
and kubernetes
Logical Data Model
Terms referenced in product entries inhert their ancestors from the glossary.
erDiagram
GLOSSARY |o..|| PROVIDER : defines
GLOSSARY |o..|| SERVICE : defines
GLOSSARY |o..|| DOMAIN : defines
GLOSSARY |o..|| CATEGORY : defines
GLOSSARY |o..|| FEATURE : defines
GLOSSARY |o..|| LABEL : defines
GLOSSARY {
string title
string linkTitle PK
url definitionLink
}
SERVICE }|--|{ PRODUCT : relates
SERVICE }o--o{ DOMAIN : relates
SERVICE {
string term PK
}
PROVIDER }|--|{ PRODUCT : creates
PROVIDER {
string term PK
}
DOMAIN }|--|{ PRODUCT : relates
DOMAIN }o--o{ CATEGORY : relates
DOMAIN }|--o{ DOMAIN : relates
DOMAIN {
string term PK
array services FK
array domains FK
}
CATEGORY }|--|{ PRODUCT : relates
CATEGORY }o--o{ FEATURE : relates
CATEGORY }|--o{ CATEGORY: relates
CATEGORY {
string term PK
array services FK
array domains FK
array categories FK
}
FEATURE }o--o{ PRODUCT : relates
FEATURE }o--o{ PRODUCT-TIER : relates
FEATURE {
string term PK
array services FK
array domains FK
array categories FK
}
LABEL }o--o{ PRODUCT : describes
LABEL }o--o{ PRODUCT-TIER : describes
LABEL {
string term PK
}
PRODUCT {
string title
string linkTitle
array services FK
array providers FK
array domains FK
array categories FK
array features FK
array labels FK
}
PRODUCT ||--o{ PRODUCT-TIER : relates
PRODUCT-TIER ||--o{ PRODUCT-TIER : relates
PRODUCT-TIER {
string title
string linkTitle
string productHierarchyTier
string parentProductTier
array features FK
array labels FK
}
The model flexibility incurs some complexity and potential of duplicate relationships.
Physical Data Model
Each product specifes minimal taxonomy terms and infers relationships from the glossary.
erDiagram
GLOSSARY }o--o{ GLOSSARY : relates
GLOSSARY {
string title "Full title of term"
string linkTitle PK "Term name as referenced by products"
url definitionLink "Optional link to definition"
array services FK "List of terms for related services"
array domains FK "List of terms for related domains"
array categories FK "List of terms for related categories"
}
GLOSSARY }o..o{ PRODUCT : relates
PRODUCT ||--o{ PRODUCT : "has tiers"
PRODUCT {
string productHierarchyPath PK "Nested path to product or tier"
string title "Full title of entry"
string linkTitle "Short title of entry"
array services FK "List of terms for related services"
array providers FK "List of terms for related providers"
array domains FK "List of terms for related domains"
array categories FK "List of terms for related categories"
array features FK "List of terms for related features"
array labels FK "List of terms for related labels"
string productHierarchyTier "Optional tier of product hierarchy "
}
Each product and tier entry should minimally list or inherit a service, domain and category. The productHierarchyPath
is not an actual column but the physical path in the directory tree.