sql - 数据库中的建模类(class)和先决条件

标签 sql database-design model

基本场景:我有学生、类(class)和类(class)要求需要存储在数据库中。

有人对存储这些内容和遍历类(class)先决条件的最佳方式有任何见解吗?

1)简单示例:

  • C:数学 100,先决条件:无
  • C:数学 150,先决条件:无
  • C:数学 200,先决条件:数学 101、数学 150

学生A完成了数学100,如何通过数据库查询判断他是否有资格参加CS200?

2)更复杂的例子:

  • C:Chem 100,先决条件:无
  • C:化学 200,先决条件:化学 100
  • C:化学 201,先决条件:化学 200
  • C:化学 202,先决条件:化学 200
  • C:Chem 300,先决条件:Chem 200、Chem 201、Chem 202 中的任意两个

学生 B 完成了 Chem 100、Chem 200、Chem 203。您如何检查他是否有资格参加 Chem 300?

如何在数据库中对先决条件层次结构进行建模?任何建议、链接、引用都将受到欢迎。

最佳答案

有一些事情您没有考虑过,例如需要定义的实体,它们隐含在您的问题中。请允许我包括一些内容,但不要被它们分散注意力,我正在关注您提出的问题。您现在可以放心地忽略成绩、老师等,并在未来考虑它们。

Typical Data Model for a College

IDEF1X Notation,对于那些需要符号解释的人。

  • 除非需要,否则不需要添加代理键,因为自然键变得太大而无法带入子级中;我并没有在每张 table 上盲目地将它们标记为PK。无论如何,考虑的是物理层面,而不是逻辑层面。

  • 我曾经为本地一所大学建模过 RDb。我认为除了诸如“任何两个......”之类的先决条件之外,您可能还需要“以及至少一个......”,所以我有提供这些的任意组合。

  • 必备条件包含可能的必备条件的完整列表

    • IsMandatory 标识必要条件是满足“至少其中一项......”所必需的必备条件;其余的则不是,并且属于“任意两个......”

    • Grade 允许将最低等级指定为必需条件 。

  • Course.NumRequisite 标识可能需要的Requisites 的数量,如“任意两个”。 ..”

如果您需要 SQL 代码来导航结构,请询问。

关于sql - 数据库中的建模类(class)和先决条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149216/

相关文章:

mysql - 从现有的 MySql 数据库创建 SQL Server 数据库

sql - 设计支持多语言的数据库

mysql - 需要对 MySQL 索引做一些澄清

ruby-on-rails - 如何从父模型类调用 before_save 方法?

ExtJs 模型代理与商店代理

java - 如何在Java中保存每个字段的变量查询结果?

SQL 计数 where 子句

sql - 涉及三个不同表的 SELECT 语句

sql-server - 如果是 DATETIME 或 DATETIME2,为什么索引可能不会做太多事情,因为它们包含时间部分?

c++ - QGLViewer 的替代品