【问题标题】:Correct relations to Loans table?与贷款表的正确关系?
【发布时间】:2021-01-24 22:26:45
【问题描述】:

堆垛机你好!

我已经建立了一个图书馆数据库,我想知道.. 我正在复制和贷款之间建立一对一的关系。以及从用户到贷款的一对多关系。

由于一次只能为一本书的副本分配一笔贷款,并且一次贷款应该只能包含一本书的副本。如果他们租用其他书籍,那就是多次贷款。

一个用户应该可以进行多笔贷款,但一个贷款只能分配给一个特定的用户。

我目前这三个表之间的关系是否正确? 如果没有,我很想知道如何解决它,以及我在这个问题上的逻辑失败的原因。

提前谢谢你!

【问题讨论】:

  • 对我来说看起来不错,但是为了证明您的逻辑,您可能需要 Loans 表上的条件唯一索引
  • 这是错误的——你并没有真正改变你之前关于关系的问题。但是你应该有一些基本的用例来评估你的设计。其中之一应该是这样的:用户 x 签出书 y 并返回它。用户 Y 在这本书被归还后的第二天查看了这本书。你的设计支持这个吗?应用相同的过程来生成您的用例并验证所有其他关系。
  • 我使用“错误”一词是因为这是图书馆的主要目的之一——一遍又一遍地借出同一本书。随着时间的流逝,该系统还必须满足许多其他条件才能正常工作。书籍丢失、被卖掉、停止流通等。贷款没有按时归还。贷款延期。书籍并不是图书馆借出的唯一物品。有些东西他们根本不借——比如期刊。这些是基本设计的明显复杂性,但没有人知道您的最终目标是什么。

标签: sql sql-server foreign-keys relationship database-diagram


【解决方案1】:

从前面的答案继续。如果您添加一个 User_Roles 表,它可能/(将)防止您陷入会员陷阱。如果您假设具有 Admin 角色的用户可以执行只有 Basic 角色的用户的每个功能,那么需要角色检查的每个功能都必须具有可接受的角色列表(Admin + Basic)。很多时候,直接将所有不同的角色(即基本和管理员)分配给各个用户会更有效。然后,当一项功能需要基本角色授权时,所有用户都可以以同样的方式对待。从长远来看,它更简单。

Loans 表存在许多问题。首先,没有主键,为了与您设计的其余部分保持一致,它可以是 LoanID。 CopyID 应该是 Copies 表的外键(可能是当前绘制的)。

您的数据模型的一种“高级”或现代方法可能是使用时态表对副本进行建模。由于单个副本只能借出 1 次,因此可以将借出的属性添加到副本表中。然后,无论何时对 System Version'ed Copies 表进行更改,Copies_history 表都会自动记录所有先前的贷款活动。

【讨论】:

    【解决方案2】:

    我觉得这个模型不错。您可能需要在逻辑中应用一些内容,以强制用户只能通过同一本书获得一次贷款。

    用户可以一次又一次地借出一份副本吗?然后关系到贷款复制1:M

    【讨论】:

    • 嗯..他可以借给它..但是如果他想重新借给它,他必须在状态从借出到不借出后这样做..我的意思是,那么他有再次借给它..但这使它成为不同的贷款,我猜?也这样,我将能够追踪他借了多少贷款,即使是同一本书的副本?
    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2021-09-07
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多