A Glimpse at SETS Automated Reification  

[ Back to SETS ]  
SETS can be shown to supersede the standard relational database calculus. As a matter of fact, it has been taught to Minho's undergrads, for several years now, as a ``do it by calculation'' alternative to conventional database design.
This alternative is illustrated below by ``animating'' a small subset of SETS which leads naturally to 3NF data models. This animation is carried out in the CAMILA rapidprototyping environment. The laws included in this prototype are numbered according to the lecture notes (Postscript) of a crash course on SETS technology (UNU/IIST, May 97) which the reader may want to have a look at for many details missing here.
The source code of this naive SETS animator (setsan.cam) can be obtained from J.N. Oliveira. Readers interested in a fully general SETS animator implemented on top of genetic algorithm based termrewriting should get in touch with F.L. Neves.
A SETSspecification data model is said to be compliant with the relational database model if it is a finitary product of expressions of the following kind:
Moreover,
Consider the following SETS data model for a ``toy factory'' production database:
C>$
(E>(C+E)>N)(Nat stands for the set of natural numbers);
(C+E)>N
ppd=((C+E)>N)*(C>$)*(E>(C+E)>N)so that a production tree exists for each equipment which may involve individual components and/or other production subtrees.
We start by loading our CAMILA prototype of a susbset of SETS:
[jno@camilamobile]$ camila setsan.cam UMXMETOO version 1.10.DLL.COMM.USERTYPE (aap/pem/cjr/jj 97/02/26 ) /home/jno/.metoorc") setsan.cam ?
First, we check for the laws which have been included in the prototype:
? laws(); ( 96)  A*1 == A (101)  A*(B+C) == (A*B)+(A*C) (110)  A>B == (B+1)^A (124)  (A+B)>C <= (A>C)*(B>C) (128)  A>B>C <= (A>1)*(B>C) (129)  A>D*(B>C) <= (A>D)*((A*B)>C) (130)  A>B+C <= (A>B)*(A>C) (134)  Aseq <= N>A
Now load the ppd SETS expression:
? ld(ppd); x=(((C+E)>N)*(C>$))*(E>(C+E)>N)
We just have to apply the ``stepbystep'' method step, which will rewrite this expression while telling us which laws have been applied at each step:
? step(); Law (124) Law ( 96) x=(((C>N)*(E>N))*(C>$))*(E>1*((C+E)>N)) ? step(); Law (129) x=(((C>N)*(E>N))*(C>$))*((E>1)*((E*(C+E))>N)) ? step(); Law (101) x=(((C>N)*(E>N))*(C>$))*((E>1)*(((E*C)+(E*E))>N)) ? step(); Law (124) x=(((C>N)*(E>N))*(C>$))*((E>1)*(((E*C)>N)*((E*E)>N)))
We stop here because the resulting SETS expression already specifies a 3NF relational datamodel  we have obtained 6 tables as a relational implementation of ppd:

component stocklevel table  C>N  

equipment stocklevel table  E>N  

component cost table  C>$  

table storing equipments with no production tree yet  E>1  

equipmentintocomponent decomposition table  (E*C)>N  

equipmentinto(sub)equipment decomposition table  (E*E)>N 
NB: