0

在此处输入图像描述

我需要知道我在多对多表之间建立的关系是否正确。Books_Authors = 书籍应该可以有多个作者,作者应该可以分配给多个书籍,对吗?

贷款表,我的建议是一个用户应该能够进行多次贷款,但一本书的副本应该一次只能借一次。正确的?

我的关系和密钥设置是否正确以支持这种逻辑?

4

2 回答 2

0

首先,设计非常好!你在正确的轨道上,这是肯定的。一些(自以为是(这是你能做的最好的,因为没有一个完美的设计))评论:

  1. 每个表都应该有一个主键。交叉引用表 Book_Authors、Book_Categories 当前没有 PK。我将向每个表添加一个额外的代理主键以及跨越交叉引用列的唯一列约束。
  2. 用户目前仅限于 1 个角色。这可能导致必须处理过程代码中的层次结构。imo 最好创建一个 User_Roles 表。
  3. 在当前缺少的地方添加其他 CreatedDate 列。
  4. 向具有 PK 的表添加唯一约束。例如,书籍可能具有唯一性(书名和作者)。
  5. 贷款表也可以/应该有实际的归还日期。
于 2020-10-09T13:41:08.813 回答
0

作为一般方法,这看起来是一个很棒的开始。

'Copies' 表上非常好的拾取 - 我想大多数人会错过第一次尝试。

您的多对多表(Books_Authors 和 Loans)中的正确关系(外键)存在一些问题 - 我建议您看看它们。

我认为您需要考虑的问题之一是“我们是否希望数据仅代表当前状态,还是我们也希望保留历史记录?”

您对此的回答将影响设计——尤其是在副本和贷款表周围。

如果您只代表当前状态,那么您可能不需要 Loans 表。相反,针对每个副本,只需保存 User_ID 和相关日期。借出时,更新用户 ID 和日期;返回时,将这些日期设为 NULL。

但是,如果您想要历史记录(我猜您会这样做),那么您可能需要开始添加一些内容

  • 贷款 - 贷款状态。这可以通过日期(进/出)来推断,但拥有状态通常也很有用。此外,当一本书丢失并且有人付费更换它时会发生什么?
  • 想想贷款的 PK - 如果有人多次借同一本书(对不起 - 同一本书的副本,随着时间的推移多次),你将如何存储它?
  • 副本 - 状态。当他们迷路或者他们变得如此破烂以至于必须丢弃时会发生什么?(还有其他可能的状态,例如,当您预订书籍副本时会发生什么?)
  • 副本——以某种方式链接到书的实际物理副本(在过去的图书馆中,它们是粘贴在书脊上的条形码)

需要考虑的其他几件事

  • 你的书有一个“作者”字段,然后是多对多的作者。这没关系......但可能不是你想要的
  • 图书馆(至少在过去)对书籍使用杜威十进制系统?您可能也想添加它。
于 2020-10-09T13:47:37.463 回答