我正在学习有关数据库系统的 ER 建模。我的问题是有一个实体称为书籍,实体名为用户,我想在用户和书籍之间创建具有属性发行日期的借阅关系。我按照描述对其进行建模,但有人指出借用不能是关系,因为同一个用户可以借一本书两次。谁能解释一下这是什么,因为我使用问题数据作为属性,因此借用关系中的记录不会发生冲突,因为我将使用 PK 作为用户 ID、书籍 ID 和发行日期。我怎样才能准确地建模呢?我对此有点困惑。
2 回答
在 ER 模型中,实体关系由单个实体集的属性组成,其中 PK 仅标识一个实体集。关系关系具有表示两个或多个实体集的复合 PK。
您的问题使用表示两个实体集(userid
和bookid
)和一个值集(issue date
)的复合 PK。严格来说,既不是实体关系,也不是关系关系。它是关系关系(两个实体键)和弱实体集(issue date
功能类似于弱键)的组合。如果我们想有创造力,我们可以称之为弱关系。
如果我被迫为此绘制 ER 图,我可能会这样呈现:
ER 模型不是一个完整的逻辑模型(与关系模型不同),并且有些情况没有很好地处理或根本没有处理。这是其中一种情况。
根据描述,User和Book是实体。
一个用户可以借阅一本书。同理,一个用户可以借阅多个实例,可以是同一个实例,也可以是多个实例。
所以用户和书之间的每笔交易都有发行日期。用户和图书都没有发行日期。
在这里, User和Book之间的关系是Many to Many。
Bridge 表是Transaction。_ 我们也可以根据您的兴趣将其命名为 Borrow。
现在,用户有一对多的交易。每本书都有一对多的交易。
每笔交易都是用户和书的组合。
注意:因为每个用户都可以在同一天多次拥有同一本书。因此,我们可以拥有 user_id、book_id 和 Issue_timestamp 的复合主键,因为同一组合中的 Issue Date 可能存在冗余。