Pergunta

To explain the diagram.

Two entities: E1 & E2

Cardinality:

-from E1 to E2 (through relation R): (6,50)

-from E2 to E1 (through relation R): (3,5)

 ______               ^              ______
|  E1  |___(6,50)____/R\____(3,5)___|  E2  |
|______|             \ /            |______|
                      v

I'm supposed to enforce cardinality but the book doesn't dive too much into ASSERTION details. Would this be a correct way to enforce said cardinality?

CREATE ASSERTION assert
CHECK ( (SELECT COUNT(E1.ID) FROM E1) >= 6  AND 
        (SELECT COUNT(E1.ID) FROM E1) <= 60 AND 
        (SELECT COUNT(E2.ID) FROM E2) >= 3  AND 
        (SELECT COUNT(E2.ID) FROM E2) <= 5 );
Foi útil?

Solução

I don't know of any DBMS that has implemented assertions. The syntax can be checked at Mimer online SQL-92 syntax validator:

CREATE ASSERTION assertion_R
  CHECK ( NOT EXISTS
            ( SELECT * 
              FROM E1 
                LEFT JOIN R
                  ON R.e1_id = E1.id
              GROUP BY E1.id
              HAVING COUNT(R.e1_id) NOT BETWEEN 6 AND 60
            )
       AND NOT EXISTS
            ( SELECT * 
              FROM E2 
                LEFT JOIN R
                  ON R.e2_id = E2.id
              GROUP BY E2.id
              HAVING COUNT(R.e2_id) NOT BETWEEN 3 AND 5
            ) 
        ) ;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top