您是否可以在表中使用主键INT来引用MySQL中的另一个表名?

时间:2017-03-22 23:11:57

标签: mysql sql database

基本上我有一个第一个表,它有一些简单的信息可以存储在一列中,第二个表是一个大的二维数组。

我的第一个表中的每一列都对应于二维数组中的所有数据,所以因为我不想为第二个表中的每一行重复第一个表信息,所以我想创建一个主键到链接这两个表。

由于我的第二个表中的所有数据都与我的第一个数据相对应,因此如果我可以使用表名本身而不是任何值来链接这两个表,那将会很棒。

这可能吗?我只见过外键值与另一个表中的主键相对应。

1 个答案:

答案 0 :(得分:2)

MySQL不要求外键引用主键,它甚至不必是唯一键。它只需要一个索引。因此,对于2-D数组的每一行,您的第二个表可以具有非唯一array_id列,并且第一个表可以具有此外键。

CREATE TABLE table1 (
    id INT PRIMARY KEY,
    notes INT,
    time INT,
    ...,
    CONSTRAINT (notes) FOREIGN KEY REFERENCES table2 (array_id),
    CONSTRAINT (time) FOREIGN KEY REFERENCES table2 (array_id),
    ...
);

CREATE TABLE table2 (
    array_id INT,
    row INT,
    column INT,
    value INT
    PRIMARY KEY (array_id, row, col)
);

因此,如果您希望获取与notes中特定行相关的table1数组,则可以执行以下操作:

SELECT t2.*
FROM table1 AS t1
JOIN table2 AS t2 ON t1.notes = t2.array_id
WHERE t1.id = @id