데이터베이스로 작업할 때 일대다 및 다대다 관계를 접하는 것이 일반적입니다. 이러한 시나리오에서는 이러한 관계를 Go 구조체에 효율적이고 확장 가능하게 매핑하는 것이 중요합니다.
효과적인 접근 방식 중 하나는 다음과 같습니다. PostgreSQL의 배열 수집기 및 GROUP BY 기능을 활용합니다. 여기에는 배열 집계를 사용하여 항목과 관련 데이터를 함께 그룹화하는 보기를 만드는 작업이 포함됩니다. 그러면 배열 내용이 Go 구조체로 정렬 해제되어 결과 뷰를 쿼리할 수 있습니다.
<br>sql := `<br>CREATE VIEW item_tags AS<br>SELECT<br> id ,<br> ARRAY_AGG(ROW_TO_JSON(taglist.*)) AS 태그<br>FROM<br> (</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT tag.name, tag.id FROM tag WHERE item_id = item.id
) AS 태그 목록
GROUP BY
item.id
`
db.MustExec(sql)
Go 코드는 다음과 같습니다.
<br>type Item struct {<br> ID int<br> 태그 []Tag<br>}</p> <p>행, err := db.Queryx("SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")<br>행. Next() {<br> var item Item<br> var jsonString string<br> if err :=rows.Scan(&jsonString); err != nil {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return err
}
if err := json.Unmarshal([]byte(jsonString), &item); err != nil {
return err
}
items = 추가(items, item)
}
이 접근 방식은 PostgreSQL의 유연성과 Go의 배열 집계 및 행 수준 마샬링의 효율성을 결합합니다. 복잡한 관계에서도 원활하게 확장됩니다.
권장되는 접근 방식은 효율적이고 다양하지만 질문에 언급된 대체 솔루션에는 고유한 장점과 장점이 있습니다. 약점:
궁극적으로 최선의 접근 방식은 애플리케이션의 특정 요구 사항과 사용 가능한 기술에 따라 다릅니다.
위 내용은 Go에서 일대다 및 다대다 데이터베이스 관계를 구조체에 효율적으로 매핑하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!