PHP   发布时间:2022-04-06  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – 书籍,作者,出版商和书架用户的数据库架构大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我无法找到建立表之间关系的有效方法.我希望有一个书籍,作者,出版商和注册并拥有书架的用户数据库(阅读,正在阅读,想要阅读(或计划阅读)).我希望用户能够选择他们阅读,想要阅读或正在阅读的书籍.

附:我知道数据库表关系中的PK和FK.

编辑:也许这是一个更好的方法

然后我将使用“状态”=(阅读,植物阅读和当前阅读) – 请告诉我这是否好又有效!

@R_301_1964@:

你需要书籍和作者之间的N:M链接,因为一本书可能有多个作者,每个作者可能写过不止一本书.在RDBMS中,这意味着您需要一个write_by表.

然而,书籍和出版商之间的联系是不同的.任何给定的图书只能有一个出版商(除非在您的系统中,不@R_482_11197@的图书被视为同一本书).所以你需要的只是书籍中的publisher_id外键

最后,最重要的是,您正在关注读者/用户.他们与书籍的关系.当然,这也是N:M关系.我当然希望人们阅读不止一本书(我们都知道如果你只读过一本书会发生什么……)当然,一本书不止一本人阅读.这需要book_users连接表.这里真正的问题是,如何设计它.有三种基本设计.

>按关系类型分隔表. (由@just_somebody概述)优点:你只有INSERTS和deletES,永远不会更新.然这看起来很整洁,并且在某种程度上有助于查询优化,但大多数情况下,除了展示大型数据库图表之外,它没有任何实际用途.
>一个带状态指示器的表. (由@Hardcoded概述)优点:您只有一个表.缺点:您将拥有INSERTS,updatES和deletES – RDBMS可以轻松处理的内容,但由于各种原因(后面会有更多内容)存在缺陷.此外,单个状态字段表示一个读者只能与该书有一个连接在任何时候,意味着他只能在任何时间点处于plan_to_read,is_reading或has_read状态,并且它会假定发生这种情况的时间顺序.如果那个人计划再次阅读,或暂停,然后从开头等重读,这么简单的一系列状态指示器很容易就会失败,因为突然之间那个人现在正在读书,但也已经读完了.对于大多数应用程序而言,这仍然是一种合理的方法,并且通常有设计状态字段的方法,因此它们是互斥的.
>一个日志.您将每个状态作为表中的新行插入 – 书籍和阅读器的相同组合将不止一次出现.您使用plan_to_read和时间戳插入第一行.另一个有is_reading.然后另一个有has_read.优点:您只需要INSERT行,就可以得到完整事件的简洁年表.缺点:交叉表连接现在必须处理比上面更简单的方法更多的数据(并且更复杂).

你可能会问自己,为什么要强调你在什么情况下插入,更新或删除?简而言之,无论何时运行updatE或deletE语句,您实际上很可能会丢失数据.那时你需要停止在你的设计过程中思“我在这里失去了什么?”在这种情况下,您将失去事件的时间顺序.如果用户使用他们的书籍是您的应用程序的中心,您可能希望收集尽可能多的数据.即使现在无关紧要,这也是可能让您稍后进行“魔术”的数据类型.您可以了解某人阅读的速度,完成一本书所需的尝试次数等等.所有这些都无需向用户询问任何额外的输入.

所以,我的最终答案实际上是一个问题:

编辑

由于可能不清楚日志的外观以及它的运行方式,下面是这样一个表的示例:

create table users_reading_log (
  user_id INT,
  book_id INT,
  status ENUM('plans_to_read', 'is_reading', 'has_read'),
  ts timestAMP DEFAULT Now()
)

现在,无论何时书籍的状态发生变化,您都不会更新设计模式中的“user_read”表,而是在日志中插入相同的数据,现在这些数据填充了信息年表:

INSERT INTO users_reading_log SET 
  user_id=1,
  book_id=1,
  status='plans_to_read';

当那个人真正开始阅读时,你会做另一个插入:

INSERT INTO users_reading_log SET 
  user_id=1,
  book_id=1,
  status='is_reading';

等等.现在你有一个“事件”数据库,由于时间戳列自动填充,你现在可以告诉发生了什么.请注意,此系统不能确保只存在一个特定用户帐簿对的“is_reading”.有人可能会停止阅读,然后继续阅读.你的联接必须虑到这一点.

大佬总结

以上是大佬教程为你收集整理的php – 书籍,作者,出版商和书架用户的数据库架构全部内容,希望文章能够帮你解决php – 书籍,作者,出版商和书架用户的数据库架构所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:作者