"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गो में संरचनाओं के साथ एक-से-अनेक और अनेक-से-अनेक डेटाबेस संबंधों को कुशलतापूर्वक कैसे मैप करें?

गो में संरचनाओं के साथ एक-से-अनेक और अनेक-से-अनेक डेटाबेस संबंधों को कुशलतापूर्वक कैसे मैप करें?

2024-11-11 को प्रकाशित
ब्राउज़ करें:779

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

गो में संरचनाओं के लिए एक-से-अनेक और अनेक-से-अनेक डेटाबेस संबंधों को कुशलतापूर्वक मैप करना

पृष्ठभूमि h2>

डेटाबेस के साथ काम करते समय, एक-से-अनेक और अनेक-से-अनेक संबंधों का सामना करना आम बात है। ऐसे परिदृश्यों में, गो स्ट्रक्चर्स के साथ इन संबंधों की कुशल और स्केलेबल मैपिंग महत्वपूर्ण है। PostgreSQL के ऐरे एग्रीगेटर और ग्रुप बाय कार्यक्षमता। इसमें एक ऐसा दृश्य बनाना शामिल है जो एक सरणी एकत्रीकरण का उपयोग करके वस्तुओं और उनके संबंधित डेटा को एक साथ समूहित करता है। इसके बाद परिणामी दृश्य को गो स्ट्रक्चर में अनमार्शल की गई सरणी सामग्री के साथ क्वेरी किया जा सकता है।

ARRAY_AGG(ROW_TO_JSON(टैगलिस्ट.*)) AS टैग

FROM

(

SELECT टैग.नाम, टैग.आईडी से टैग कहाँ आइटम_आईडी = आइटम.आईडी


) एएस टैगलिस्ट
समूह द्वारा
आइटम.आईडी
`
db.MustExec(sql)

फिर गो कोड होगा:
SELECT
  tag.name,
  tag.id
FROM
  tag
WHERE
  item_id = item.id

टाइप आइटम स्ट्रक्चर {
आईडी int
टैग []टैग
}

rows, err := db.Queryx("SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")

पंक्तियों के लिए। अगला () {

var आइटम Item

var jsonString string

यदि गलती हो := पंक्तियाँ.स्कैन(&jsonString); err != nil {

return err

}

if err := json.Unmarshal([]byte(jsonString), &item); त्रुटि != शून्य {


वापसी त्रुटि

}
आइटम = जोड़ें(आइटम, आइटम)

}
SELECT
  tag.name,
  tag.id
FROM
  tag
WHERE
  item_id = item.id

फायदे


यह दृष्टिकोण PostgreSQL के लचीलेपन को सरणी एकत्रीकरण की दक्षता के साथ जोड़ता है और गो में पंक्ति-स्तरीय मार्शलिंग। यह जटिल संबंधों के साथ भी निर्बाध रूप से बढ़ता है।
SELECT
  tag.name,
  tag.id
FROM
  tag
WHERE
  item_id = item.id

विकल्प


हालांकि अनुशंसित दृष्टिकोण कुशल और बहुमुखी है, प्रश्न में उल्लिखित वैकल्पिक समाधानों की अपनी ताकत और कमजोरियां हैं :

दृष्टिकोण 1 (एकाधिक प्रश्न):

बड़े के लिए सरल लेकिन अप्रभावी डेटासेट।

दृष्टिकोण 2 (मैनुअल लूपिंग):

कम मेमोरी गहन लेकिन जटिल और त्रुटि-प्रवण।

    असफल दृष्टिकोण 3 (संरचना स्कैनिंग):
  • सैद्धांतिक रूप से आदर्श लेकिन SQLx द्वारा समर्थित नहीं।
  • संभावित दृष्टिकोण 4 (PostgreSQL Arrays):
  • अप्रयुक्त लेकिन संभावित रूप से व्यवहार्य नहीं।
  • आखिरकार, सर्वोत्तम दृष्टिकोण एप्लिकेशन की विशिष्ट आवश्यकताओं और उपलब्ध तकनीकों पर निर्भर करता है।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3