mysql - 递归关系的基数?

标签 mysql database recursion erd cardinality

我已经创建了一个用于学校计算 (CIS) 的数据库,并且我有一些额外的要求需要从以下信息中添加。我创建了一个 ERD,但感觉我犯了一些错误,例如递归关系的基数?

如有任何其他反馈,我们将不胜感激。

新要求 CiS 希望使用该数据库通过网站在线共享 session 、参与者等详细信息。任何参与者——学生志愿者、学校工作人员、SHU 讲师——都可以使用用户名(或者可能是电子邮件地址)和密码登录。登录后,成员会以不同的方式使用该网站(学校工作人员请求类(class),SHU 讲师进行管理,学生志愿者查看他们可以参加的内容,确认他们的可用性,然后检查时间是否正确)。 CiS 希望能够通过站点共享资源。资源是在 session 中有用或通常对 CiS 目的有用的文件。创建此类文件的成员上传它们,数据库保存 URL、文件标题、描述等详细信息,并跟踪文件的作者。 成员(member)可以上传文件,成员(member)可以为文件添加标签、给予星级评级并发表评论。

标签是用户分配给文件的关键字。一个文件可以有多个标签;一旦有人用关键字标记了一个文件,其他人就不需要再次用相同的关键字标记同一个文件。

星级。任何网站成员都可以对任何文件进行评分,但不能重新对他们已评分的文件进行评分。

评论没有这样的限制,因为它们最终形成关于每个文件的讨论,因此站点成员可以撰写关于文件的许多评论。了解每个文件评论的日期、作者和主题将很有帮助。

Additional requirements ERD!

最佳答案

您的图表不是 ERD。特别是,使用线条来表示关系将您限制为二元关系,并且失去了实体关系模型的大部分表达能力。

通过使用用户名密码的组合作为用户表中的主键,您可以允许不同的用户使用相同的用户名 code> 使用不同的密码。这是你想要的吗?但是,在 Upload file 表中,您只存储 Author_username,因此您可能只需要 Username 作为键?你需要在这里保持一致。

您的上传文件表需要分成多个。目前,它仅支持每个文件/用户名一个标签、一个评级和一个评论。目前尚不清楚 Author_username 是否表示上传文件的用户或对文件进行标记、评分和评论的用户。顺便说一句,这些东西在表中链接在一起,防止用户发布比评级更多的标签或评论。 文件标题文件描述可能仅依赖于文件URL,并且如果存储多个标签、评级或评论,则会重复,从而导致不一致的风险。

编辑:

既然您在评论中要求提出建议,我建议:

  1. 使用 Chen 的 ERD 表示法,或者至少使用形状来表示关系并支持三元和更高关系的变体。更好的方法是 Object-Role Modeling .
  2. 仅使用用户名作为 4 个用户表的主键。
  3. 上传的文件拆分为下表:

    • 已上传文件(File_URL PK、File_title、File_description、用户名 FK)
    • File_tags(File_URL PK/FK、标签 PK)
    • File_ ratings(File_URL PK/FK、用户名 PK/FK、评级)
    • File_comments(Comment_ID PK、File_URL FK、用户名 FK、评论、Created_at、Reply_to_comment_ID FK)

请注意,这只是解决我提出的问题的最小更改集,旨在用于教育目的,不一定是满足您要求的正确解决方案。

关于mysql - 递归关系的基数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42422370/

相关文章:

javascript - 我试图理解这个递归代码并且陷入困境

PHP mySQL完整性检查,查询错误

mysql - 无法从另一个表中操作为 true 的表中删除多行

java - 无法使用准备好的语句插入数据库

c# - 如何随时间更改数据库列值?

c - 为什么 C 中的递归会向后打印?

mysql - 删除了所有MySQL数据库,包括mysql,如何恢复?

关于存储过程定义的 MySQL 错误 1064

c# - 是否可以在文件中保存有关 mdf 文件的元数据?

node.js - NodeJS : Loop through nested JSON and remove elements based on a condition