前提・実現したいこと
競馬の血統表をDBで作りたいです。下記のようなものです。
https://db.netkeiba.com/horse/ped/2018105233/
ある馬(A)が産んだ子供をフィルターする、等も行いたいです。
子が親の情報を持つ事を実現するにはどのようにすればよいのでしょうか。
(FW/ツールのバージョンなど)
Nodejs / TypeScript / MySQL / TypeORM
試したこと
- ツリー構造
子(ツリーでいう親)が親(ツリーでいう子)の情報を持つ、と思っていたのですが逆でした。
馬を新たに追加したい場合、親(ツリーで言う子)を書き換えなければいけないので使えないと思いました。
- 隣接リスト
隣接リストを書き
typescript
1@Entity() 2export class Horse extends BaseEntity { 3 @ManyToOne(() => Horse) 4 father: Horse; 5 6 @OneToMany(() => Horse, (horse) => horse.father) 7 fathers: Horse[]; 8 9 @ManyToOne(() => Horse) 10 mother: Horse; 11 12 @OneToMany(() => Horse, (horse) => horse.mother) 13 mothers: Horse[]; 14}
findOneで取得しようとするもundefinedが帰ってきてしまいました。
typescript
1 const childHorse = await entityManager.findOne(Horse, { id: 3 }); 2 3 //{"id":3,"birthday":"2021-04-12","origin":"test"} 4 console.log(JSON.stringify(childHorse)); 5 6 // undefined 7 console.log(JSON.stringify(childHorse.father)); 8 9 // undefined 10 console.log(JSON.stringify(childHorse.mother));
phpmyadminで確認すると、idらしきものが格納されているのですが・・・・。
また、隣接リストもダメでしたが、それなら
typescript
1 @Column({type: "int"}) 2 fatherID: number 3 4 @Column({type: "int"}) 5 motherID: number
のようにするのが一番簡単かなと思ったのですが、ある馬(A)が産んだ子供をフィルターする等の処理を行いたいのです。
この設計で問題ないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。