最近クロージャテーブルを使い始めて、単純な親子関係を人から系統に変換するときはうまくいきましたが、今は祖父母親子関係と曾祖父母親子関係を変換しなければなりません。おそらくそれよりも長い関係を閉鎖テーブルに入れます。これは、関係を引き出すために必要なテーブルです。
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
);
私が抱えている最大の問題は、grandparent-child のエントリの正しい長さを保存することです。これは長さ 2 である必要があります。Grandparent-parent と parent-child は両方とも 1 であり、それぞれが自分自身に関連付けられると長さ 0 になります (子-子、親子など)。クエリでこれを行うことはできますか、それとも何らかのプログラムが必要ですか?