【发布时间】:2013-08-30 18:23:22
【问题描述】:
我最近开始使用closure table,当我必须将简单的父子关系从人转换为血统时,它工作正常,但现在我必须转换祖父母-父母-孩子和曾祖父母-子关系,甚至可能比封闭表中的关系更长。这是我需要从中提取关系的表:
CREATE TABLE `person` (
`person` BIGINT UNSIGNED NOT NULL ,
`parent` BIGINT UNSIGNED NULL ,
PRIMARY KEY (`person`) ,
INDEX `idx_person_has_parent` (`parent` ASC),
CONSTRAINT `fk_person_has_parent`
FOREIGN KEY (`parent`)
REFERENCES `person` (`person`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
这是我需要转换的表格:
CREATE TABLE `lineage` (
`ancestor` BIGINT UNSIGNED NOT NULL,
`descendant` BIGINT UNSIGNED NOT NULL,
`length` INT UNSIGNED NOT NULL,
PRIMARY KEY (`ancestor`, descendant`),
CONSTRAINT `fk_ancestor_has_descendant`
FOREIGN KEY (`descendant`)
REFERENCES `person` (`person`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_descendant_has_ancestor`
FOREIGN KEY (`ancestor`)
REFERENCES `person` (`person`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
我遇到的最大问题是为祖父母-孩子的条目保存正确的长度,它应该是长度 2。祖父母和父母孩子都是 1,当与他们自己(孩子-孩子,父母-父母等)。我可以在查询中执行此操作还是需要某种程序?
【问题讨论】:
标签: mysql select foreign-keys relational-database hierarchy