我有一个带有父子表的架构。 父母记录,可能有很多孩子(1对很多) 为了链接这些文件,第三个表具有父记录和子记录的PRIMARY KEY。 该链接表是否应具有复合主键? 还是应该仅仅是两个FOREIGN KEY,每个都带有INDEX()?
CREATE TABLE parent(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
) ENGINE=INNODB;
CREATE TABLE child(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
) ENGINE=INNODB;
因此,链接表应该像..
CREATE TABLE parent_child_link(
parent_id INT NOT NULL,
child_id INT NOT NULL,
INDEX(parent_id),
INDEX(child_id),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE,
FOREIGN KEY (child_id) REFERENCES child(id) ON DELETE CASCADE
) ENGINE=INNODB;
或者应该是
CREATE TABLE parent_child_link(
parent_id INT NOT NULL,
child_id INT NOT NULL,
PRIMARY KEY(parent_id, child_id)
) ENGINE=INNODB;
答案 0 :(得分:1)
由于它是一对多的而不是很多对很多的,因此在子表中添加parent_id
就足够了。