「単純な」家系図を必要とするアプリケーションがあります。家族のメンバーから1つのIDを指定して、家族全体のデータを取得するクエリを実行できるようにしたいと思います。養子縁組やその他の曖昧さを考慮する必要がないので、私は単純だと言います。アプリケーションの要件は次のとおりです。
- 同じ遺伝子系統の2人は繁殖できません
- 新しい家系の追加を許可する必要がある(以前の家族がいない新しい人)
- クエリを介して兄弟、親を個別にプルできる必要があります
データベースの適切な構造を考え出すのに問題があります。これまでに2つの解決策を考え出しましたが、それらはあまり信頼性が低く、おそらくすぐに手に負えなくなるでしょう。
解決策1では、family_idsフィールドをpeopleテーブルに配置し、一意のファミリIDのリストを保存します。2人が繁殖するたびに、リストは互いにチェックされ、IDが一致しないことを確認します。すべてがチェックアウトされると、2つのリストがマージされ、子のfamily_idsフィールドとして設定されます。
例:
Father (family_ids: (null)) breeds with Mother (family_ids: (213, 519)) ->
Child (family_ids: (213, 519)) breeds with Random Person (family_ids: (813, 712, 122, 767)) ->
Grandchild (family_ids: (213, 519, 813, 712, 122, 767))
などなど...これで私が目にする問題は、時間が経つにつれてリストが不当に大きくなることです。
ソリューション2は、cakephpの関連付けを使用して次のことを宣言します。
public $belongsTo = array(
'Father' => array(
'className' => 'User',
'foreignKey' => 'father_id'
),
'Mother' => array(
'className' => 'User',
'foreignKey' => 'mother_id'
)
);
ここで、recursiveを2に設定すると、母親と父親の結果、母親と父親の結果などが取得されます。このルートの問題は、データがネストされた配列にあり、コードを効率的に処理する方法がわからないことです。
誰かが私が達成したいことを処理するための最も効率的な方法の方向に私を導くことができれば、それは非常に役に立ちます。どんな助けでも大歓迎です、そして、私は誰でも持っているどんな質問にも喜んで答えます。どうもありがとう。