数据库设计,如何在表中显示依赖?

时间:2014-03-15 08:08:20

标签: sql-server database

我的问题标题可能有点误导,因为我不知道怎么说出来。对不起。

我有一个名为course的表格,其中包含IDName列的课程列表

ID   Name
---- ---------
1    JAVA
2    C#
3    C++
4    HTML
5    PHP
6    JAVASCRIPT
7    HARDWARE
8    PERL
9    CSS

有一个简单的应用程序,学生询问他是否可以注册特定课程,然后系统将检查他是否已完成先决条件。要完成特定课程,您需要完成一个或多个先决条件。以下是一些愚蠢的例子:

  • 要做JAVA,你必须完成硬件和HTML
  • 要做C ++,你必须完成HARDWARE和PHP
  • 要做CSS,你必须完成JAVA

如何在数据库中显示此关系,是否需要添加新列才能实现此目的?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您需要引入一个名为CoursePreRequiste的第二个表。它可以包含以下列:

Id CourseId PreReqCourseId

样本条目

Id  CourseId  PreReqCourseId
--- --------- --------------
1   1         4
2   1         7

CourseId / PreReqCourseId组合必须在表格中定义为唯一。您当然可以取消第二列中的Id列,但我个人喜欢在我的所有列中使用Id,这样可以更轻松地更新表格。

答案 1 :(得分:0)

您需要在表设计中定义依赖关系。根据您的描述,您有以下条件:

  • 一门课程可能取决于很多
  • 一门课程可以是许多人的依赖

这是一个多对多关系,最好表示为一个额外的表,其中包含Foreign key到每个关系方(在您的情况下,两个都是课程,来自同一个表)。新表的设计应该像Raj在他的回答中强调的那样:

Id  CourseId  PreReqCourseId
--- --------- --------------
1   1         4
2   1         7
3   2         8
4   2         3

您需要稍后知道特定课程所依赖的课程是:

SELECT PreReqCourseId FROM ThisNewTable WHERE CourseId = @Value

请记住使用您要查找的课程的ID更改@Value,或者考虑将其用作参数(如C#或其他方式)