晚安,我在这里有一个问题。我试图建立一个简单的注册系统,所以我想出了一个“主题”表。问题在于此主题表具有一个前提条件列,即该值是同一表中的另一个主题。
E.g
| subID | title | prerequisite |
| 345 | math54 | 555 |
| 555 | physi43 | null |
我的问题是我做对了吗?在我看来,这不是因为我根本无法做出外键。更糟糕的是,一个主题我具有多个先决条件值
答案 0 :(得分:0)
看来您的先决条件列不是必需的,因此让一条记录指向另一条记录不是问题。但是,如果您具有1:n关系,最好将辅助表与
一起使用MAIN_ID | PREREQUISITE_ID
允许您建立多种关系。如果您可以建立一个或一个关系,则可以使用MAIN_ID作为密钥;如果每个ID可以具有多个关系,则可以使用MAIN_ID + PREREQUISITE_ID。
答案 1 :(得分:0)
您正在尝试映射1:n关系。通常,您不会使用单个列来执行此操作。您可以使用Prerequisites
表来表达这一点:
create table prerequisites (
prerequisites_id int, -- auto-incremented, serial, identity
subject_id int references subjects(subject_id),
depends_on_subject_id int references subjects(subject_id)
);
由于课程会随时间变化,因此前提条件也可能会有所变化。这反过来建议使用2型表,这意味着该依赖项有一个有效的结束日期。但是,这对于您现在正在做的工作可能会很复杂。