我目前正在研究一个示例类注册系统,我需要维护它的先决条件。我必须在页面上显示类先决条件作为布尔表达式。 例: 如果学生正在查看A类,则必须将先决条件显示为(B AND C)或D
我不知道如何处理这个问题。
到目前为止的设计: 一个班级有很多部分。 类(* deptartment,class_number *,description)
斜体是主键。任何建议如何处理先决条件??
课程示例数据: (CMSC,201,编程1) (CMSC,202,编程2) (CMSC,203,离散结构) (CMSC,341,数据结构)
答案 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
--------------
使用此功能,您可以创建有向图。最初,您可以从先决条件中选择数据,使它们具有非空数据,然后将其与自身连接以在其自身内创建层次结构。
如果你自己维护数据,你可以操纵它来在一个单级的有向图上工作,你只需用它来编写一个级别的连接。