我如何解决外键没有索引父?

ycggw6v2  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(381)

在过去的两天里,我自己才开始学习sql,现在我遇到了一个使用外键约束在不同表上链接列的问题。下面是我的代码。

CREATE TABLE analytics (
    id INT NOT NULL,
    status BOOLEAN,
    server_id INT,  /* link with server info*/     
    source_id INT,      /*link with input source*/
    ext VARCHAR(5),
    startframe_id_x INT,
    endframe_id_x INT,
    mask VARCHAR(20),
    label VARCHAR(20),
    countline INT,
    det_deviceid INT,
    processing_period TIME,
    PRIMARY KEY(id),
    FOREIGN KEY (server_id) REFERENCES server_info(id),
    FOREIGN KEY (source_id) REFERENCES input_source(id)
);

CREATE TABLE statistics (
    id INT NOT NULL,
    source_id INT,  /*link with input source*/
    analytic_id INT, /*link with analytic*/
    time_recorded TIMESTAMP,
    duration TIME,   /*link with analytics processing period*/
    counter INT,
    PRIMARY KEY (id),
    FOREIGN KEY (source_id) REFERENCES input_source(id),
    FOREIGN KEY (analytic_id) REFERENCES analytics(id),
    FOREIGN KEY (duration) REFERENCES analytics(processing_period)
);

问题发生在这条线上

FOREIGN KEY (duration) REFERENCES analytics(processing_period)

我不确定,花了无数个小时寻找解决方案,但仍然无法解决它。
它发出这样的错误 "ER_FK_INDEX_PARENT: Failed to add the foreign key constraint. Missing index for constraint 'statistics_ibfk_3' in the referenced table 'analytics'" 任何人都能说出这个问题发生的原因吗?我用popsql来编辑我的代码和使用mysql数据库。
希望能有一些解释或解决办法。

8wigbo56

8wigbo561#

您的第二张table应该如下所示:

CREATE TABLE statistics (
    id INT NOT NULL,
    source_id INT,  /*link with input source*/
    analytic_id INT, /*link with analytic*/
    time_recorded TIMESTAMP,
    counter INT,
    PRIMARY KEY (id),
    FOREIGN KEY (source_id) REFERENCES input_source(id),
    FOREIGN KEY (analytic_id) REFERENCES analytics(id)
);

请注意 duration 已删除。如果需要处理周期,则使用 JOIN 与…相匹配 analytics table。

相关问题