2011-12-08 11 views
7

मैं एक सरल उत्पाद खोज webapp जहां उपयोगकर्ता खरीदारी उत्पादों वह कीमत, नि: शुल्क वितरण, नाम के आधार पर बुकमार्क किए गए है फ़िल्टर कर सकते हैं बनाने रहा हूँ, दुकान आदिकैसे उत्पाद खोज फिल्टर के भंडारण के लिए एक डेटाबेस स्कीमा बनाने के लिए

मैं कस्टम खोज फ़िल्टर कार्यक्षमता को लागू करने के लिए देख रहा हूं जहां उपयोगकर्ता एक खोज फ़िल्टर बना सकता है, फिर इसे बाद में उपयोग के लिए सहेजें। खोज फ़िल्टर कुछ इस तरह हैं: के तहत $ 1000

  • कीमत के बीच $ 1000 के लिए $ 2000
  • मुफ्त वितरण उपलब्ध/उपलब्ध नहीं
  • दुकान है अमेज़न/वॉल-मार्ट/...
  • है

    • कीमत है नाम में "क्रिसमस"

    क्या कोई मुझे डेटाबेस में ऐसे खोज फ़िल्टर संग्रहीत करने के लिए डेटाबेस स्कीमा का विचार दे सकता है। मैं की तरह डेटाबेस में mysql खंड की दुकान चाहिए "जहां कीमत < 1000", "जहाँ free_delivery = 1" ... या इस तरह क्षेत्र बनाने में हो सकता है ..

    • क्षेत्र (कीमत, नाम, free_delivery)
    • मूल्य (1000)
    • expr (कम, की तुलना में अधिक से अधिक)
    • (1000)
    • और (2000)
    • के बीच
    • शामिल
  • उत्तर

    1

    आपको डेटाबेस में SQL क्लॉज स्टोर नहीं करना चाहिए। मैं सिफारिश करेंगे आप कुछ इस तरह करते हैं:

    CREATE TABLE store (
    id INT NOT NULL PRIMARY KEY, 
    name VARCHAR(100) 
    ); 
    

    उदाहरण पंक्तियाँ: (1, "अमेज़न"), (2, "वॉलमार्ट"), ...

    CREATE TABLE search_filter (
    id INT NOT NULL PRIMARY KEY, 
    user_id INT NOT NULL, 
    name VARCHAR(100), 
    price_min INT, 
    price_max INT, 
    store_id INT, 
    has_free_delivery BOOLEAN, 
    keyword VARCHAR(50), 
    FOREIGN KEY (user_id) REFERENCES user(id), 
    FOREIGN KEY (store_id) REFERENCES store(id) 
    ); 
    

    उदाहरण पंक्ति: (1 , 43, "अमेज़ॅन क्रिसमस", 1000, 1 999, 1, ट्रू, "क्रिसमस")

    उपर्युक्त उदाहरण उपयोगकर्ता 43 से जुड़े "अमेज़ॅन क्रिसमस" नामक एक फ़िल्टर को सहेज लेगा। यह निर्दिष्ट करता है कि उपयोगकर्ता देखना चाहता है वॉलमार्ट में $ 1000 से $ 1999 तक की कीमत वाले उत्पाद, मुफ्त डिलीवरी के साथ, और कीवर्ड "क्रिसमस" युक्त हैं।

    +0

    काम करने के लिए इस उत्तर पर बस एक नोट आपको MyISAM के डिफ़ॉल्ट मान के बजाय INNODB होने के रूप में अपनी तालिका निर्दिष्ट करने की आवश्यकता होगी। जैसा कि http://dev.mysql.com/doc/refman/5.6/en/ansi-diff-foreign-keys.html पर देखा जा सकता है, वे कहते हैं "बाद के चरण में, विदेशी कुंजी बाधाओं को माईसाम टेबल के लिए लागू किया जाएगा कुंआ।" यह वही पाठ पिछले 8 वर्षों से सभी संस्करणों के लिए मौजूद है। आईएनएनओडीबी का उपयोग करने के बावजूद आपको गारंटी नहीं है कि विदेशी कुंजी का भी पालन किया जाएगा। MySQL कई बार विदेशी कुंजी को नजरअंदाज करने के लिए जाना जाता है। – Peter

    +0

    धन्यवाद पीटर, मुझे उस प्रतिबंध के बारे में पता नहीं था। – andebauchery

    संबंधित मुद्दे