5

来解释图。

两个实体:E1 和 E2

基数:

- 从 E1 到 E2(通过关系 R):(6,50)

- 从 E2 到 E1(通过关系 R):(3,5)

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

我应该强制执行基数,但本书并没有深入探讨断言细节。这是执行上述基数的正确方法吗?

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 );
4

1 回答 1

3

我不知道任何已实现断言的 DBMS。可以在Mimer 在线 SQL-92 语法验证器中检查语法:

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
            ) 
        ) ;
于 2012-10-11T18:16:33.703 回答