【发布时间】:2017-07-13 19:12:58
【问题描述】:
我有一种情况,我有一个基本类型,我们称之为Pet 类型(不是真正的类型,而是一个恰当的例子),以及这种类型的 6 个底层变体,它们都可以有自己的单独字段。假设它们是不同类型的宠物,例如Dog、Cat、Bird 等。现在它们都组织在同一个名为pets 的表中,但我认为我会从打破每种类型中受益输出到他们自己的表中(dogs、cats、birds 等),然后从主pets 表中继承字段。需要明确的是,我的每个子表都有独特的字段,不适用于任何其他子类型。
我正在使用database/sql,我查询数据如下:
var getPetsQuery = fmt.Sprintf(`SELECT %v FROM pets`)
func (tx *Tx) GetPets() (pets []*model.Pet, err error) {
return tx.petQueryRow(getPetsQuery)
}
func (tx *Tx) petQueryRow(query string, args ...interface{}) (pets []*model.Pet, err error) {
rows, err := tx.Query(query, args...)
if err != nil {
return nil, errors.Stacktrace(PetQueryFailedErr(err))
}
defer rows.Close()
for rows.Next() {
pet := &model.Pet{}
err = rows.Scan(
&pet.Id,
&pet.Uid,
&pet.Created,
&pet.Type,
&pet.LegCount,
)
results = append(results, pet)
}
err = rows.Err()
if err != nil {
return nil, errors.Stacktrace(PetQueryFailedErr(err))
}
return results, err
}
我的问题是,使用这个系统,如果我想查询所有类型的宠物列表,我将如何在单个查询中从每个单独的子类型表中加载额外数据?还是我需要先加载宠物列表,然后单独查询其他数据?
【问题讨论】:
标签: database postgresql go database-design