आप अपने क्लाउड फायरस्टोर डीबी की संरचना कैसे करेंगे।

मेरे पास टीमों, एरेनास और खेलों का संग्रह है:

public class Team {
    public String name;
    public String homeCourtId;
}

public class Game{

    public String matchId;
    public String date;
    public Arena arena;
    public Team homeTeam;
    public Team awayTeam;
}


public class Arena {

    public String name;
    public String phone;
    public String email;
    public String address;
    public String postalCode;
    public String city;
    public String district;
    public String cordLat;
    public String cordLong;

}

खेलों में एक टीम एक घरेलू टीम या दूर की टीम हो सकती है और एक गेम में हमेशा एक एरिना होता है।

तो वर्तमान में मेरा विचार इसे संरचना करना है क्योंकि सभी गेम गेम संग्रह में जाते हैं और जब मैं टीम के लिए सभी गेम ढूंढना चाहता हूं तो मुझे गेम संग्रह से पूछताछ करने की आवश्यकता होती है और सभी गेम ढूंढते हैं जहां चयनित टीम या तो घरेलू टीम या दूर टीम होती है।

क्या मेरे पास फायरस्टोर जनरेटेड आईडी द्वारा टीमों का संदर्भ होना चाहिए या क्या मुझे टीम के नाम के लिए जाना चाहिए? कोई संकेत जहां मैं इसके बारे में और अधिक पढ़ सकता हूं?

क्या उनका फायरस्टोर में मेरे डेटा की संरचना करने का एक बेहतर तरीका है? (या कोई nosql डीबी)

0
Marthin 3 जुलाई 2019, 10:45

1 उत्तर

सबसे बढ़िया उत्तर

मुझे खेलों के संग्रह को क्वेरी करने और उन सभी खेलों को खोजने की ज़रूरत है जहाँ चयनित टीम या तो घरेलू टीम है या दूर की टीम है।

क्लाउड फायरस्टोर आधिकारिक दस्तावेज इस तरह की क्वेरी के बारे में काफी स्पष्ट है। दुर्भाग्य से, Firestore की बात करें तो कुछ क्वेरी सीमाएं हैं:

क्लाउड फायरस्टोर निम्नलिखित प्रकार के प्रश्नों का समर्थन नहीं करता है:

  • तार्किक या प्रश्न। इस मामले में, आपको प्रत्येक OR शर्त के लिए एक अलग क्वेरी बनानी चाहिए और क्वेरी परिणामों को अपने ऐप में मर्ज करना चाहिए।

इसलिए आप उन सभी खेलों को खोजने के लिए संग्रह को क्वेरी नहीं कर सकते जहां चयनित टीम या तो घरेलू टीम है या एक ही बार में बाहर की टीम है।

एक कामकाज यह होगा कि आप अपने डेटाबेस को दो बार क्वेरी करें और उन प्रश्नों के परिणामों को क्लाइंट साइड से जोड़ दें। यह सही नहीं है, क्योंकि आपको दो बार पूछताछ करने की आवश्यकता है, लेकिन मुझे लगता है कि यह चाल चल जाएगा।

Android के लिए, आप स्थानीय रूप से दो प्रश्नों को इस प्रकार मर्ज कर सकते हैं:

लेकिन, इसी विषय के संबंध में फ्रैंक वैन पफेलन के उत्तर के अनुसार:

या प्रश्न, क्योंकि उन्हें सूचकांक के माध्यम से छोड़ने की आवश्यकता होगी, जिससे प्रदर्शन की गारंटी देना असंभव हो जाएगा। ध्यान दें कि संभावित IN प्रश्नों के एक सबसेट का समर्थन करने के लिए काम चल रहा है, ताकि आप "मुझे थाई या इतालवी भोजन परोसने वाले सभी रेस्तरां दें" जैसी किसी चीज़ के लिए क्वेरी कर सकें।

आप इस सुविधा के उपलब्ध होने तक प्रतीक्षा कर सकते हैं या आप ऊपर दिए गए मेरे समाधान का उपयोग कर सकते हैं।

क्या मेरे पास फायरस्टोर जनरेटेड आईडी द्वारा टीमों का संदर्भ होना चाहिए या क्या मुझे टीम के नाम के लिए जाना चाहिए?

ज्यादातर मामलों में, हम हमेशा उपयोगकर्ता आईडी का उपयोग करते हैं न कि नामों का, इसका कारण यह है कि नाम बदल सकते हैं जबकि आईडी नहीं। लेकिन यह आपको तय करना है कि आईडी के बजाय नामों से खोजना बेहतर है या नहीं।

पी.एस. यदि आप "OR" क्वेरी के बजाय "AND" क्वेरी देख रहे हैं, तो कृपया ध्यान दें कि एकाधिक whereTo() कॉल को चेन करने की अनुमति है।

0
Community 20 जून 2020, 12:12