如何解决需要帮助来理解在多对多表之间建立关系的正确方法
我需要知道我在许多表之间建立的关系是否正确。 Books_Authors =书籍应该可以有多个作者,作者应该可以被分配给多个书籍,对吗?
贷款表,我的坚信是,一个用户应该能够进行多笔贷款,但是一本书的一本只能一次借出一次。对吗?
我的关系和键是否正确设置以支持这种逻辑?
解决方法
首先,设计非常好!您肯定在正确的轨道上。几个(有意见的(这是您可以做的最好的事情,因为没有一个完美的设计))注释:
- 每个表应具有主键。交叉引用表Book_Authors和Book_Categories当前没有PK。我会向每个表添加一个附加的代理主键,以及跨交叉引用列的唯一列约束。
- 用户当前仅限于1个角色。这可能导致必须处理过程代码中的层次结构。最好使用imo创建User_Roles表。
- 在当前缺少的地方添加其他CreatedDate列。
- 为具有PK的表添加唯一约束。例如,书籍可能具有唯一性(书籍名称和作者)。
- “贷款”表也可以/也应该具有实际的返回日期。
一般而言,这似乎是一个不错的开始。
在“份数”表上的收货非常好-我认为大多数人会错过第一次尝试的机会。
多对多表(Books_Authors和贷款)中的正确关系(外键)存在一些问题-我建议您看看它们。
我认为您需要考虑的问题之一是“我们是要数据仅代表当前状态还是要保留历史记录?”
您对此的回答将影响设计-特别是在“副本和贷款”表周围。
如果您仅代表当前状态,则可能不需要“贷款”表。相反,只需针对每个副本保存User_ID和相关日期。借出后,更新用户ID和日期;返回时,这些日期为NULL。
但是,如果您想要一个历史记录(我想是这样),那么您可能需要开始添加一些内容
- 贷款-贷款状态。这可以通过日期(输入/输出)来推断,但是具有状态通常也很有用。而且,当丢失一本书并且有人付费更换它时会发生什么?
- 考虑一下贷款的PK-如果某人多次借用同一本书(对不起,同一本书的副本,一段时间内多次借用),您将如何存储?
- 份数-状态。当他们迷路或被撕碎以致必须丢弃时会发生什么? (还有其他可能的状态,例如,当您预订书籍副本时会发生什么情况?)
- 份数-链接到该书的实际物理副本的一种方式(在过去的图书馆中,它们是粘贴在书脊上的条形码)
还有两件事要考虑
- 您的图书有一个“作者”字段,然后是多对多作者。可以...但是可能不是您想要的
- 图书馆(至少在过去使用过)对图书使用杜威十进制系统吗?您可能也要添加它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。