3

如果我们在 UML 中有这样的东西:

| 冠军 | ---------------> | 团队 |

多重性:* --------> 5...*

每个冠军有5个或更多的球队,我们如何在T-SQL中控制这“五个或更多的球队”?

由于我们有一个多对多的关系,我们将有来自双方的 id 的中间表(例如:tbl_champ_team)。但是如何控制每个冠军应该有5个或更多的球队呢?

创建表时进行一些检查?一些触发器?

4

2 回答 2

1

简短的回答是,不,你不能通过检查约束来做到这一点。是的,您可以将触发器应用于相交表,以确保插入的行数为 5 或更多,尽管我强烈反对这一点。

在我看来,您所追求的是业务规则的实现,而不是数据规则,如果是这样,那么应该在那里进行验证。

于 2012-12-16T18:55:28.580 回答
0

一种方法(有点复杂)是有一个单独的表来实现这个约束。它将具有冠军 PK 列,其中 TeamA、TeamB、TeamC、TeamD 和 TeamE 作为不可为空的 FK,以及另一个表,其中包含您在问题中设想的所有团队。将 {Championship 和 TeamA} 之间的 5 个 FK 约束添加到多对多表中,并将 {Championship, TeamB} 到同一个表中,等等。

那么你不能在不填充五个球队属性的情况下创造一个冠军。这本身仍然不是 100% 准确的,因为它可以让您与两支或更多支球队作为同一支球队进入冠军赛,我想你不会想要的……我想不出一个消除这种可能性的方法。

于 2012-12-16T18:55:51.410 回答