Upload
rob-van-den-berg
View
483
Download
10
Embed Size (px)
Citation preview
Code Generation with Oracle SDDMRob van den Berg
Code Generation with Oracle SDDMPresenter information
VX Company IT Services b.v.
Email [email protected]
Twitter twitter.com/rob_vd_berg
Blog rvdbergblog.wordpress.com
Code Generation with Oracle SQL Developer Data Modeler
IntroductionSDDM Features supporting Code GenerationCode Generation
Agenda
Oracle SQL Developer Data ModelerIntroduction
Introduction
Oracle SQL Developer Data ModelerMain Features - Introduction
Last version as of December 21, 2015 is 4.1.3.901
FreeCreate, browse and edit relational models
Create, browse and edit multi-dimensional models
Forward and reverse engineering
Integrated source code controlSince July 1, 2009
Jeff Smith
Heli Helskyaho
– This presentation is about Application Code Generation– Focussing on:
application code that implements Business Rules– Code as complex as Entity Rules, Inter Entity Rules,
Change Event Rules, etc.– In short: Code Beyond DDL– Supporting: thick database design
(Toon Koppelaars, Bryn Llewellyn)
Oracle SQL Developer Data ModelerMain Features – Introduction – Presentation subject
Oracle SQL Developer Data ModelerSetting the stage
FeaturessupportingApplicationCode Generation
Oracle SQL Developer Data ModelerFeatures – “Oh, pretty pictures – I can do that !!”
– ER diagramming (Barker, Bachman or IE notation)– Engineering to and from relational models– Supertypes and subtypes, arcs– Compare and merge with logical model in another design
Oracle SQL Developer Data ModelerFeatures – Logical Models
Explore different kinds of modeling!
– Database design and generation tool– Model driven approach– Models:
– Logical– Data types– Dimensional– Relational– Data Flow diagrams– Physical models
Oracle SQL Developer Data ModelerFeatures
Oracle SQL Developer Data ModelerFeatures – Other types of models
– Importing – from Designer, Erwin (XML) and more– Version Support – team development (Subversion)
Oracle SQL Developer Data ModelerFeatures – import your model, put it in your VCS
Bring some color to your designs!
Oracle SQL Developer Data ModelerFeatures – Logical Models
Oracle SQL Developer Data ModelerFeatures – Logical Models – Actual Footage ! Corporate Identity applied !
Barker (Oracle Designer)
Oracle SQL Developer Data ModelerFeatures – Logical Models – Actual Footage ! Corporate Identity applied !
Bachman
Barker (Oracle Designer)
Information Engineering
– Subviews can be used to represent objects related to given subject area
– Subviews can be nested(linked) thus allowing to build network (or hierarchy) of related subviews – navigation between linked subviews is supported
Oracle SQL Developer Data ModelerFeatures - Subject Area Management
Oracle SQL Developer Data ModelerFeatures - Subviews
Do you have naming standards ?Get some!
– Name structure for elements in Logical and Relational models
– Model level restrictions for – name length, possible characters, used letter case
– Name translation during engineering between logical and relational models
– Naming templates for table constraints and indexes– Prefix management
Oracle SQL Developer Data ModelerFeatures – Naming Standards
Oracle SQL Developer Data ModelerFeatures – Naming Standards
Right mouse menu on designproperties->settings->naming standard
Oracle SQL Developer Data ModelerFeatures – Naming Standards
– Supports validation rules;– Easy exchange and synchronization of domains;– Assignable to group of attributes and columns
in different models;– Set “Default value” property at domain level. This can be
updated at column/attribute level.
Oracle SQL Developer Data ModelerFeatures - Domains
Example:domain = Country Codesmandatory = Truevalues = (NL = The Netherlands, UK = Great Britain)default = NL
Oracle SQL Developer Data ModelerFeatures – Object Model
The design is stored as an object modelThat can be manipulated programmatically(which is NOT the subject of this presentation)That can be queried programmaticallyWhich enables you to synthesize PL/SQL scripts based on the design and each detailed property of the design
Oracle SQL Developer Data ModelerRelational Model AFTER some tuning ….
Design import needs tuning? Transform !
– A few transformation scripts are pre-supplied– Like adding default columns to a range of tables, or– Like re-ordering columns after engineering from logical– Add your own transformation scripts
Oracle SQL Developer Data ModelerFeatures – Relational Models – Transformation scripts
Oracle SQL Developer Data ModelerFeatures – Relational Model – Custom Transformation Scripts
Oracle SQL Developer Data ModelerFeatures – Relational Model – Custom Transformation Scripts
Oracle SQL Developer Data ModelerOracle Nashorn
Oracle SQL Developer Data ModelerCode Generation
Code Generation
Transformations is your Code Generator
– Add a custom transformation– Set it up to output modeled design to the file system– Model design properties– Dynamic properties
Oracle SQL Developer Data ModelerHow to generate code
// Code shown below is JavaScript //
application_name = model.getName();appfolder = "Documents/Oracle/SDDM/sql/"+application_name+"/";
Oracle SQL Developer Data ModelerBasic setup: generated code output folder
– C:\Oracle\datamodeler\datamodeler\xmlmetadata\doc– SQLDeveloperDataModelerScripting.docx– Index.html
Oracle SQL Developer Data ModelerObject Model definition
// Code shown below is JavaScript //
application_name = model.getName();appfolder = "Documents/Oracle/SDDM/sql/"+application_name+"/";
Oracle SQL Developer Data ModelerBasic setup: generated code output folder
// Code shown below is JavaScript //
runFile = new java.io.FileWriter(appfolder+appname+ "_CREATE_ALL.sql");run = new java.io.PrintWriter(runFile);
run.println("-----------------------------------------------------------");run.println("-- Version : 1.0.0");run.println("-- Proces : Zorgsturing");run.println("-- File-name : <app_alias>_CREATE_ALL.sql");run.println("-- Creator : Rob van den Berg");run.println("-- Creation date : "+ today);run.println("-- Description : Master create script");run.println("--");
Oracle SQL Developer Data ModelerBasic setup: include a master script
Oracle SQL Developer Data ModelerCreated Master Script
// Code shown below is (PL/)SQL //
/*Maintain table level constraints on ZST_VERTALINGEN_MPG
Change HistoryWho When What---------------- ---------- --------Rob van den Berg 12/05/2016 Creation*/-- define check constraintsalter table ZST_VERTALINGEN_MPG add constraint ZST_BR_VMP003_TPL check (datum_einde is null or (datum_ingang <= datum_einde));
Oracle SQL Developer Data ModelerImplementation of Tuple Rule
Generated script ZST_VMP_CON.sql
Oracle SQL Developer Data ModelerDefinition of Tuple Rule
// Code shown below is JavaScript //
tables = model.getTableSet().toArray();for (var t = 0; t<tables.length;t++){ // check constraints tccs=table.getCheckConstraints().toArray(); for (var n=0;n<tccs.length;n++){ con.println ( "alter table “ + table_name + " add constraint “ + table.getProperty(tccs[n].getName()) + " check (" + tccs[n].getRule() + ");" ); }}
Oracle SQL Developer Data ModelerLet’s generate customized script layout for check constraints
– typical Entity Rule “rows should not OVERLAP”– Which typically presumes data definition of
– Column start_date NOT NULL– Column end_date– Some unique key including start_date
next to (optional) columns identifying the group– Analist would phrase the rule like
“Thou shalt not enter any conflicting time period (for the group of tuples identified by X, Y, Z”
Oracle SQL Developer Data ModelerDefinition of Entity Rule
Oracle SQL Developer Data ModelerDefinition of Entity Rule: specify the name identifying the rule
// Code shown below is (PL/)SQL //
/*Maintain Table ZST_VERTALINGEN_MPG……--define unique key(s)alter table ZST_VERTALINGEN_MPG add constraint zst_vmp_un1 unique ( bte_id , mpg_code , oms_extern , datum_ingang );
Oracle SQL Developer Data ModelerImplementation of Entity Rule: unique key including start_date
Generated script ZST_VMP_TAB.sql
START_DATE
OVERLAP can still occur
// Code shown below is (PL/)SQL //
create or replace trigger ZST_VMP_BIRbefore insert on ZST_VERTALINGEN_MPGfor each rowbegin -- support insert change event ZST_VMP_PCK.trg_bir ( p_id => :new.ID… , p_datum_ingang => :new.DATUM_INGANG… , p_datum_einde => :new.DATUM_EINDE );end;/
Oracle SQL Developer Data ModelerImplementation of Entity Rule
Generated script ZST_VMP_TRG.sql
START_DATE
END_DATE
– Triggers generated within each trigger definition file:– Before insert, update, delete statement– After insert, update, delete statement– Same for row triggers
Oracle SQL Developer Data ModelerImplementation of Entity Rule
// Code shown below is (PL/)SQL //
procedure trg_ais is begin check_br_vmp002_ent;… end trg_ais;
Oracle SQL Developer Data ModelerImplementation of Entity Rule
Generated script ZST_VMP_PCK.sql
// Code shown below is (PL/)SQL //
… procedure check_br_vmp002_ent is -- Check if any time overlap check does not get violated -- find record overlapping in time cursor c_overlap ( v_not_id in ZST_VERTALINGEN_MPG.ID%TYPE , v_bte_id in ZST_VERTALINGEN_MPG.BTE_ID%TYPE , v_mpg_code in ZST_VERTALINGEN_MPG.MPG_CODE%TYPE……
Oracle SQL Developer Data ModelerImplementation of Entity Rule
Generated script ZST_VMP_PCK.sql
Where did that get me
Generating code
– Is efficient– Follows standards and guidelines– Leads to maintainable code. No exceptions.
Oracle SQL Developer Data ModelerConclusions
Oracle SQL Developer Data ModelerAgenda
Improvements
Oracle SQL Developer Data ModelerImprovements – documentation
Oracle SQL Developer Data ModelerImprovements – documentation
Questions?
Code Generation with Oracle SDDMPresenter information
VX Company IT Services b.v.
Email [email protected]
Twitter twitter.com/rob_vd_berg
Blog rvdbergblog.wordpress.com