mysql - 实现大学小组学习的数据库方案

标签 mysql sql database database-design

我对数据库还很陌生,因此我非常感谢任何有关这方面的帮助。

所以我在这里想做的是,我想创建一个数据库方案来帮助学生组织学习小组。

学生应该能够检查小组是否已存在,如果没有则创建它,并给出有关主题、位置、时间的一般描述,也许可以添加书籍资源等。

想要加入小组的学生应该能够搜索主题领域和特定主题,查看小组中已有多少人,如果适合就加入。

这些表格足以满足我想要实现的目标吗:

用户 = UID(主要和唯一)、姓名、学期、主题、主题领域

groups = GID(主要)、名称、主题、主题区域、描述、资源、 用户数量

成员资格 = UID(fk to users.UID), GID(fk to groups.GID)

另外,我如何保持 groups.NumberOfUsers 动态变化,具体取决于有多少用户拥有该特定组的成员资格?

有没有办法限制一个组可以拥有的用户数量?

干杯

最佳答案

是的,你基本上是对的,我已经编译了一些可以帮助你的数据库模式。

表:组

  • ID(PK| AI)
  • 名称(Varchar)
  • 说明(文本)
  • 创建者(INT | FK)
  • 其他信息...

对于特定组中的用户应该有一个数据透视表,让我们命名它, 表:user_groups

  • ID(PK| AI)
  • group_id(外籍)
  • user_id (FK)

对于群组资源(如书籍资源、视频等),您可以创建另一个数据透视表,如下所示: 表:groups_resources

  • ID(PK|AI)
  • group_id(外籍)
  • type (INT)//(可选,如果您想对上传的文件类型进行排序)状态:1 - 书籍,2 - 视频等
  • 路径(本地或外部)

对于您的 NumberOfUsers 问题,我建议不要保存,因为您可以通过简单的查询获取该信息,而不会因为该信息而“厌倦”您的数据库。 然而,如果你仍然想保存它,你可以简单地更新你的表,foreach插入到user_groups中..你的sql查询将是:

Update groups SET numberofusers = numberofuser + 1 WHERE id = ?;

附注- 在组中,您可以使用created_by,甚至声明一个新列(administrator_id)并分配该组的管理员,该管理员将具有编辑权限(正如您在脚本中计划的那样)。

关于mysql - 实现大学小组学习的数据库方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44282544/

相关文章:

php - PDO FETCH_INTO - 仅映射现有属性

MySQL 错误 - SQLSTATE [42000] : Syntax error or access violation: 1064

MySQL CLAUSE可以变成一个值吗?

java - Hibernate 中可选的一对一映射

php - Laravel:从数据库中检索未分配的记录

mysql - Rails 中的外部数据库关联。更新数据

mysql - 如何使用 Chive 添加外键?

php - MYSQL 表中的时间戳与 PHP 变量不工作之间的比较 - PHP MYSQL

mysql - 具有特定 LIMIT 的 SQL

mysql - SQL SELECT 如何仅获取事件记录