我的ER图是否正确?为什么要使用关系?

Kes*_*shi 4 mysql erd database-design mysql-workbench database-diagrams

这是我第一次为将在 MySQL 上构建的数据库制作实体关系图 (ERD)。相关的业务领域是设备问题管理

在此之前,我永远不会在表之间创建关系,我只会在 MySQLAdmin 中创建表并在我的 PHP/MySQL 代码中进行链接。

我应该建立这些关系有什么理由吗?

我已经阅读了很多关于数据库设计和关系的信息。

我想确保我创建的 ERD 是正确的;我犯错了吗?或者有更好的方法来做到这一点?

正在考虑的 ERD

http://i.stack.imgur.com/XzGWz.png

我的数据库应该做什么:

  1. 我有一个可以创建票证 (issue_tickets) 的用户(用户)列表。
  2. 他们会描述问题,可能会添加一些文件(issue_files)。
  3. 然后将附加其他用户(issue_watchers)来解决问题。
  4. 所有用户(users)都可以对票证(issue_tickets)发表评论。
  5. 一张票 (issue_tickets) 一次只有一个状态 (issue_status)。
  6. 一张票 (issue_tickets) 只有一个类别 (issue_category)。
  7. 一张票(issue_tickets)可以有很多评论(issue_comments)和很多观察者(issue_watchers)
  8. 一张票 (issue_tickets) 只有一个创建该票的用户 (users)。
  9. 一张票(issue_tickets)只适用于一个设备(equipment)。
  10. 一个用户可以创建多张票
  11. 一个设备可以有很多张票

HLG*_*GEM 8

期望从应用程序维护 PK/FK 关系是一种非常糟糕的做法。在任何非平凡的数据库中,数据有接近 100% 的机会被其他来源更改,包括临时查询、数据导入等。不负责任的认为数据库中的数据受到保护,因为应用程序有保护。当然,您认为您将通过 Web 服务或其他类似服务强制进行所有更改,但实际情况是,没有人会从您刚购买的那家公司添加一百万条新客户记录,通过一项服务一次添加一条记录。您的数据库的设计必须考虑到人们会直接在源头或通过其他应用程序(其中一些可能无法使用您的 Web 服务)更改它的事实。此外,应用程序界面通常比数据更有可能被丢弃或重新设计,当发生这种情况时,您可能会丢失全部或部分数据完整性规则。在设计数据库时,您必须考虑如何随着时间的推移保护数据,而不是考虑对程序员或初始应用程序来说最简单和最方便的方法。数据专业人员在数据库中设置 PK/FK 关系,因为这是数据所在的位置,也是设置它以保护数据质量的最佳位置。

在我目前的职位上,我看到来自许多不同公司的数据,而且我看到太多没有在数据库中建立 PK/FK 关系的数据,因为它们存在数据完整性问题,而正确设计的数据库不会有这些问题。