Ga naar inhoud

Persistentielaag

De persistentielaag vormt het hart van crunch_uml: een gestandaardiseerd metaschema opgeslagen via SQLAlchemy ORM met multi-versie ondersteuning.

Architectuur

graph TB
    subgraph Persistentie
        DB["Database (db.py)<br/>Singleton + SQLAlchemy 2.0"]
        SCH["Schema (schema.py)<br/>Multi-versie isolatie"]
        ORM["ORM Modellen"]
    end

    DB --> SCH
    SCH --> ORM

    subgraph Backends
        SQLite[("SQLite")]
        PG[("PostgreSQL")]
        MySQL[("MySQL")]
    end

    DB --> SQLite & PG & MySQL

Database klasse

Singleton-implementatie die één actieve verbinding per proces garandeert.

Database(db_url=const.DATABASE_URL, db_create=False)
    .session          # SQLAlchemy session
    .engine           # SQLAlchemy engine
    .commit()         # Commit wijzigingen
    .rollback()       # Rollback transactie
    .close()          # Sluit session
    .add(obj)         # Voeg nieuw object toe
    .save(obj)        # Save/merge object

Default database URL: sqlite:///crunch_uml.db

Schema klasse

Wrapper rondom een logisch schema in de database. Maakt multi-versie modellen in één database mogelijk via schema_id op alle tabellen.

Schema(database, schema_name=const.DEFAULT_SCHEMA)
    .add(obj, recursive=False)           # Voeg toe aan schema
    .save(obj, recursive=False)          # Save/merge in schema
    .get_package(id)                     # Haal package op
    .get_class(id)                       # Haal class op
    .get_all_packages()                  # Alle packages
    .get_all_classes()                   # Alle classes
    .count_package()                     # Tel packages
    .clean()                             # Verwijder alles in schema

ORM-modellen

Alle modellen erven van UML_Generic en optioneel UMLBase en UMLTags* mixins. Zie Datamodel voor het volledige entity-relationship diagram.

Modeloverzicht

Model Tabel Belangrijkste velden
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, multipliciteiten
Generalization generalizations id, superclass_id, subclass_id
Enumeratie enumeraties id, name, package_id
EnumerationLiteral enumeratie_literals id, name, enumeratie_id
Diagram diagrams id, name, package_id

Junction Tables

Tabel Koppelt
diagram_classes Diagram ↔ Class
diagram_enumerations Diagram ↔ Enumeratie
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/>Attribuut-specifieke tags"]

    UG --> UB
    UB --> UTC
    UB --> UTA

Beoogde uitbreidingen

Caching & Validatie Engine

Cache-mechanisme voor opgeslagen validaties zodat niet elke validatie volledig opnieuw hoeft te draaien.

Indexeringstechnieken

Full-text indexing, fuzzy indexing, en AI-gebaseerde indexing voor efficiëntere queries op grote modellen.

Gecentraliseerde Repository

Hiërarchisch gedocumenteerd metaschema met unique identifiers voor relaties.