首页 > 解决方案 > 由两个主键标识的值的数据库设计

问题描述

我有一个 event_id、role_id 和 rank 表。下表应该有助于可视化我们期望的关于约束的各种结果:

   scenario    Event_Id    Role_Id    Rank
      1            1           1        1    good
      2            1           2        1    bad
      3            2           1        1    good

Event_Id 是 Event 表的主键。
Role_Id 是 Role 表的主键。
使用事件和角色,我们可以找到与该给定事件的该角色相关联的等级。

一个角色可以用于具有不同等级的多个事件(场景 1 和 3)
但是,对于同一事件,两个角色不应具有相同的等级。(场景 1 和 2)

我们如何建立这些约束,以便我们可以在给定事件中识别给定角色的等级,但角色的等级仅在该事件中是唯一的?

标签: databaserelational-databaserelational-algebrareferential-integritytuple-relational-calculus

解决方案


你需要有两个独特的约束。

第一个是您的“自然”候选键Event_Idplus Role_IdRank这意味着对于任何给定的事件和角色组合,您只有一个可能的值。

现在,要强制任何给定 Event 只能有一个具有给定 Rank 的 Role 的约束,您需要对plus的组合进行第二个唯一约束Event_IdRank


推荐阅读