使用表来维护另一个表的相关记录的最佳方法是什么。
示例:
mytbl
-----
id sku
1 sk1
2 sk2
3 sk3
4 sk4
5 sk5
6 sk6
7 sk7
让我们说记录1,4和3是“相关的” 所以我想保持一张表告诉我他们是。
relatedTbl
----------
sku related_sku
sk1 sk3
sk1 sk4
sk3 sk4
此解决方案可行,但有更好的解决方案吗?
编辑:我在relatedTbl中使用了skus,但我知道我可以(更好)使用id。问题是关于表的结构而不是使用的外键。
答案 0 :(得分:1)
您有正确的解决方案。如您所示,使用ID。如果sku是唯一的,请考虑将其用作天然PK。
CREATE TABLE IF NOT EXISTS `mytbl` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`sku` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `relatedTbl` (
`mytbl_id` INT UNSIGNED NOT NULL,
`mytbl_id1` INT UNSIGNED NOT NULL,
PRIMARY KEY (`mytbl_id`, `mytbl_id1`),
INDEX `fk_mytbl_has_mytbl_mytbl1_idx` (`mytbl_id1` ASC),
INDEX `fk_mytbl_has_mytbl_mytbl_idx` (`mytbl_id` ASC),
CONSTRAINT `fk_mytbl_has_mytbl_mytbl`
FOREIGN KEY (`mytbl_id`)
REFERENCES `mytbl` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_mytbl_has_mytbl_mytbl1`
FOREIGN KEY (`mytbl_id1`)
REFERENCES `mytbl` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
答案 1 :(得分:0)
您可能需要考虑在“mytbl”中添加第三个字段,以存储常用记录的唯一键。例如,字段3将被命名为“uniqID”,而记录1,4和3将与该表“相关”:
MYTBL
id sku uniqID
1 sk1 1
2 sk2
3 sk3 1
4 sk4 1
5 sk5
6 sk6
7 sk7
然后,您可以在select语句的末尾使用'WHERE uniqID = 1'子句来获取公共属性