键应该是INDICES还是复合主键

时间:2020-01-02 06:44:23

标签: mysql

我有一个带有父子表的架构。 父母记录,可能有很多孩子(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;

1 个答案:

答案 0 :(得分:1)

由于它是一对多的而不是很多对很多的,因此在子表中添加parent_id就足够了。