족보 ERD를 짜면서 많은 고민이 있었다.

처음엔 왼쪽처럼 구성을 해보았지만, 어떤 족보는 성씨 이후 본관에서 파가 나눠지지 않고 한줄기로 내려오는 곳도 있다고 한다.
그리고 분파를 하였다가 또 분파가 되는경우를 담아내기엔 적절해보이는 구성이 아니라고 생각을 했다.
차라리 본관과 분파를 한테이블에서 구성하고 상위 파가 없다면 본관으로 생각하는 방식으로 다시 구성을 해보았다.

이게 좋은 구조인지 아닌지 아직은 잘 모르겠다.
이 구조에 데이터를 넣어보고 싶은데 족보를 가지고 있지 않으니 가상의 인문들을 생성해서 한번 넣어보자.
이름 생성기를 통해 여러 이름들을 받아보자
이름들 = [안윤지, 하은식, 서창현, 손하준, 황혜진, 임민용, 추창하, 표은석, 하광민, 유성수, 고지훈, 서은하, 배명숙, 강혜연, 추지원, 안소희, 복우일, 유연자, 남궁현영, 정효남]
자자 이 이름들을 가지고 잘 구성해보자.
일단은 아내를 적지 않고 해보자.

데이터를 적절하게 넣어보았다.
DELIMITER //
CREATE PROCEDURE GetFamilyTree(IN start_member_id INT)
BEGIN
DROP TABLE IF EXISTS family_tree_results;
CREATE TABLE family_tree_results AS
SELECT member_id, origin_number, clan_number, generation, member_name, father, origin_clan_id
FROM family_member
WHERE member_id = start_member_id;
REPEAT
INSERT IGNORE INTO family_tree_results
SELECT fm.member_id, fm.origin_number, fm.clan_number, fm.generation, fm.member_name, fm.father, fm.origin_clan_id
FROM family_member AS fm
JOIN family_tree_results AS h ON h.member_id = fm.father
WHERE fm.member_id NOT IN (SELECT member_id FROM family_tree_results);
UNTIL ROW_COUNT() = 0 END REPEAT;
SELECT * FROM family_tree_results;
DROP TABLE family_tree_results;
END //
DELIMITER ;

항렬부분에서 조금 뭔가 맞지않게 넣었지만 일단 이건 테스트를 하는 도중엔 크게 영향이 없다.
이제 이 데이터를 이용해서 페이지에 어떻게 표현해야할지 고민할 차례이다.