Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memetakan Hubungan Pangkalan Data Satu-ke-Banyak dan Banyak-ke-Banyak dengan Cekap kepada Structs in Go?

Bagaimana untuk Memetakan Hubungan Pangkalan Data Satu-ke-Banyak dan Banyak-ke-Banyak dengan Cekap kepada Structs in Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 08:55:02406semak imbas

 How to Efficiently Map One-to-Many and Many-to-Many Database Relationships to Structs in Go?

Memetakan Satu-ke-Banyak dan Banyak-ke-Banyak Hubungan Pangkalan Data dengan Cekap kepada Struktur dalam Go

Latar Belakang< ;/h2>

Apabila bekerja dengan pangkalan data, adalah perkara biasa untuk menghadapi perhubungan satu-ke-banyak dan banyak-ke-banyak. Dalam senario sedemikian, pemetaan yang cekap dan berskala bagi perhubungan ini kepada struct Go adalah penting.

Pendekatan Disyorkan Menggunakan Pengagregat Array PostgreSQL dan GROUP BY

Satu pendekatan yang berkesan ialah memanfaatkan agregator tatasusunan PostgreSQL dan kefungsian GROUP BY. Ini melibatkan mencipta pandangan yang mengumpulkan item dan data berkaitannya bersama-sama menggunakan pengagregatan tatasusunan. Pandangan yang terhasil kemudiannya boleh disoal, dengan kandungan tatasusunan dinyahmarshalkan ke dalam struct Go.

<br>sql := `<br>BUAT VIEW item_tags AS<br>PILIH<br> id ,<br> ARRAY_AGG(ROW_TO_JSON(senarai tag.*)) AS tag<br>DARI<br> (</p>
<pre class="brush:php;toolbar:false">SELECT
  tag.name,
  tag.id
FROM
  tag
WHERE
  item_id = item.id

) AS taglist
KUMPULAN OLEH
item.id
`
db.MustExec(sql)

Kod Go kemudiannya ialah:

<br>taip struct Item {<br> ID int<br> Teg []Tag<br>}</p>
<p>baris, err := db.Queryx("SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")<br>untuk baris. Seterusnya() {<br> var item Item<br> var jsonString string<br> if err := rows.Scan(&jsonString); err != nil {</p>
<pre class="brush:php;toolbar:false">return err

}
if err := json.Unmarshal([]byte(jsonString), &item); err != tiada {

return err

}
item = tambah(item, item)
}

Kelebihan< /h2>

Pendekatan ini menggabungkan fleksibiliti PostgreSQL dengan kecekapan pengagregatan tatasusunan dan marshalling peringkat baris dalam Go. Ia berskala dengan lancar, walaupun dengan perhubungan yang rumit.

Alternatif

Walaupun pendekatan yang disyorkan adalah cekap dan serba boleh, penyelesaian alternatif yang disebut dalam soalan mempunyai kekuatan dan kekuatan tersendiri. kelemahan:

  • Pendekatan 1 (Berbilang Pertanyaan): Mudah tetapi tidak cekap untuk set data yang besar.
  • Pendekatan 2 (Gelung Manual): Kurang intensif memori tetapi kompleks dan terdedah kepada ralat.
  • Pendekatan Gagal 3 (Pengimbasan Struktur): Secara teorinya sesuai tetapi tidak disokong oleh SQLx.
  • Pendekatan 4 Kemungkinan (PostgreSQL Arrays): Belum diuji tetapi berkemungkinan tidak berdaya maju.

Akhirnya, pendekatan terbaik bergantung pada keperluan khusus aplikasi dan teknologi yang tersedia.

Atas ialah kandungan terperinci Bagaimana untuk Memetakan Hubungan Pangkalan Data Satu-ke-Banyak dan Banyak-ke-Banyak dengan Cekap kepada Structs in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn