Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-11-11 08:55:02
asal
472 orang telah melayarinya

 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>
<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
Salin selepas log masuk

) 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>
<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
Salin selepas log masuk
Salin selepas log masuk

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

return err
Salin selepas log masuk
Salin selepas log masuk

}
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:

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!

sumber:php.cn
Artikel sebelumnya:Bagaimana untuk Mengintegrasikan Delve Debugger ke dalam Kod Visual Studio untuk Pembangunan Go? Artikel seterusnya:Bagaimana untuk Melaksanakan Gelung "buat sambil" dalam Go?
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan