SQL数据库:表列与其自身具有关系

时间:2018-10-06 09:11:24

标签: sql database-design database-normalization

晚安,我在这里有一个问题。我试图建立一个简单的注册系统,所以我想出了一个“主题”表。问题在于此主题表具有一个前提条件列,即该值是同一表中的另一个主题。

E.g
| subID    | title         | prerequisite   |
|    345   | math54        | 555            |
|    555   | physi43       | null           |

我的问题是我做对了吗?在我看来,这不是因为我根本无法做出外键。更糟糕的是,一个主题我具有多个先决条件值

2 个答案:

答案 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型表,这意味着该依赖项有一个有效的结束日期。但是,这对于您现在正在做的工作可能会很复杂。