• No se han encontrado resultados

Una aproximación dirigida por modelos para el desarrollo de bases de datos objeto-relacionales

N/A
N/A
Protected

Academic year: 2017

Share "Una aproximación dirigida por modelos para el desarrollo de bases de datos objeto-relacionales"

Copied!
12
0
0

Texto completo

(1)

! " " #$ %

{veronica.bollati, belen.vela, juanmanuel.vara, esperanza.marcos}@urjc.es

& ' ( " ) " ( " " " " * # *%

+ , - #+ % " " " ( " " " " ( "

" ) ( " . / ( " ( " " ( " " , " ) "

0 ( #( " ( " % ! ( " 1 1 ( " *+ 2 (

0 ( ( " ' ) $3. 1 ( ( 1 ( " *+ .

( ( ( ( 4* / # % "5 " )

( " & ( " " " *+

! * " $ 0 6 * ) " " " * + ,

-/ 0 ( " " " " )

"

#

" ( " " * # *% 7 ( " "

) ( " " " " 1 "

* " ( , " "6 ) " (5 0 "

, ( , 8 " ,

( " " " ( , " ( " 7( " *

( " , , " "

" , 1 " " ( " ( , " (

" " ( 9:; 8 ! ( ! ) " *<

* + " + , #++% 1 * + , - #+ % 94=;

)& " 5 " 9>; ( ( " ( , 1

" " 0 " " )

" ( ( " ( *+ 5( " "

! ) 1 1 ) " " " " ( 9? =@ =>;

$ ( ) 0 )&

( " )& 1 " A " " *+ " " (

" ( * 9B; ( " )& " ( "

+ " ) ! ( ( < " )&

" " ( ) " " " 0 ( ( (

, " " * " $ 0 6 * ) " " #*$* %

94C; " " *+ . " *$* " ( " " ! "

$ ( " D 0 ( #$D% " 0 " "

" " 0 " ) " 0 ( " ( "

" " 1 " " D " " " 8 0 (

# 8D % 1 , " ) " 0 ( "

(2)

&0 " 8 0 ( # 8$ % 1 5 1 ( " *+

2 ( " 0 ( " ( " ' # 4/%

" ) $3. 1 ( ( 1 ( " *+ " + =C)

*$* " *+ " ( ( " " " ( 1 "

( " )& " ) " ( " " D* $ ( ' 5 )

" , " ) ( < ( ) 4

" 0 ( ( " " " " *+ "

( ( " + 0 ( " 8D 8$ : "

" 1 ( ( ( " ( " " 2 (

E 0 ,

$

#

%

F 5 ( " D* $ 9==; ( " )& " ) " ( "

" " $D ( ( 2 ) = D* $ ( " " " $D " "

" " ( ) 8 " " " " * #

% 9=?; D* $ " 0 " 0 ( " 0 " ( 0

" ! " < ( " " " " ( #

D % 8D 8$ 8 " " 5 " "

$D< ' " ( ( . " 0 " ( " "

" " $D 1 " ! & 0 " " A " "

! 1 " (

!

" #$ %& CRE ATE OR RE PLACE Jef e_Proyect o AS TY PE (Codigo_Id NUM BER, Nombre V ARC HAR 2(30), Tel efono NUM BER, Dirig e REF Pro yecto);

SQL XML Sche ma

& " 1 ( 0 " " D* $< * " *+

, " 1 " "

" * ( " ! 8D 8$ ( 2 ) = ! 8D " 0

( " " " " ( " " ) ( " . ! 8$

" 0 " ( " ( " + ( " " 1 ( G . " " " " )&

" ( ( " * 8 " )& + " "

8$ " 0 < ( " 5 " $3.<4CC: 9>; ) " "

&0 + =C) 9=>; , " " (

*+ H " " * G . " 9@ 4B; $ " 0 "

" ( ( " ( " " " *+ 5 " $3.<4CC:

" + =C) 7 ( ( 5 ) &

" ( ( " 5 " $3.<4CC: 1 ( ( " "

+ =C) " (5 " 8$ " 0 " " + =C) " ) " )

(3)

8 ( " " " 0 " 0 ( " 8D 8$

# 4 % 0 ( 1 ( " ) $3. *+ # 4/% &

" " 0 " 8D " 0 ( " 0 " "

" ) $3. " * " + =C)

/ " *$* " *+ ) " ( 4* / #

% 1 " ( ( " )& D* $ ) ( - (5

" $D . ( " " D* $ 0 " ( " " 4* / 8

" " ( 5 " " " " " D* $

( ( " " ( ) ! " , "

0 ( " ( 4* /

" " " ( " "

# 8% " 1 ) ! " ) " ( "

*$* " " (7 "

!# 2% & " " 8 " ( "

" ( " !# 2% ( " 0 ( ( /.

D / ) " " " ) ( +2$ G " ( ( " 5 "

( .4 + . " /. 9=C; ( (

0 ( 4 +2$ 9=B; ( ( " 0 ( 4/

5 " , 0 5 " ( ( 7 0

" , " 0 " " # " *$*

" *+ % 1 ) " ( 0 " " " " 94: 4E 4@;

( ( " " 0 " ( " " " *+ #

" + =C)% ( ) " 0 ( ! 8D 8$

$ "

( " " " *+ ( " 0 " ( ( " + 1 ,

" " 0 . ) , &0 " * ( # # *$.% 9=:;

" ( " , ! " ) ( *$*

" " ' ( ' < " 0 . " 0 " !

) , " +2 D ( " 0 " 0 . ( " " "

*+ 9=4 4:; 1 ( G . 94I; 8 ( " "

) ( " " *$.

" " 0 " ( ( 1 0 " " " 8

! , *$. ( " # % *$.

$ " " " +2 9E =:; * ( " )&

" 1 ( " 0 . ( % # (

J . ( J 9=;% 5 " " K " 0 "

) , " +2 ) ! ( " &

) , " +2 " " " " " ) "

! 0 ( " ( " " 1 ( *$. " ( " $D

5 ( ( ( " 0 . "& "

" " ( " G D ) ( "

8 " )& ' (5 " '

" *$* *+ ( " " ( ( " " +2

5 " " + =C) ( " ,

(4)

( ( " 5 " < + " &

" ' ( 1 ' ( " (

( ( 1 " 5 " $3.<4CC:

& $ ( " + + =C)L

$ $' ( # %

* " " " *+ " 0 " , " ) "

0 ( " ( " " " #8D % ( " + #8$ %

0 ( 1 " " 0 9=?; " 1 M " " 0 (

" " ) , ) ( ( " " 0 ( N *

( , 94:; " 0 1 " " "

0 ( ( " D* $<

o 8 ( " 0 0 ( ( " " ) ,

o . ) ) " 0 ( 0 ( " " ) (5 " ) 0

o 8 7 ( ) ( ( " " ) " "

( " " 0 ( ' 8 , " ) , /.

( " " "

5 " " ) ( 1 " "

5( " 0 ( " ( " < ' " "

" 0 " ( " " 0 ( " 5 (5

! , ! " , " " ( " "

( " " 0 " 0 ( " ) 0 94;

0 ( " ) " 0 ( " ( ( 0 " "

( 0 " " " ( " " "

( " " & ( " ) ) " " ( ( * ) ( "

0 ( " 0 ( ( 0 ) 0 ! ( " " ( "

1 0 1 " ) " ( "

( " ( ( " ) " 0 ( "

) , /. 9=C; ) , " 0 ( " ( " " " ) /. $

/. ( 5 " + . 9=I; 0 1 " ! (

( ! 1 ( " " 0 1 " ! " ( ( $ "

/. 1 ( " " 5 " " 0 0 ( " ( "

. " " " ) *+, + #3 /% 9=E; ) + (

(5)

( ( 8 " /. ! , " ( " "

0 ( " ( " " (5 ) ( " " " 0 (

( , " ( " 0 ( " ( " 8 ( (

0 ( /. " 0 , " ) " ) " 0 ( "

" # % ( " " # % ( ! " ( ( "

" , 0 ( /. ( ( "

" ( " " " . ) " ' ( "

" ( " " " : ( 5 ( ( " ) "

) " 0 ( " /. " " "

= ( ) " 0 ( " 8D 8$ " *$*

*+ ) 0 " " 0 ( " (

! " ( ( 0 " 5 " $3.<=>>> ! ? " + 9=4;

/ " 0 ) , ) " 0 ( " ) "

0 ( " 0 " " " 0 ( " ) 0 94; . 0 (

( " ) " 0 ( 8D 8$ " " ( " +

" 0 ( " ) 0 " 94:;

' " / 0 ( + " 8D 8$

# % ) *

+%,-!$../0

%

+ ". 0

$ " / O / " / + , / O + , /

$ ( # ( % # ( %

! " K KF " /

( +JK$ " / # ( % + , / # ( %

" / )) K " / )) K "

=<= 0K 0 0K 0

=< 0 - K 0 - F " / K

F< K - K F " / KF " / - K

) ) K F " / K 0 0

( K F " / K 0 + ,

/ K/ " / / K/ " /

/

)

*$* *+ ! " " "

" " < *+ ) " 0 ( " " " "

1 ( " " ( ) " 0 ( " " "

#8D % " ( " " ) ( " . # : =% 8 ( "

" 8D " ) ( ( " /. ) 8$ *+

# : 4 : :% 8 7 ( " " 8$ " ) $3. "

" +2$ " 0 " # : E%

! " 0 " 8D " " ( 1 " 0 (

(5 " 0 ( ( $ ( ) " A " " 0 K

( " 0 ( " + ) " " ( " ) " " ) "

" ) 50 " ( " 0 ( ( ( " ( " 4 = 1

(6)

/ "

( ( " " " " *+ " " ) " " 0

8D #! 2 ) :%< 0 " 8 # % " ) " # % 5

( " , " # % 1 ! , " 0 ) # %

0 ) " &) # % 1 5 0 ( " & ## %

8 ) 50 " ( " ( 4* / .4

944; ( ( " ( ( " " . " 2 0 ( "

& / " " * #8D % " "

/ $' ( # %

( ) " ) " 0 ( " 8D

( " + " + =C) 8 " " 0 ( "

" ) ) (5 " ) 0 " ( ( /.

' ( 1 . 1 " " 2 ) E ( ) "

0 ( " ) 0 0 ( # 8D % ( "

1 ( *+ # 8$ % $ ( 1 . ! 8D

# P % 5 ! 8$ " # * ( * %

" #* ( % # L% " ! " " 5 " 1

" 5 ' " " 8 " " " " # *%

" A " 5 " # L%

" " 2 ) E ( ) /. -. *- ( 1

" 0 ( " ) 0 " 0 " . ) -. 0 1

" " ( " " ) #. #/ % " "

" ( " " " # 0&/ * 0&/ * ( % "5 "

" (5 ! " " " " " ( , (

" "' 8 ) /. *- ( 0 ( " " " .

" ) " " 1 8 " "

" " ) " A " " " ( "

0 ( # :C% " ( /. ! 7 ' " ! 0

" 1 " ) ( " " * (

" ! ) ( " " " " 0

(7)

0 ( ( " " 0 0 (

0 ( " ( " "

ownedAttibute * * ???:UML::Class name:String=??? 1 ???:UML::Class name:String=??? ???:UML::Class name:String=??? 1 match(1).name:OR::Typed Table 1’ match(1).name:OR::Typed Table match(1).name:OR::Typed Table 1’ match(2).name:OR::Attribute

datatype = match(2).datatype 2’

match(2).name:OR::Attribute

datatype = match(2).datatype match(2).name:OR::Attribute

datatype = match(2).datatype 2’

match(1).name + “_Type”:OR::Structured Type 1’ match(1).name + “_Type”:OR::Structured Type match(1).name + “_Type”:OR::Structured Type 1’ ???:UML::Property name:String=?? datatype:Datatype=?? 2 ???:UML::Property name:String=?? datatype:Datatype=?? ???:UML::Property name:String=?? datatype:Datatype=?? 2 :UML::Stereotype

name: String= Persistent 3 :UML::Stereotype

name: String= Persistent :UML::Stereotype

name: String= Persistent 3

LHS

- UML Class Diagram - - OR Model -RHS

ruleClass2UDT {

from

c : UML!Class

to

udt : modeloOR!StructuredType( Name <- c.name + '<<udt>>', typed <- tt, method <- meth_seq,

supertype <-if(notc.generalization-> first()->oclIsUndefined()) then

c.generalization->first().general

else

OclUndefined

endif, model <- thisModule.package ),

meth_seq : distinctmodeloOR!Method foreach

(op in c.ownedOperation)(Name <- op.name), tt : modeloOR!TypedTable(

Name <- c.name + 's<<persistent>>') }

ruleProperty2Attribute {

from

p:UML!Property (notp.isDerived and notp.isMultivalued() and

p.refImmediateComposite().oclIsTypeOf(UML!Class))

to

a : modeloOR!Attribute( Name <- p.name, Type <- p.type,

structured <- p->refImmediateComposite()) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

ruleClass2UDT {

from

c : UML!Class

to

udt : modeloOR!StructuredType( Name <- c.name + '<<udt>>', typed <- tt, method <- meth_seq,

supertype <-if(notc.generalization-> first()->oclIsUndefined()) then

c.generalization->first().general

else

OclUndefined

endif, model <- thisModule.package ),

meth_seq : distinctmodeloOR!Method foreach

(op in c.ownedOperation)(Name <- op.name), tt : modeloOR!TypedTable(

Name <- c.name + 's<<persistent>>') }

ruleProperty2Attribute {

from

p:UML!Property (notp.isDerived and notp.isMultivalued() and

p.refImmediateComposite().oclIsTypeOf(UML!Class))

to

a : modeloOR!Attribute( Name <- p.name, Type <- p.type,

structured <- p->refImmediateComposite()) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

& 2 ) " / 0 ( " 8

2 ) @ ( " ) 1 " ( '

" ( " " " < . " " " "

0 ) ( " " ) 50 " 4* / " " )

/.< " " "

ATL Implementation

ruleClass2UDT {…}

ruleProperty2Attribute {…}

& 3 / 0 ( "

' ( . ) " 0 ( "

( ! 0 ( ) ( " !

/ = ' " (5 ) &0 " " " " " " 1

" " 0 " ) 0 ( ( ! " ( "

" ! " 8 " , 5 7 ( ) "

0 ( ( ! "

. ( ! " " 8D " "

1 ( *+ + =C) ' " " 0 " "

< , * ' ( . " 0 " 1 , *

( A (5' ( 0 , " ( ( ) " ( ( 1

( 1 ' ( " ( A ! ( " 0 ( " "

5 " 1 5 " 0 " 2 ) B ( ) " 0 (

" ) 0 1 0 ( ( ! " " '

( < . # % " " ( ! " # % " ! "

8 " " 0 " " # L%

" ' ( # LP L% ( ( " , *

& ( 1 " A " 1 , *

' ( ( ( " 0 ( $ ( ) /. 0 (

" 0 ( ( " ( " " " A &

) " 0 ( ( ! " " 0 ( ) ( " "

' ( ( 5 , " ! ( " , (

( " " 9I;

" " 2 ) B ( ) " 0 ( "

(8)

" 1 ( 0 ( ( ! " " .

# :-E% " 0 1 ( " " " " " ( " " "

" ( " " ) < + ' ( # ==-4@%

( " 0 ( " " * " ! " ( "

) 1* ' ( # ?->% ) 1* ( " !

" 0 1 " ! " ' & ( * ( "

0 5 ' ( "

LHS UML Class Diagram

-RHS OR Model

-ownedAttibute * ???:UML::Class name: String=??? 1 ???:UML::Class name: String=??? ???:UML::Class name: String=??? 1 1 match(1).name:OR::Typed Table 1’ match(1).name:OR::Typed Table match(1).name:OR::Typed Table 1’ 1’

match(1).name +”_Type”:OR::Structured Type 1’ match(1).name +”_Type”:OR::Structured Type match(1).name +”_Type”:OR::Structured Type 1’ 1’

match(2).name:OR::Attribute2’ match(2).name:OR::Attribute match(2).name:OR::Attribute2’2’

match(2).name+”_MS”:OR::NESTED_TABLE datatype=match(2).datatype 3’ match(2).name+”_MS”:OR::NESTED_TABLE datatype=match(2).datatype match(2).name+”_MS”:OR::NESTED_TABLE datatype=match(2).datatype 3’ 3’

rulePropertyMultivalued2Attribute {

from

p :UML!Property (notp.isDerivedandp.isMultivalued()and

p.refImmediateComposite().oclIsTypeOf(UML!Class))

to

a : modeloOR!Attribute( Name <- p.name,

Type <- thisModule.generateNestedTableMultivalued(p), structured <-(p.refImmediateComposite()) ),

st : modeloOR!StoredNestedTable( Name<-'lista_'+ p.name, attribute <- a,

typed <-thisModule.resolveTemp( p->refImmediateComposite(),'tt') )

}

unique lazy rulegenerateNestedTableMultivalued {

from

p: UML!Property

to

nt : modeloOR!NestedTableType ( Name <-'NT_'+ p.name + '<<nt>>', Type <- p.type,

model <- thisModule.package) }

???:UML::Property name: String =??? isMultivalued() = true datatype: Datatype = ???

2 ???:UML::Property name: String =??? isMultivalued() = true datatype: Datatype = ???

???:UML::Property name: String =??? isMultivalued() = true datatype: Datatype = ???

2 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

& 4 ) " / 0 ( " ! "

2 ) I ( " " 0 ( " ( ! " "

( " ! " " " 8 "

' ( ' 2

ATL Implementation

rulePropertyMultivalued2Attribute {…}

unique lazy rulegenerateNestedTable {…}

ATL Implementation

rulePropertyMultivalued2Attribute {…}

unique lazy rulegenerateNestedTable {…}

& 5 / 0 ( " " " ( ! "

' ( / " ( " " " ! "

" 0 ) #! / =% 8 " ( " "

, ( " 1 ( ( " ( (

/. ( 4* / " " 0 ( " . ( ( ) 1

( " ( "

1 " " 2 ) ? ( ) " 0 ( " ) 0 "

=<F " 0 ! " $ " " "

. " ) # % . # " % 0 ( "

" " ) " # LP L% 5

" 0 " " 0 " " " "

# LP L% " ' ( ( " &

" " 0 ) ( " ( ( /. "

" ) ) 1 ( =<F " . 0 ( "

" ) # :-@% 0 ( + ' ( #

B-=B% " 5 ' ( " ! " ! ) 1*

' ( # =I-4@% * ( ( ( " ( "

#' ( % ( & ! " ! " ) 1*

(9)

) 1 )7 & ) ' ( " " $ ) "

) ! ( ( 5( ! ) " ! !

0 " ( ! 1 !

LHS UML Class Diagram

-RHS OR Model

-ownedAttibute * association ???:UML::Class name: String=??? 1 ???:UML::Class name: String=??? 1 1 ???:UML::Property name: String=??? upper = * lower = ???

2 ???:UML::Property name: String=??? upper = * lower = ???

2 2

???:UML::DataType3 ???:UML::DataType33

???:UML::Property 4 ???:UML::Property 44

match(1).name:OR::Typed Table 1’ match(1).name:OR::Typed Table 1’1’

match(1).name +”_Type”:OR::Structured Type 1’ match(1).name +”_Type”:OR::Structured Type

1’ 1’ match(2).name+”MS”:OR::NESTEDTABLE 2’ match(2).name+”MS”:OR::NESTEDTABLE 2’ 2’ ???:UML::Class name: String=??? 5 ???:UML::Class name: String=??? 5 5 match(2).name:OR::Attribute 2’ match(2).name:OR::Attribute 2’2’

match(5).name:OR::Typed Table 5’ match(5).name:OR::Typed Table 5’5’ match(5).name +”_Type”:OR::Structured Type 5’ match(5).name +”_Type”:OR::Structured Type 5’5’

match(2).name+”_Ref”:OR::ReferenceType 2’ match(2).name+”_Ref”:OR::ReferenceType

2’ 2’

rulePropertyAssocMulti2Attribute {

from

p:UML!Property(p.refImmediateComposite().oclIsTypeOf (UML!Association) andp.isMultivalued() and

p.isChangeable())

to

a : modeloOR!Attribute( Name <- p.name,

Type <- thisModule.generateNestedTable(p.type), structured <-p.getProperty().type), st: modeloOR!StoredNestedTable(

Name <-'lista_'+ p.name, attribute <- a,

typed <- thisModule.resolveTemp (p.getProperty().type,'tt')) }

unique lazy rulegenerateReferences {

from

c:UML!Class

to

ref : modeloOR!ReferenceType( Name <-'Ref_'+ c.name + '<<ref>>', Type <- c,

model <- thisModule.package) }

unique lazy rulegenerateNestedTable {

from

c:UML!Class

to

nt : modeloOR!NestedTableType( Name <-'NT_'+ c.name + '<<nt>>', Type <- thisModule.generateReferences(c), model <- thisModule.package) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

rulePropertyAssocMulti2Attribute {

from

p:UML!Property(p.refImmediateComposite().oclIsTypeOf (UML!Association) andp.isMultivalued() and

p.isChangeable())

to

a : modeloOR!Attribute( Name <- p.name,

Type <- thisModule.generateNestedTable(p.type), structured <-p.getProperty().type), st: modeloOR!StoredNestedTable(

Name <-'lista_'+ p.name, attribute <- a,

typed <- thisModule.resolveTemp (p.getProperty().type,'tt')) }

unique lazy rulegenerateReferences {

from

c:UML!Class

to

ref : modeloOR!ReferenceType( Name <-'Ref_'+ c.name + '<<ref>>', Type <- c,

model <- thisModule.package) }

unique lazy rulegenerateNestedTable {

from

c:UML!Class

to

nt : modeloOR!NestedTableType( Name <-'NT_'+ c.name + '<<nt>>', Type <- thisModule.generateReferences(c), model <- thisModule.package) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

& 6 ) " / 0 ( "

. 2 ) > ( " " 0 ( =<F 4 " (5 "

" " 1 "

( & #& 2 % ' ( #' 2 % 1 "

( " & " 5 " 0

' 2

rulePropertyAssocMulti2Attribute {…}

unique lazy rulegenerateReferences {…}

unique lazy rulegenerateNestedTable {…}

ATL Implementation

rulePropertyAssocMulti2Attribute {…}

unique lazy rulegenerateReferences {…}

unique lazy rulegenerateNestedTable {…}

ATL Implementation

& 7 / 0 ( " =<F5

/ /

8 7 ( 2 ) =C ( 8$ ( " *+ " "

" ( " " ) 50 " ( 4* / . 0 ) "

" " ) " 0 ( " /. 8D #2 ) :% 4* /

(10)

/ 28

7 ( " " " ) " " ) " "

! 0 ( " ( " ' # 4/% 8 " ) ,

+2$ 9=B; 1 "& " 1 (5 " " "

" + ( 5 " 0 ( 4/ ( ( (

" ( (5 " " " (5 ' " " " (5 " ,

1 ( 0 < ! 1 " " 0 ( 4

) " " ) +2$ ! $ " (5

0 ( ( 0 ) , +2$ 9=B;

( 5 ) " 1 ) " 8$ " ) $3.

1 ( ( 1 ( " *+ " + =C) $ " !

0 ( ( " " ( " 1 ( " " 1 ( "

*+ #8$ % ( ! ) " " # " ) $3.%

" 0 0 1 , " ) 8

" " ( " ( ( " " " # ( ( " *

+2$ % " 0 ) 1 ( , " "

. ) ( " 0 " " ( 1 ) ( , " 0 (

0 ' 1 ! " " " 8 , ( ) "

" ( " ) (5 ( , 1 )

" " " (5 " 0 " " 0 ' 4

" ) ( " ( ( 0 # " " " )

" 0 ( " =CC-=4I% ( )

! ' 1 ( 5 " ) $3. # >C% . ) A " " ) $3.

" " " 1 1 " " # >=->B%

. ) 0 ( # =CC-=4I% ) , " 1

" # >>% 8 7 ( " " * "

" " 0 " 1 0 "

# =4>% * ( ( " " ! " !

) * ( # =:C-=:=%

" ) 1 ( ! ) " 0 ( ,

' ( " ) " " 0 . (

" " ' ( * " ( " ) # @@% (

' ( * " " " * " * 1

(11)

( ! " # BE-I:% 8 7 ( " )

! " " # IE%

2 ) == ( 1 A " " ) $3. ) " " "

" 0 ) ( " ( " + " "

" " ) 50 " ( < "

" " " (5 " # ' 2# 0 "

0 ) ( " " ) $3. ) " " , " ) "

0 ( # 4/% ( " (

Code Generation using MOFScript

eco.StructuredType::generateStructured() {…} self.attribute->forEach(a:eco.Attribute) {…} self.typed->forEach(t:eco.TypedTable){…}

CREATE OR REPLACE TYPE Poligon UNDER Figure (

Num_Lines NUMBER(4),

Have_Lines NT_Lines,

Is_Figure Ref_Figure

) /

CREATE TYPE NT_Lines AS TABLE OF Line /

CREATE TABLE Poligons OF Poligon (

PRIMARY KEY (Cod_Figure), Is_Figure NOT NULL )

NESTED TABLE Have_Lines STORE AS List_Lines; /

& "" , ( " " " )

2

1 ' &

, ( " " " " " ) " ( "

*+ " " ( " D* $ 8 ( ( " /. ) "

0 ( 4 ! ( 0 ( " ( " ) " ( " +

" ( " " " 0 ( 4/ +2$ ) "

" ) $3. 1 ( " *+ ( " " 0 " (

*$. " +2 ( " " " *+ " ) 50 1 ( ( *$.

" " ( ( " ( ( " " 4* / #

% ( 1 ) " ) # ( %- (5 "

( D* $ , ! " ( " ( ( 1

" ( ( " " "1 " 5

( ( " " ( " ( ( " ! " "

" 5 ) " ( ( ( 4* /

( 5 , " " ( "

( " + * ( " & ( ( " " 0 ( 1

(12)

" 5 ) , ( ( ! " 0 ( "

+ 1 " A " , " ' ( , *

, " ( " +.* 0 " A

" " #/DF4CC@-CCC=CK% -*+$ # - -4CCI- /-=BCI%

-0 " ! " " ( " " " " " # A %

(

= ) ( $ 6 (& 78 %9 6 (

J ) ) 4CCI @C=-@C@

4 . Q R 4CC4 " 8 4

8 " ) 0 2 0 / 0 ( % .F $ 4@C@ $ ) - ) . "

EC4-E4> 4CC4

: 0( 0 ( * 4 8 ( 8 * + *&

8 # " % Q 4CCC

E ! # # 9 E J R $ 0 6 "

) ) #JD$ % ) ( #4CC@%

@ . : 3 ; #

GDDD " " D ) & " $ 0 6 " * # D$ * 4CC?% "

B 8 8 *%& < . , / * $ ( =

F = =>IB >-:B =>IB

I * " * 2 < 8 * / ! " " "

F #4CCI%

? D * 4 ! * <KK666-:CB ( (K 0 6 K" K" 4K

> D$+ K D >CI@ $ * < ( # < )#8-==> D + ) 0

$ " " 4CC:

=C 2 ! D # < 8 0 " / 0 ( 8 J R

* .$ 0 ( 4CC@

== 5 8 ! + 98 ! 6 ( ( * $JD$

4CC= S R ( # % F ! ( 4CC= .F $ 4EB@ $ ) - ) 44I-4:? $ ( 4CC4

=4 ! . # 0( %& ( 2 D 0

0 " " ) . ) ) . 4CC= / # " % .F $ 4=?@ $ ) - ) 44@-4:> + 4CC=

=: , Q $ <6 % ( $ ! :I #4CC@%

:=B-:EE

=E + , 2 # +2% 4 C 3 K 6K/ 0 ( $ 0 2 " " $ 0 CIKCIKCI "

" < <KK666 () )

=@ 0 $3. $ ! " " < <KK666 ( 0 )K 1 K

=B + " ! R F / T ( ) " - 4 %

< 4:>-4@: 4CC@

=I + + , . ) ) + ! $ 0 4 C 2 ( < C=KC@K4CCB " "

666 () )K" K KCB-C@-C= "0

=? + " , ?4=4 * ( ( ()K4CC:-C@-C= " < R , " " <

<KK666 () (K(" 4CC:

=> + 0 ( ?= 4 & - @?=4-A " " < 666 (

4C $ / R % 8 *$ $ J

U $ 4CCB

4= $ R 6 8 0( %& 9 / R ) F ' J ! ) 00( =>>>

44 . # 4 # .4% " " < <KK666 )K( " )K(" KV , W ( 4

4: ! ( % ( $ XCI<

8 " ) 0 4CCI ( ( " ( ) =C=4-=C=> 4CCI

4E * 8 1 " D* $- $ < ( " " $DJ

" * D " D ( D ) & " $ 0 6 D ) & " ( # DD$D XCE% ?:->4

4@ * J$*. ( ) 0 ( . ( " * 0 ( 6 R D D

0 J $ ! 8 ( = Y D = U 4 F ! ( 4CC@ = Y =4 4CC@

4B A ; # ( 4: " D 0

" ) # 4CCE% .F $ :4?? $ ) ) I?C-I>E 4CCE

4I . # ; # 4 / =@ 0 + "! " D 0 ( $ (

) ) D$ LC: 2+ ) 0 K " # % =B-4C 4CC: "< " / J $ 8

Referencias

Documento similar

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

Para solucionar estos problemas de conectividad y accesibilidad a disímiles fuentes de datos como servidores de bases de datos relacionales y ficheros XML, han surgido

Las métricas de software ayudan a los desarrolladores a valorar el trabajo desarrollado, proveen la información necesaria para la toma de decisiones técnicas,

Capítulo 1: Se brinda información sobre el origen, clasificaciones y desarrollo de las BD, se analizan las características del diseño de la arquitectura de las BD, se

 Para recibir todos los números de referencia en un solo correo electrónico, es necesario que las solicitudes estén cumplimentadas y sean todos los datos válidos, incluido el

BASES DE DATOS (IG18 Semipresencial) Diseño Físico de Bases de Datos Relacionales.. Lledó Museros /

La construcción de software siguiendo las bases del desarrollo dirigido por modelos (los modelos como centro del desarrollo) y la metodología de las líneas de producto

A modo de conclusión, se puede presentar todo el diseño como un flujo de trabajo que se asemeja a una cadena de producción de código informático como las que se prometían en la