2012-10-11 98 views
5

Explicar el diagrama.SQL: impone cardinalidad con aserciones

dos entidades: E1 E2 &

Cardinalidad:

-desde E1 a E2 (a través de relación R): (6,50)

-desde E2 a E1 (a través de relación R) : (3,5)

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

supone que debo cumplir cardinalidad pero el libro no bucear demasiado en detalles afirmación. ¿Sería esta una forma correcta de hacer cumplir dicha cardinalidad?

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); 
+0

no sé de cualquier DBMS que realmente apoya las afirmaciones –

+0

no puede ver cómo esto se puede hacer cumplir, ya que no se puede insertar simultáneamente en 2 mesas – RichardTheKiwi

+0

@RichardTheKiwi: Este es uno de los usos comunes de las restricciones y transacciones diferidas. – beldaz

Respuesta

3

No conozco ningún DBMS que haya implementado aserciones. La sintaxis se puede comprobar en 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 
      ) 
     ) ; 
Cuestiones relacionadas