Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The reverse kinship code issue #267

Closed
sudoghut opened this issue Jul 1, 2024 · 2 comments
Closed

The reverse kinship code issue #267

sudoghut opened this issue Jul 1, 2024 · 2 comments
Assignees

Comments

@sudoghut
Copy link
Member

sudoghut commented Jul 1, 2024

在設置反向親屬關係的時候發現了一個小問題,譬如郭氏(趙禎妻)(Guo Shi(Wife of Zhao Zhen ))- 4216 的曾祖父是郭崇(Guo Chong)- 10535

https://input.cbdb.fas.harvard.edu/basicinformation/4216/kinship/4216-10535-48/edit

如果我們在這個頁面中錄入從郭崇到郭氏的關係是曾孫女(SSD):

image

保存之後,他們的關係會自動從「曾孫女」變成「孫」:

image

並且這並不是顯示上的問題,從郭崇的頁面看郭氏的關係也是孫:https://input.cbdb.fas.harvard.edu/basicinformation/10535/kinship

這個 issue 就麻煩啦~~~ 感謝!

@sudoghut
Copy link
Member Author

sudoghut commented Jul 3, 2024

我看到了 L770 使用 c_created_date:

DB::table('KIN_DATA')->where([['c_kin_id',$id], ['c_personid', $old_kin_id], ['c_created_date', $c_created_date]])->update($data);

而看到 L768 和 L769 的 annotation, 讓我想到,可能當時負責開發的同事為了解某個 bug 而用了簡單暴力的處理方法。

還想和建安商量,是否方便正常地根據 KIN_DATA 表 primary keys 來找對應的關係。

首先,尋找的邏輯是:KIN_DATA 表中 primary keys 有 c_personid, c_kin_id, c_kin_code. 而成對的反向關係的 c_kin_code 需要到 KINSHIP_CODES 中尋找 c_kin_pair1 和 c_kin_pair2 對應的值。為什麼有 pair1 和 pair2 的原因是,如果正向關係是父親,那麼 pair 1 是男性親屬的關係(兒子),而 pair 2 是女性親屬的關係(女兒)。而有時候反向關係如果沒有女性,比如 A 是 B 二十世孫,而我們只有二十世祖(不分二十世祖和二十世祖母)。那麼這個二十世組就放在 pair 1 裡面。

第二,在梳理完邏輯之後,其實還有一個問題。這個問題是一對多的問題。比如父親對應的除了子和女之外,還可能對應長子,第二子,第三子,長女,次女,三女... 所以僅憑在 KIN_DATA 和 KIN_CODES 裡面的記錄確實是沒有辦法在完美找到對應的親屬關係。當時用 create date 也是一個聰明的辦法,但這並不是長久之計。

於是,其實我們在表的結構裡面本來就有一個欄位專門處理這個問題:KIN_DATA.c_autogen_notes. 這個欄位用來記錄自動創建時候成對的基於 primary keys.

所以想要拜託建安試試看,是否可以在親屬關係建立和修改的邏輯裡面重新加入 c_autogen_notes 的邏輯(建立成對關係時,兩個人都要自動更新這個欄位)。

最後,由於工作到現在,很多人物還沒有 c_autogen_notes 資訊。對於如何處理這些資訊。我有一些想法,但還是想先聽聽看建安會不會有自己的想法。無論是出現找不到唯一對應 pair 的時候(無論是找不到還是找到多個)提示報錯,要求用戶從對面的那個人物來修改。還是直接跳出一些可能個選項讓學者在當前界面下選擇對的記錄。或者其他的辦法都可以。

@s8714081
Copy link
Contributor

1.git創建branch issues267-patch1,處理需求〔The reverse kinship code issue #267〕。
2.檢測CBDB資料庫的KIN_DATA資料表,KIN_DATA資料表的primary key已經有做資料組合與檢查。
3.程式修正〔對應親屬人物〕的查詢方式,依據KINSHIP_CODES的c_kin_pair1和c_kin_pair2查詢。
4.資料更新之前,依據KINSHIP_CODES的c_kin_pair1和c_kin_pair2查詢,提前做一次〔對應親屬人物〕的查詢,檢查資料庫是否有0筆資料或多筆資料,並回應給使用者提示訊息。
5.主要修正kinshipUpdateById()與kinshipDeleteById(),已經依據KINSHIP_CODES的c_kin_pair1和c_kin_pair2做正確的查詢。
6.測試〔親屬〕介面的新增、修改、刪除、查詢,功能正常與資料正確。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants