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
ERModel_RelationalModel_Connection_Rships
(Connection ER Model - Relational Model)


Vytvořeno: 09-21-2001 13:22:03
Poslední změna: 11-29-2002 12:33:23

Modul

Module: Connection ER Model - Relational Model

Zdrojový kód:

PROCEDURE ERModel_RelationalModel_Connection_Rships(ermArea$, relArea$, bCheck!)
BEGIN
/* ***************************************************************************
    
    ***************************************************************************
    (Created 09/19/2001 mT)
    ***************************************************************************/
        
    IF bCheck! THEN
        PRINT {BOLD,"ARIAL",11} "Vztahy ER modelu bez odpovídajících vztahů relačního modelu", NL;
    ELSE
        PRINT {BOLD,"ARIAL",11} "Vztahy ER modelu s odpovídajícími vztahy relačního modelu", NL;
    END

    bOutput! = FALSE;
    FOREACH Entity ORDER BY Name DO
        FOREACH Erconnection AS Erc1 WHERE Erc1.Entity=Entity.Name
                               AND NOT Erc1.Cardinality="ge"
                               AND NOT Erc1.Cardinality="as" DO
            
            out1$ = ""; out2a$ = ""; out2b$ = ""; out3a$ = ""; out3b$ = ""; out4b$ = "";
            bErr! = FALSE;
            FOR Rship WHERE Rship.Id=Erc1.Rship DO
                
                FOREACH Rnode WHERE (Rnode.Area=ermArea$ OR ermArea$ = "")
                                AND Rnode.Rship=Rship.Id DO
                    
                    CALL GetErmRelationshipName(Erc1.Entity, Erc1.Rship, Erc1.Erconnectionno, out1$);
                    
                    rla1Name$ = "";
                    FOR Relation WHERE Entity = Entity.Name DO
                        rla1Name$ = Relation.Name;
                    END
                    
                    IF Rship.Type = 1 THEN
                        // Generalisierungen
                        FOR Erconnection AS Erc2 WHERE Erc2.Rship= Rship.id
                                                   AND Erc2.Cardinality = "ge" DO
                  
                            bFound! = FALSE;
                            IF NOT Rship.Private THEN
                                FOR Relrship WHERE Relrship.Entity = Erc2.Entity
                                               AND Relrship.Rship = Erc2.Rship
                                               AND Relrship.Erconnectionno = Erc2.Erconnectionno
                                               AND Relrship.Target = rla1Name$ DO
                                    bFound! = TRUE;
                                    CALL GetRelrshipName(Relrship.Source, Relrship.Target, Relrship.Name, out2a$);
                                    IF relArea$ <> "" THEN
                                        CALL CheckRellinkExist(relArea$, Relrship.Source, Relrship.Target, Relrship.Name, bRllExist!);
                                        IF NOT bRllExist! THEN
                                            bErr! = TRUE;
                                            out4b$ = "(není v diagramu)";
                                        END
                                    END
                                END
                                IF NOT bFound! THEN
                                    bErr! = TRUE;
                                    out2b$ = "(nemá odpovídající vztah)";
                                END
                            ELSE
                                out2b$ = "(problem domain)";
                            END
                            
                        END
                    ELSE
                        // Standard- und Assoziations-Beziehungen
                        c% = 0; ca% = 0;
                        bAsso! = FALSE;
                        FOREACH Erconnection AS Erc WHERE Erc.Rship = Rship.Id DO
                            IF Erc.Cardinality = "as" THEN
                                bAsso! = TRUE;
                            ELSE
                                c% = c% + 1;
                                IF Instr(Erc.Cardinality, "M") > 0 OR Instr(Erc.Cardinality, "N") >0 THEN
                                ca% = ca% + 1;
                                END
                            END
                        END
                        
                        IF c% = 2 OR c% = ca% THEN
                            // Zweistellige Beziehungen
                            FOREACH Erconnection AS Erc2 WHERE Erc2.Rship= Rship.id
                                                     AND Erc2.Erconnectionno <> Erc1.Erconnectionno
                                                     AND Erc2.Cardinality <> "as" DO
                                
                                bFound! = FALSE;
                                IF NOT Rship.Private THEN
                                    FOR Relrship WHERE Relrship.Entity = Erc1.Entity
                                                       AND Relrship.Rship = Erc1.Rship
                                                       AND Relrship.Erconnectionno = Erc1.Erconnectionno DO
                                        bFound! = TRUE;
                                        CALL GetRelrshipName(Relrship.Source, Relrship.Target, Relrship.Name, out2a$);
                                        IF relArea$ <> "" THEN
                                            CALL CheckRellinkExist(relArea$, Relrship.Source, Relrship.Target, Relrship.Name, bRllExist!);
                                            IF NOT bRllExist! THEN
                                                bErr! = TRUE;
                                                out4b$ = "(není v diagramu)";
                                            END
                                        END
                                    END
                                    IF NOT bFound! AND NOT (Instr(Erc1.Cardinality, "M") > 0 OR Instr(Erc1.Cardinality, "N") >0) THEN
                                        FOR Relrship WHERE Relrship.Entity = Erc2.Entity
                                                       AND Relrship.Rship = Erc2.Rship
                                                       AND Relrship.Erconnectionno = Erc2.Erconnectionno DO
                                            bFound! = TRUE;
                                            CALL GetRelrshipName(Relrship.Source, Relrship.Target, Relrship.Name, out2a$);
                                            IF relArea$ <> "" THEN
                                                CALL CheckRellinkExist(relArea$, Relrship.Source, Relrship.Target, Relrship.Name, bRllExist!);
                                                IF NOT bRllExist! THEN
                                                    bErr! = TRUE;
                                                    out4b$ = "(nejsou v diagramu)";
                                                END
                                            END
                                        END
                                
                                    END
                                    IF NOT bFound! THEN
                                        bErr! = TRUE;
                                        out2b$ = "(nemá odpovídající vztah)";
                                    END
                                    IF bFound! AND NOT bAsso! AND
                                        (Instr(Erc1.Cardinality, "M") > 0 OR Instr(Erc1.Cardinality, "N") >0) AND
                                        (Instr(Erc2.Cardinality, "M") > 0 OR Instr(Erc2.Cardinality, "N") >0) THEN
                                        bRlaFound! = FALSE;
                                        FOR Relation WHERE Rship = Rship.Id DO
                                            out3a$ = "Assoziative Relation: " + Conv$(Relation.Boxname);
                                            bRlaFound! = TRUE;
                                        END
                                        IF NOT bRlaFound! THEN
                                            bErr! = TRUE;
                                            out3b$ = "(odpovídající relace neexistuje)";
                                        END
                                    END
                                ELSE
                                    out2b$ = "(problem domain)";
                                END
                            END
                            
                        ELSE
                            // mehrstellige Beziehungen
                            bErr! = TRUE;
                            out2b$ = "(není vyhodnoceno!)";
                        END
                    
                    END
                    BREAK;
                END
            END
            
            IF out1$ <> "" AND (NOT bCheck! OR bErr!) THEN
                bOutput! = TRUE;
                PRINT {BOLD,"ARIAL", 10} out1$;
                IF out2a$ <> "" THEN
                    PRINT {"ARIAL", ITALIC, 10} TAB(32), out2a$, NL;
                END
                IF out2b$ <> "" THEN
                    PRINT {"ARIAL", 10} TAB(32), out2b$, NL;
                END
                IF out3a$ <> "" THEN
                    PRINT {"ARIAL", ITALIC, 10} TAB(32), out3a$, NL;
                END
                IF out3b$ <> "" THEN
                    PRINT {"ARIAL", 10} TAB(32), out3b$, NL;
                END
                IF out4b$ <> "" THEN
                    PRINT {"ARIAL", 10} TAB(32), out4b$, NL;
                END
            END
            
        END
    END
    
    IF NOT bOutput! THEN
        IF bCheck! THEN
            PRINT {"ARIAL", 11} TAB(4), "Nenalezena relace bez vazby.", NL;
        ELSE
            PRINT {"ARIAL", 11} TAB(4), "Nenalezena žádná relace.", NL;
        END
    END
    
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\149188468.htm (C) microTOOL GmbH 2002