类先决条件的数据库设计

时间:2010-11-06 14:27:23

标签: mysql database-design relational-database

我目前正在研究一个示例类注册系统,我需要维护它的先决条件。我必须在页面上显示类先决条件作为布尔表达式。 例: 如果学生正在查看A类,则必须将先决条件显示为(B AND C)或D

我不知道如何处理这个问题。

到目前为止的设计: 一个班级有很多部分。 类(* deptartment,class_number *,description)

斜体是主键。任何建议如何处理先决条件??

课程示例数据: (CMSC,201,编程1) (CMSC,202,编程2) (CMSC,203,离散结构) (CMSC,341,数据结构)

3 个答案:

答案 0 :(得分:1)

部分与先决条件无关。

这听起来像是一对多的关系。

我不确定通过成绩是否需要成为先决条件的一部分。如果是,您还有更多工作要做,因为您需要使用Student和ReportCard表来管理先决条件。

答案 1 :(得分:1)

要添加duffymo建议的一对多关系,请为该关系添加分组。然后,组ID将成为您的括号。所以你的桌子看起来像这样:

class_id, prereq_group, prereq_id
1, 1, B
1, 1, C
1, 2, D

prereq_group只需要在class_id中是唯一的,并且可以是序号。如果prereqs具有相同的组ID,那么它们将是AND。不同的组ID将是OR。所以在上面的例子中,它将是(B AND C)OR(D)。

答案 2 :(得分:0)

看起来像一个非常重要的设计案例...就iv看到的DB设计而言,没有单一的连接条件而不会失去1NF。

建议的解决方案可以在不丢失1NF的情况下运行多个自连接 -

假设上课你的意思是...... 先决条件(prerequisite_id(PK),class_no *(FK),关系,Linked_Prerequisites(FK)*)

如果Linked_Prerequisites为null,我们可以继续使用特定class_no下的所有可用行来查找所有先决条件。

例如

Prerequisites(prerequisite_id,class_with_prerequisite,class_id_of_prerequisite, relationship, linked_prerequisites)
1,1,2,and,2
2,1,3,null,null
3,1,4,or,null

--------------

Class(*deptartment, class_number*(pk), description) 
12,1,classA
12,2,classB
12,3,ClassC
12,4,ClassD
--------------

使用此功能,您可以创建有向图。最初,您可以从先决条件中选择数据,使它们具有非空数据,然后将其与自身连接以在其自身内创建层次结构。

如果你自己维护数据,你可以操纵它来在一个单级的有向图上工作,你只需用它来编写一个级别的连接。