Persistence Layer¶
The persistence layer forms the heart of crunch_uml: a standardized metaschema stored via SQLAlchemy ORM with multi-version support.
Architecture¶
graph TB
subgraph Persistentie
DB["Database (db.py)<br/>Singleton + SQLAlchemy 2.0"]
SCH["Schema (schema.py)<br/>Multi-version isolation"]
ORM["ORM Models"]
end
DB --> SCH
SCH --> ORM
subgraph Backends
SQLite[("SQLite")]
PG[("PostgreSQL")]
MySQL[("MySQL")]
end
DB --> SQLite & PG & MySQL
Database Class¶
Singleton implementation that guarantees one active connection per process.
Database(db_url=const.DATABASE_URL, db_create=False)
.session # SQLAlchemy session
.engine # SQLAlchemy engine
.commit() # Commit changes
.rollback() # Rollback transaction
.close() # Close session
.add(obj) # Add new object
.save(obj) # Save/merge object
Default database URL: sqlite:///crunch_uml.db
Schema Class¶
Wrapper around a logical schema in the database. Enables multi-version models in one database via schema_id on all tables.
Schema(database, schema_name=const.DEFAULT_SCHEMA)
.add(obj, recursive=False) # Add to schema
.save(obj, recursive=False) # Save/merge in schema
.get_package(id) # Get package
.get_class(id) # Get class
.get_all_packages() # All packages
.get_all_classes() # All classes
.count_package() # Count packages
.clean() # Delete everything in schema
ORM Models¶
All models inherit from UML_Generic and optionally UMLBase and UMLTags* mixins. See Data Model for the complete entity-relationship diagram.
Model Overview¶
| Model | Table | Important Fields |
|---|---|---|
| Package | packages |
id, name, parent_package_id, schema_id |
| Class | classes |
id, name, package_id, is_datatype |
| Attribute | attributes |
id, name, clazz_id, primitive, enumeratie_id |
| Association | associations |
id, src_class_id, dst_class_id, multiplicities |
| Generalization | generalizations |
id, superclass_id, subclass_id |
| Enumeration | enumeraties |
id, name, package_id |
| EnumerationLiteral | enumeratie_literals |
id, name, enumeratie_id |
| Diagram | diagrams |
id, name, package_id |
Junction Tables¶
| Table | Connects |
|---|---|
diagram_classes |
Diagram ↔ Class |
diagram_enumerations |
Diagram ↔ Enumeration |
diagram_associations |
Diagram ↔ Association |
diagram_generalizations |
Diagram ↔ Generalization |
Mixins¶
graph TB
UG["UML_Generic<br/>id, schema_id, name, definitie,<br/>bron, toelichting, created, modified, stereotype"]
UB["UMLBase<br/>author, version, phase, status,<br/>uri, visibility, alias"]
UTC["UMLTagsClazz<br/>MIM tags, GEMMA tags"]
UTA["UMLTagsAttr<br/>Attribute-specific tags"]
UG --> UB
UB --> UTC
UB --> UTA
Planned Extensions¶
Caching & Validation Engine
Cache mechanism for stored validations so that not every validation has to run completely from scratch.
Indexing Techniques
Full-text indexing, fuzzy indexing, and AI-based indexing for more efficient queries on large models.
Centralized Repository
Hierarchically documented metaschema with unique identifiers for relationships.