我已经创建了一个用于学校计算 (CIS) 的数据库,并且我有一些额外的要求需要从以下信息中添加。我创建了一个 ERD,但感觉我犯了一些错误,例如递归关系的基数?
如有任何其他反馈,我们将不胜感激。
新要求 CiS 希望使用该数据库通过网站在线共享 session 、参与者等详细信息。任何参与者——学生志愿者、学校工作人员、SHU 讲师——都可以使用用户名(或者可能是电子邮件地址)和密码登录。登录后,成员会以不同的方式使用该网站(学校工作人员请求类(class),SHU 讲师进行管理,学生志愿者查看他们可以参加的内容,确认他们的可用性,然后检查时间是否正确)。 CiS 希望能够通过站点共享资源。资源是在 session 中有用或通常对 CiS 目的有用的文件。创建此类文件的成员上传它们,数据库保存 URL、文件标题、描述等详细信息,并跟踪文件的作者。 成员(member)可以上传文件,成员(member)可以为文件添加标签、给予星级评级并发表评论。
• 标签是用户分配给文件的关键字。一个文件可以有多个标签;一旦有人用关键字标记了一个文件,其他人就不需要再次用相同的关键字标记同一个文件。
• 星级。任何网站成员都可以对任何文件进行评分,但不能重新对他们已评分的文件进行评分。
• 评论没有这样的限制,因为它们最终形成关于每个文件的讨论,因此站点成员可以撰写关于文件的许多评论。了解每个文件评论的日期、作者和主题将很有帮助。
最佳答案
您的图表不是 ERD。特别是,使用线条来表示关系将您限制为二元关系,并且失去了实体关系模型的大部分表达能力。
通过使用用户名
和密码
的组合作为用户表中的主键,您可以允许不同的用户使用相同的用户名
code> 使用不同的密码。这是你想要的吗?但是,在 Upload file
表中,您只存储 Author_username
,因此您可能只需要 Username
作为键?你需要在这里保持一致。
您的上传文件
表需要分成多个。目前,它仅支持每个文件/用户名一个标签、一个评级和一个评论。目前尚不清楚 Author_username
是否表示上传文件的用户或对文件进行标记、评分和评论的用户。顺便说一句,这些东西在表中链接在一起,防止用户发布比评级更多的标签或评论。 文件标题
和文件描述
可能仅依赖于文件URL
,并且如果存储多个标签、评级或评论,则会重复,从而导致不一致的风险。
编辑:
既然您在评论中要求提出建议,我建议:
- 使用 Chen 的 ERD 表示法,或者至少使用形状来表示关系并支持三元和更高关系的变体。更好的方法是 Object-Role Modeling .
- 仅使用
用户名
作为 4 个用户表的主键。 将
上传的文件
拆分为下表:已上传文件(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/