족보 ERD

song4·2023년 9월 11일

족보 프로젝트

목록 보기
2/5

족보 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 ;

항렬부분에서 조금 뭔가 맞지않게 넣었지만 일단 이건 테스트를 하는 도중엔 크게 영향이 없다.

이제 이 데이터를 이용해서 페이지에 어떻게 표현해야할지 고민할 차례이다.

0개의 댓글