hana-cli
Version:
HANA Developer Command Line Interface
368 lines (284 loc) • 10.1 kB
Markdown
# erdDiagram
> Command: `erdDiagram`
> Category: **Analysis Tools**
> Status: Early Access
## Description
Generate Entity Relationship (ER) diagrams from your database schema. ER diagrams provide a visual representation of your data structure, showing how tables relate to each other and what data they contain.
### What is an ER Diagram (ERD)?
An **Entity Relationship Diagram (ERD)** is a visual representation of database structure that shows:
- **Entities**: Tables/objects in the database, drawn as rectangles
- **Attributes**: Columns/fields within each entity
- **Relationships**: Connections between entities showing how they relate
- **Cardinality**: The nature of relationships (one-to-one, one-to-many, many-to-many)
Example structure:
```text
CUSTOMERS ──────┐ (one customer)
│ can place many
├─── ORDERS ──────┐ (one order)
│ │ contains many
│ └─── ORDER_ITEMS ──── PRODUCTS
│
Places Contains
```
### What Do You Use ERD Diagrams For?
#### 1. System Understanding & Documentation
- Visualize the complete database structure at a glance
- Communicate data model to team members and stakeholders
- Create documentation for new developers joining the project
- Maintain up-to-date architecture diagrams as schemas evolve
#### 2. Database Design & Planning
- Plan new database schemas before implementation
- Validate relationships between entities
- Identify missing relationships or anomalies
- Ensure proper normalization and structure
- Design views for common data combinations
#### 3. Application Development
- Helps developers understand data structure when writing queries
- Clarifies which tables to join for specific data requirements
- Identifies potential performance issues (too many joins)
- Guides ORM model design (Entity Framework, Hibernate, etc.)
- Prevents mistakes in query development
#### 4. Data Migration & Integration
- Map source and target schemas during data migration
- Identify equivalent tables and fields when integrating systems
- Validate data transformation logic
- Plan extraction queries for ETL processes
- Compare schemas between environments (dev, test, prod)
#### 5. Performance & Optimization
- Identifies tables with many relationships (potential bottlenecks)
- Helps spot unnecessary complexity in data model
- Reveals missing denormalization opportunities
- Shows which tables are joined frequently (candidates for indexing)
- Guides partitioning strategy for large tables
#### 6. Data Governance & Quality
- Documents data lineage and relationships
- Identifies critical data dependencies
- Shows impact analysis when modifying schemas
- Helps implement data quality rules
- Supports compliance documentation requirements
#### 7. Troubleshooting & Analysis
- Quickly understand relationships when investigating data issues
- Trace problems through related tables
- Identify data consistency violations
- Review foreign key constraints
- Debug query performance issues by visualizing join paths
### Key Components in an ERD
**Entities** - Represent tables:
```text
┌──────────────┐
│ CUSTOMERS │
├──────────────┤
│ CUSTOMER_ID │
│ NAME │
│ EMAIL │
└──────────────┘
```
**Relationships** - Show how entities connect:
- `1:1` - One-to-one relationship
- `1:N` - One-to-many relationship (most common)
- `M:N` - Many-to-many relationship
**Cardinality Notation**:
- `||` - One (mandatory)
- `o|` - Zero or one
- `||` - Many
- `|o` - Zero or many
### Common Use Cases
#### Scenario 1: New Developer Onboarding
```bash
# Generate a diagram for new developer to understand the schema
hana-cli erdDiagram --schema SALES --format mermaid --output sales-schema.md
```
#### Scenario 2: Migration Planning
```bash
# Export current schema structure as reference
hana-cli erdDiagram --schema LEGACY_SYSTEM --output legacy-schema.json --format json
```
#### Scenario 3: Documentation Update
```bash
# Generate PlantUML diagram for inclusion in architecture docs
hana-cli erdDiagram --schema PRODUCTION --showColumns --format plantuml --output arch-diagram.puml
```
#### Scenario 4: Specific Subsystem
```bash
# Diagram only billing-related tables
hana-cli erdDiagram -s ACCOUNTING -t INVOICES,INVOICE_ITEMS,CUSTOMERS,PAYMENTS
```
## Syntax
```bash
hana-cli erdDiagram [options]
```
## Aliases
- `erd`
- `er`
- `schema-diagram`
- `entityrelation`
## Command Diagram
```mermaid
graph TD
A["🔷 hana-cli erdDiagram"]
A --> B["📋 Arguments"]
B --> B1["Schema: -s, --schema"]
B1 --> B2["Tables: -t, --tables"]
B2 --> C["🔌 Connection Parameters"]
C --> C1["-a, --admin"]
C1 --> C2["--conn"]
C2 --> D["⚙️ Options"]
D --> D1["--showCardinality, -c"]
D1 --> D2["--showColumns, --cols"]
D2 --> D3["--excludeColumns, --ec"]
D3 --> E["📤 Output"]
E --> E1["-o, --output"]
E1 --> E2["-f, --format"]
E2 --> E3["-p, --profile"]
E3 --> F["🔍 Troubleshooting"]
F --> F1["--disableVerbose, --quiet"]
F1 --> F2["-d, --debug"]
F2 --> G["✅ Help: -h, --help"]
style A fill:#0070C0,color:#fff,stroke:#fff,stroke-width:2px
style G fill:#51CF66,color:#fff,stroke:#fff,stroke-width:2px
```
## Parameters
### Positional Arguments
This command has no positional arguments.
### Options
| Option | Alias | Type | Default | Description |
| --- | --- | --- | --- | --- |
| `--schema` | `-s` | string | **CURRENT_SCHEMA** | Schema to diagram |
| `--tables` | `-t` | string | optional | Comma-separated list of tables (empty for all) |
| `--output` | `-o` | string | optional | Output file for diagram |
| `--format` | `-f` | string | mermaid | Diagram format (mermaid, plantuml, graphviz, json) |
| `--showCardinality` | `-c` | boolean | true | Show relationship cardinality |
| `--showColumns` | `--cols` | boolean | true | Show table columns in diagram |
| `--excludeColumns` | `--ec` | string | optional | Comma-separated columns to exclude |
| `--profile` | `-p` | string | optional | CDS Profile |
| `--help` | `-h` | boolean | - | Show help message |
### Connection Parameters
| Option | Alias | Type | Default | Description |
| --- | --- | --- | --- | --- |
| `--admin` | `-a` | boolean | `false` | Connect via admin (default-env-admin.json) |
| `--conn` | - | string | - | Connection filename to override default-env.json |
### Troubleshooting
| Option | Alias | Type | Default | Description |
| --- | --- | --- | --- | --- |
| `--disableVerbose` | `--quiet` | boolean | `false` | Disable verbose output - removes extra output mainly intended for human-readable usage |
| `--debug` | `-d` | boolean | `false` | Debug hana-cli itself by adding lots of intermediate details |
For a complete list of parameters and options, use:
```bash
hana-cli erdDiagram --help
```
## Output Formats
### Mermaid Format (Default)
Generates a Mermaid ER diagram in markdown format:
```mermaid
erDiagram
CUSTOMERS ||--o{ ORDERS : places
ORDERS ||--|{ ORDER_ITEMS : contains
PRODUCTS ||--o{ ORDER_ITEMS : in
CUSTOMERS {
int CUSTOMER_ID PK
string NAME
string EMAIL
string PHONE
}
ORDERS {
int ORDER_ID PK
int CUSTOMER_ID FK
date ORDER_DATE
decimal TOTAL_AMOUNT
}
ORDER_ITEMS {
int ORDER_ITEM_ID PK
int ORDER_ID FK
int PRODUCT_ID FK
int QUANTITY
decimal UNIT_PRICE
}
PRODUCTS {
int PRODUCT_ID PK
string PRODUCT_NAME
decimal PRICE
int STOCK_QUANTITY
}
```
### PlantUML Format
Generates PlantUML diagram code:
```text
entity CUSTOMERS {
* CUSTOMER_ID : int <<generated>>
--
NAME : string
EMAIL : string
PHONE : string
}
entity ORDERS {
* ORDER_ID : int <<generated>>
--
CUSTOMER_ID : int <<FK>>
ORDER_DATE : date
TOTAL_AMOUNT : decimal
}
entity ORDER_ITEMS {
* ORDER_ITEM_ID : int <<generated>>
--
ORDER_ID : int <<FK>>
PRODUCT_ID : int <<FK>>
QUANTITY : int
UNIT_PRICE : decimal
}
CUSTOMERS ||--o{ ORDERS : places
ORDERS ||--|{ ORDER_ITEMS : contains
```
### GraphViz Format
Generates GraphViz DOT format for visualization:
```text
digraph schema {
rankdir=LR;
CUSTOMERS [label="CUSTOMERS|CUSTOMER_ID|NAME|EMAIL|PHONE"];
ORDERS [label="ORDERS|ORDER_ID|CUSTOMER_ID|ORDER_DATE|TOTAL_AMOUNT"];
ORDER_ITEMS [label="ORDER_ITEMS|ORDER_ITEM_ID|ORDER_ID|PRODUCT_ID|QUANTITY|UNIT_PRICE"];
PRODUCTS [label="PRODUCTS|PRODUCT_ID|PRODUCT_NAME|PRICE|STOCK_QUANTITY"];
CUSTOMERS -> ORDERS [label="1..n"];
ORDERS -> ORDER_ITEMS [label="1..n"];
PRODUCTS -> ORDER_ITEMS [label="1..n"];
}
```
### JSON Format
Generates structured JSON with table and relationship metadata:
```json
{
"schema": "MYSCHEMA",
"tables": [
{
"name": "CUSTOMERS",
"columns": [
{"name": "CUSTOMER_ID", "type": "INT", "isPrimaryKey": true},
{"name": "NAME", "type": "VARCHAR", "isPrimaryKey": false},
{"name": "EMAIL", "type": "VARCHAR", "isPrimaryKey": false}
]
}
],
"relationships": [
{
"from": "CUSTOMERS",
"to": "ORDERS",
"foreignKey": "CUSTOMER_ID",
"cardinality": "1..n"
}
]
}
```
## Examples
### Basic Usage
```bash
hana-cli erdDiagram --schema MYSCHEMA --format mermaid --output erd.md
```
## Related Commands
- `calcViewAnalyzer` - Analyze calculation view performance and metadata
- `schemaClone` - Clone schema structure and related artifacts
- `graphWorkspaces` - Work with graph workspace metadata and relationships
See the [Commands Reference](../all-commands.md) for other commands in this category.
## See Also
- [Category: Analysis Tools](..)
- [All Commands A-Z](../all-commands.md)