Informační tok Funkční structura Datová struktura ER model Modulová struktura Typová struktura Relační model Dokumentace


[Celkový datový model] [Funkce] [Externí rohraní] [Stavové diagramy] [Datové elementy] [Entity] [Relace]
[Databáze] [Události] [Materiály] [Generovací funkce] [Vyhodnocovací funkce] [Konfigurace] [Uživatelé] [Projekt] [Home]



Vyhodnocovací funkce
Relarea
(Web Publishing)


Vytvořeno: 03-05-1997 11:37:21
Poslední změna: 01-10-2003 11:19:21

Outputs detailed information about the given relational model.

Modul

Module: Web Publishing

Zdrojový kód:

PROCEDURE Relarea(name$, x%, y%)
BEGIN

  foundsomething! = FALSE;
  first! = TRUE;
  FOR Relarea WHERE Name = name$ DO
    foundsomething! = TRUE;
    CALL Header("Relační model - " + Conv$(Boxname));
    CALL Title ("Relační model", Conv$(Boxname));
  END

  //display a dummy title if the relational model does not exist
  IF NOT foundsomething! THEN
    CALL Header("Relační model - " + name$);
    CALL Title ("Relační model", name$);
  END

  IF foundsomething! THEN
    FOR Relarea WHERE Name = name$ DO
      //this element has only one page
      CALL RelareaMap(Name, x%, y%);
      PRINT {HTML} "<P ALIGN=CENTER><IMG SRC=" + Str$(Object) + ".png BORDER=0 usemap=""#map""></P>", NL;
      
      //general object data
      CALL GenObjectData(Object, TRUE, TRUE);
      PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;

      //description of the object, if avialable
      CALL GetSystemProperty("WebPubDescriptionPage", sepPage$);
      IF hasText THEN
        IF sepPage$ = "TRUE" THEN
          PRINT {HTML} Anchor$("<B>Popis</B>", "", "desc" + Str$(Relarea.Object) + ".htm");
          PRINT {HTML} "<BR>",NL;
          PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;
        ELSE
          IF Text <> "" THEN
            dummy$ = Text;
            PRINT dummy$;
            PRINT {HTML} "<BR>",NL;
            PRINT {HTML} "<HR SIZE=""1"" COLOR=""#3366CC"">", NL;
          END
        END
      END

      //two column table with userdefined properties of the element - one line per property
      CALL GenUserdefinedProperties(Object);
    
      //list of relations contained within relarea with primary key and their attributes and associated entities or rships
      CALL H2_TopSpaceless("Relace");
      foundrelation! = FALSE;
      FOREACH RelNode WHERE Area = Relarea.Name ORDER BY Relation DO
        foundrelation! = TRUE;
        BREAK;
      END

      IF foundrelation! THEN
        PRINT {HTML} "<TABLE NOWRAP VALIGN=BASELINE>",NL;
        PRINT {HTML} " <TR>",NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP COLSPAN=2><FONT SIZE=2 FACE=""Verdana, Arial""><B>Název</B></FONT></TH>",NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B>Primární klíč<BR>Attributes</B></FONT></TH>",NL;
        PRINT {HTML} " <TH ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial""><B>Entita/<BR>Relační vztah</B></FONT></TH>",NL;
        PRINT {HTML} " </TR>",NL;

        FOREACH RelNode WHERE Area = Relarea.Name ORDER BY Relation DO
          FOR Relation WHERE Name = RelNode.Relation DO
            PRINT {HTML} " <TR>", NL;
            //column "Name"
            PRINT {HTML} " <TD ALIGN=CENTER VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            PRINT {HTML} "<IMG SRC=""bullet.gif"">";
            PRINT {HTML} "</FONT></TD>", NL;
            PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            PRINT {HTML} Anchor$("<B>"+Conv$(Boxname)+"</B>", "", Str$(Object) + ".htm");
            PRINT {HTML} "</FONT></TD>", NL;

            //column "Primary key attributes"
            first! = TRUE;
            foundkey! = FALSE;
            PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            FOREACH Relattribute WHERE Relation = Relation.Name
                                 AND Pkey <> 0 ORDER BY Position DO
              foundkey! = TRUE;
              IF NOT first! THEN
                  PRINT {HTML} "<BR>", NL;
              END
              PRINT {HTML} Anchor$(Name, "", Str$(Object) + ".htm");
              first! = FALSE;
            END
            //if primary key doesn't exist empty column for relattributes
            IF NOT foundkey! THEN
              PRINT {HTML} " <CENTER>-</CENTER>";
            END
            PRINT {HTML} "</FONT></TD>", NL;
            
            //column Entity Type/Rship
            PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
            
            IF Relation.Entity <> "" OR Relation.Rship <> 0 THEN
              IF Relation.Entity <> "" THEN
                  FOR Entity WHERE Name = Relation.Entity DO
                      PRINT {HTML} Anchor$(Conv$(Boxname), "", Str$(Object) + ".htm");
                  END
              ELSIF Relation.Rship <> 0 THEN
                  FOR Rship WHERE Id = Relation.Rship DO
                      IF Rship.Name <> "" THEN
                          PRINT {HTML} Name;
                      ELSE
                          firstErcon! = TRUE;
                          // erconnections of cardinality sz, ge, as cannot be associated to a relation
                          // and are not considered here
                          FOREACH Erconnection AS ERCON WHERE Rship = Rship.Id ORDER BY Entity DO
                              IF NOT firstErcon! THEN
                                  PRINT {HTML} ", ";
                              END
                              FOR Entity WHERE Entity.Name = ERCON.Entity DO
                                  PRINT {HTML} Anchor$(Conv$(Boxname), "", Str$(Object) + ".htm");
                              END
                              IF Name <> "" THEN
                                  PRINT {HTML} " ", Conv$(Name), " ";
                              ELSE
                                  PRINT {HTML} " má vztah s ";
                              END
                              PRINT {HTML} "(", Cardinality, ") ";
                              c% = 0;
                              FOREACH Erconnection WHERE Rship = ERCON.Rship
                                                   AND NOT Entity = ERCON.Entity DO
                                  FOR Entity WHERE Name = Erconnection.Entity DO
                                      IF c% > 0 THEN
                                          PRINT {HTML} " a ";
                                      END
                                      PRINT {HTML} Anchor$(Conv$(Boxname), "", Str$(Object) + ".htm");
                                  END
                                  c% = c% + 1;
                              END
                              firstErcon! = FALSE;
                          END
                      END
                  END
              END
            ELSE // no associated entity type or relationship
              PRINT {HTML} "<CENTER>-</CENTER>";
            END
            PRINT {HTML} "</FONT></TD></TR>", NL;
          END
        END
        //complete table
        PRINT {HTML} "</TABLE><BR>", NL;

        //relationships - done as a large table
        CALL H2_TopSpaceless("Relační vztahy");
        foundrelship! = FALSE;
        FOREACH Rellink WHERE Area = Relarea.Name DO
            foundrelship! = TRUE;
            BREAK;
        END

        IF foundrelship! THEN
          PRINT {HTML} "<TABLE BORDER=0 WIDTH=620 NOWRAP VALIGN=BASELINE>",NL;
          //dummyrow just for proper formatting the table
          PRINT {HTML} " <TR>",NL;
          PRINT {HTML} " <TD VALIGN=TOP WIDTH=""180""></TD>",NL;
          PRINT {HTML} " <TD VALIGN=TOP WIDTH=""120""></TD>",NL;
          PRINT {HTML} " <TD VALIGN=TOP WIDTH=""250""></TD>",NL;
          PRINT {HTML} " </TR>",NL;
          PRINT {HTML} " <TR>",NL;
          foundrelship! = FALSE;
          FOREACH Relnode WHERE Area = Relarea.Name ORDER BY Relation DO
            FOREACH Relrship WHERE Source = Relnode.Relation ORDER BY Source, Target, Name DO
              FOR Relnode AS TargetNode WHERE Relation = Target AND Area = Relnode.Area DO
                counter% = 0;
                FOREACH Rellink WHERE Area = Relarea.Name AND Source = Relnode.Relation
                                                          AND Target = Targetnode.Relation
                                                          ORDER BY Target DO
                  counter% = counter% + 1;
                  IF counter% < 2 THEN
                    //relationship of the two tables to each other
                    //left side (source)
                    FOR Relation WHERE Name = Relrship.Source DO
                      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                      PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=TOP> ";
                      PRINT {HTML} Anchor$("<B>" + Conv$(Relation.Boxname) + "</B>","", Str$(Relation.Object) + ".htm");
                      PRINT {HTML} "</FONT></TD>",NL;
                    END
                    //middle (relationship)
                    IF Relrship.Cardinality="11" THEN
                      img$="Pfeil1.gif";
                    ELSIF Relrship.Cardinality="1m" THEN
                      img$="Pfeil2.gif";
                    ELSIF Relrship.Cardinality="1c" THEN
                      img$="Pfeil3.gif";
                    ELSIF Relrship.Cardinality="cc" THEN
                      img$="Pfeil4.gif";
                    ELSIF Relrship.Cardinality="1x" THEN
                      img$="Pfeil5.gif";
                    ELSIF Relrship.Cardinality="cx" THEN
                      img$="Pfeil6.gif";
                    ELSIF Relrship.Cardinality="c1" THEN
                      img$="Pfeil7.gif";
                    ELSIF Relrship.Cardinality="cm" THEN
                      img$="Pfeil8.gif";
                    ELSIF Relrship.Cardinality="mn" THEN
                      img$="Pfeil9.gif";
                    ELSIF Relrship.Cardinality="mx" THEN
                      img$="Pfeil10.gif";
                    ELSIF Relrship.Cardinality="xm" THEN
                      img$="Pfeil11.gif";
                    ELSIF Relrship.Cardinality="xx" THEN
                      img$="Pfeil12.gif";
                    ELSE
                      img$=Relrship.Cardinality; //broken link in case of error
                    END
                    PRINT {HTML} " <TD ALIGN=CENTER><IMG SRC=""",img$, """</TD>",NL;
                    //right side (target)
                    FOR Relation WHERE name=Relrship.Target DO
                      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                      PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=TOP> ";
                      PRINT {HTML} Anchor$("<B>" + Conv$(Relation.Boxname) + "</B>","", Str$(Relation.Object) + ".htm");
                      PRINT {HTML} "</FONT></TD>",NL;
                    END
                
                    //start next row with detail information about the name of relationship (in the middle)
                    PRINT {HTML} " <TR>",NL;
                    PRINT {HTML} " <TD></TD>",NL;
                    PRINT {HTML} " <TD ALIGN=CENTER VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                    PRINT Conv$(Relrship.Boxname);
                    PRINT {HTML} "</FONT></TD>",NL;
                    PRINT {HTML} " <TD></TD>",NL;
                    PRINT {HTML} " </TR>",NL;
                
                    //another new row - this time with the headlines for the primary and foreign keys
                    PRINT {HTML} " <TR>",NL;
                    PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                    PRINT {HTML} "<B>Primární</B>";
                    PRINT {HTML} "</FONT></TD>",NL;
                    PRINT {HTML} " <TD></TD>",NL;
                    PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                    PRINT {HTML} "<B>Cizí</B>";
                    PRINT {HTML} "</FONT></TD>",NL;
                    PRINT {HTML} " </TR>",NL;
                
                    //new row - list all source and target attributes
                    foundrelshipattrib! = FALSE;
                    FOREACH Relrshipattribute WHERE Source = Relrship.Source
                                                AND Target = Relrship.Target
                                                AND Rship = Relrship.Name
                                                ORDER BY Targetattribute DO
                      foundrelshipattrib! = TRUE;
                      PRINT {HTML} " <TR>",NL;
                      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                      PRINT Sourceattribute;
                      PRINT {HTML} "</FONT></TD>",NL;
                      PRINT {HTML} " <TD></TD>",NL;
                      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                      IF Targetattribute <> "" THEN
                        PRINT Targetattribute;
                      ELSE
                        PRINT {HTML} "není určeno";
                      END
                      PRINT {HTML} "</FONT></TD>",NL;
                      PRINT {HTML} " </TR>",NL;
                    END
                    IF NOT foundrelshipattrib! THEN
                      PRINT {HTML} " <TR>",NL;
                      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                      PRINT {HTML} "není určeno";
                      PRINT {HTML} "</FONT></TD>",NL;
                      PRINT {HTML} " <TD></TD>",NL;
                      PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                      PRINT {HTML} "není určeno";
                      PRINT {HTML} "</FONT></TD>",NL;
                      PRINT {HTML} " </TR>",NL;
                    END
                 
                    //new row - list all integrity rules
                    PRINT {HTML} " <TR>",NL;
                    PRINT {HTML} " <TD ALIGN=LEFT VALIGN=TOP><FONT SIZE=2 FACE=""Verdana, Arial"">";
                    PRINT {HTML} "<BR><B>Pravidla integrity:</B><BR><BR>";

                    Bits$ = "";
                    CALL Number2Bitmask(Relrship.Integrity, Bits$);
                    IF Mid$(Bits$, 1, 1) = "1" THEN
                      PRINT "delete(cascades)", NL;
                    ELSIF Mid$(Bits$, 2, 1) = "1" THEN
                      PRINT "delete(restricted)", NL;
                    ELSIF Mid$(Bits$, 3, 1) = "1" THEN
                      PRINT "delete(nullifies)", NL;
                    END
                    IF Mid$(Bits$, 4, 1) = "1" THEN
                      PRINT "update(cascades)", NL;
                    ELSIF Mid$(Bits$, 5, 1) = "1" THEN
                      PRINT "update(restricted)", NL;
                    ELSIF Mid$(Bits$, 6, 1) = "1" THEN
                      PRINT "update(nullifies)", NL;
                    END

                    PRINT {HTML} "</TD>",NL;
                    PRINT {HTML} " <TD></TD>",NL;
                    PRINT {HTML} " <TD></TD>",NL;
                    PRINT {HTML} " </TR>",NL;

                    // relationship semantic
                    IF RelRship.hasText THEN
                        PRINT {HTML} " <TR>", NL;
                        PRINT {HTML} " <TD COLSPAN=3><FONT SIZE=2>";
                        IF sepPage$ = "TRUE" THEN
                          PRINT {HTML} Anchor$("Popis", "", "desc" + Str$(RelRship.Object) + ".htm");
                        ELSE
                          dummy$ = RelRship.Semantic;
                          PRINT dummy$;
                        END
                        PRINT {HTML} " </FONT>", NL;
                        PRINT {HTML} " </TD>", NL;
                        PRINT {HTML} " </TR>", NL;
                    END
                
                    //new, but last row - this time a small horizontal ruler
                    PRINT {HTML} " <TR>",NL;
                    PRINT {HTML} " <TD COLSPAN=3>";
                    PRINT {HTML} "<HR SIZE=1 NOSHADE COLOR=""#3366cc"">";
                    PRINT {HTML} "</TD>",NL;
                    PRINT {HTML} " </TR>",NL;
                  END
                END
              END
            END
          END
          PRINT {HTML} "</TABLE>",NL;
        ELSE
          PRINT {HTML} "Diagram neobsahuje žádné relační vztahy.<BR>",NL;
        END
      ELSE
        PRINT {HTML} "Diagram neobsahuje žádné relace.<BR>",NL;
      END

      //Data elements of Rnodes
      PRINT {HTML} "<BR>",NL;
      CALL H2_TopSpaceless("Datové elementy");
      datenelement$ = "";
      FOREACH Relnode WHERE Area = Relarea.Name ORDER BY Relation DO
        FOR Relation WHERE Name = Relnode.Relation DO
          first! = TRUE;
          FOREACH Relattribute WHERE Relation = Relation.Name ORDER BY Data DO
            FOR Data WHERE Name = Relattribute.Data DO
              IF first! THEN
                  CALL H3(Conv$(Relation.Boxname));
                  first! = FALSE;
              END
              IF datenelement$ <> Boxname THEN
                PRINT {HTML} "<IMG SRC=""bullet.gif"" ALIGN=TOP> ";
                PRINT {HTML} Anchor$("<B>" + Boxname + "</B>", "", Str$(Object) + ".htm");
                PRINT {HTML} "<BR>",NL;
                datenelement$ = Boxname;
              END
            END
          END
        END
      END
      IF datenelement$ = "" THEN
        PRINT {HTML} "Relační model nemá žádné reference na datové elementy.<BR><BR>",NL;
      END

    END
  ELSE
    CALL H2_Spaceless("V projektu není relační model daného jména.");
    PRINT {HTML} "<BR>",NL;
  END
  CALL Footer("");
END


Generováno: 16.10.2003 7:41 Systém: C:\Documents and Settings\hajsman\Dokumenty\Vyuka\Irs2\Projekt case40\Projekt03.csf Generováno systémem case/4/0
Vygeneroval: Administrator Soubor: C:\Documents and Settings\hajsman\Dokumenty\Vyuka\Irs2\Projekt case40\html\31460.htm (C) microTOOL GmbH 2002