balkje gen website
Switch to the english website.

Modelleer tip 4 : READ en Performance 1


READ van attributen van twee Entity Types

Je leert:
     - hoe wordt DM en DSL gebruikt bij READ-statements?
     - welke SQL-code wordt gegenereerd uit een READ-statement?
     - hoeveel tabellen worden benaderd bij een READ van twee entity types? 

Gebruik je READ statements om data uit de DB te lezen? Wees dan op je hoede, want onhandig modelleren van READ-statements heeft geregeld een slechte performance tot gevolg. 
Vele factoren hebben invloed op de performance van een applicatie die gegevens uit een DB haalt. Enkele zijn:
- de structuur van het Data Model,
- de bouw van tabellen en indexen van de database,
- de views in het Action Diagram,
- de structuur van READ-statement(s).

In deze modelleertip kijken we naar de manier waarop de code wordt gegenereerd vanuit de specificaties in het Gen-model.
Realiseer je dat het READ gebruik maakt van het Data Model. De gegenereerde code maakt gebruik van de in de DSL genoemde tabel- en kolomnamen van de database.
In het vervolg wordt achtereenvolgens gekeken naar:
1. het Data Model (DM) en de hieruit getransformeerde Data Structure List (DSL)
2. READ-statements en de views in het action diagram bij het opvragen van
    a. Customer gegevens,
    b. Order gegevens en
    c. Customer-Order gegevens

1. Data Model en Data Structure List
Het Data Model (DM in de Analysis tool) is een model van de business data, niet de structuur van de tabellen in de database.  Door de Transformation wordt het Data Model omgezet in de Data Structure List (DSL). De DSL toont de structuur van de databasetabellen waarin de data worden opgeslagen. 

Elk element in het DM heeft een overeenkomstig element in de DSL. Hieronder staan enkele van de belangrijkste.

Data Model ==> Data Structure List
entity type ==> table
attribute ==> column
identifier ==> primary index
relationship ==> foreign key column


Dit principe is voor elk DBMS gelijk. Hieronder zie je in figuur 1 hoe het DM van twee entity types is omgezet in de DSL.


figuur 1.

Elke entity type wordt als tabel geïmplementeerd en elk attribuut wordt een column in een tabel.
De 1:n relatie wordt geïmplementeerd door de (primary) identifier van het entity type van de 1-kant als foreign-key column op te nemen in de tabel van de n-kant. Zie de figuur 2 hieronder.


  figuur 2.

2. Ophalen van Customer gegevens
Om de gegevens van een customer uit de DB op te halen wordt een READ-statement gebruikt:  READ customer.
Een READ-statement resulteert bij codegeneratie in een SQL-statement. Zo zal READ customer resulteren in een SELECT .... FROM CUSTOMER. 
Niet altijd worden alle atributen van de gelezen entity type aan de applicatie afgeleverd. Slechts de identifier(s) en de attributen die in de entity action view zijn opgenomen, worden gelezen. Zie figuur 3 hieronder.


figuur 3.

N.B. Wil je de gegenereerde SQL bekijken? Selecteer in het  Generation window de regel van het action diagram en kies daarna Diagram, Show, Source. Of u daar de statische of dynamische vorm van SQL ziet, is afhankelijk van de generatie-omgeving die u gebruikt.

3. Ophalen van ordergegevens
READ order genereert een soortgelijke select voor de order tabel. Als alle attributen in de entity action view staan, zullen ze alle de waarde uit de tabel krijgen.

SELECT
            NUMBER
            ORDER_DATE
            ......
            ......
FROM
            ORDER



4. Ophalen van customer- én ordergegevens
Lezen van customer- én ordergegevens kan op twee manieren:
1. Twee READ's: READ customer gevolgd door READ order
    Na generatie zijn er twee Select statements, één voor customer en één voor order.
    Beide tabellen worden gelezen op de wijze die hierboven is besproken.
2. Eén gecombineerde READ: READ customer,order
    Na generatie is er één Select statement. Of er ook twee of slechts één tabel worden
    benaderd, hangt af van verschillende factoren. 
    De order tabel in figuur 1 bevat ook een foreign key column van customer number. Als men
    alleen customer number wil weten (=alleen number in de customer entity action view), kan
    het customer number uit de customer tabel of uit de order tabel gelezen worden. CA Gen
    optimaliseert in deze situatie de SQL zodanig dat alleen de order tabel gelezen wordt.
    De READ van twee entity types levert nu een select van slechts één tabel op.
    Zie figuur 4 hieronder.



figuur 4.

Let op: Het is meestal niet juist om op grond van de gegenereerde selects nu al te concluderen welke READ situatie de voorkeur heeft vanuit het performanceperspectief. Grootte van de tabel, vullingsgraad, indexen en andere factoren moeten in de beschouwing worden betrokken om een juiste keuze te kunnen maken, veelal in overleg met de DBA. Echter, kennis van de manier waarop de select wordt gegenereerd is een belangrijke basis op grond waarvan de developer actie kan ondernemen.

Bedenk ook dat de Database Administrator allerlei mogelijkheden heeft om het DB-ontwerp in Gen maken en aan te passen. Deze kennis is helaas niet voldoende algemeen bekend bij DBA's. Niet alle DBA's weten bijvoorbeeld hoe je in Gen kunt denormaliseren t.b.v. performance.

IET's Studio Developer

Training in IET's Studio Developer

Wil je leren werken met Gen met gebruik van IET's Studio Developer?

Alle Educagen trainingen zijn aangepast om de cursisten op te leiden die gaan werken met IET's Studio Developer.

Kies je de juiste training.

Als je niet bekend bent met de Gen omgeving is het soms moeilijk om de juiste training te kiezen.

Demo Virtuele Klas ?

Wilt u weten hoe Educagen de Gen-trainingen in een virtuele klas geeft? Meldt u dan aan voor een gratis demonstratie door één van onze trainers.

© Educagen | disclaimer | info@educagen.com |
Gen, CA Gen, AllFusion Gen, Advantage Gen, Cool:Gen, coolgen, IEF en Composer

cool:gen contact