When design the tables I get doubt (below is the pseudo-code) :
Node Table {
  id: number,
  label: string
}
Comb Table {
  id: number,
  label: string
}
Link Table {
  source: // Here it can be an instance of the Node table or an instance of the Comb table
  target: // Here it can be an instance of the Node table or an instance of the Comb table
}
Excuse me, when we define the Link table, do we have to define it with only 4 fields?
Link Table {
  nodesource: Node,
  nodetarget: Node,
  combsource: Comb,
  combtarget: Comb, 
}
the actual code:
export enum EdgeType {
  NodeToNode = 'NodeToNode',
  NodeToComb = 'NodeToComb',
  CombToComb = 'CombToComb',
  CombToNode = 'CombToNode'
}
@Entity()
export class Link {
  @PrimaryGeneratedColumn()
  id: number | undefined
  // type
  @Column({
    type: 'enum',
    enum: LinkType,
    nullable: false,
    default: LinkType.NodeToNode
  })
  type!: LinkType
  // Node:source
  @OneToOne(type => Node)
  @JoinColumn()
  nodeSource?: Node
  // Node:target
  @OneToOne(type => Node)
  @JoinColumn()
  nodeTarget?: Node
  // Combo:source
  @OneToOne(type => Comb)
  @JoinColumn()
  combSource?: Comb
  // Combo:target
  @OneToOne(type => Comb)
  @JoinColumn()
  combTarget?: Comb
whether cannot be defined like this:
@Entity()
export class Link {
  @PrimaryGeneratedColumn()
  id: number | undefined
  @OneToOne(type => Node|Comb)
  source: Node | Comb
  @OneToOne(type => Node|Comb)
  target: Node | Comb
The idea here was to use a more generic approach where the source and target fields could directly accept either a Node or a Comb instance.
But I don't know this approach whether supported by the database or the typeORM framework.

