2008-11-10 10 views
8

के बिना सॉर्टिंग की अनुमति देने के लिए किसी डेटाबेस में शीर्षक को स्टोर करने का सबसे अच्छा तरीका क्या है I थिएटर से संबंधित वेबसाइट (वर्तमान में पूरी तरह से ओवरहालिंग) चलाता है (njtheater.com अगर आप हैं रुचि)।अग्रणी "द", "ए"

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

इसे संभालने के लिए डेटाबेस को डिजाइन करने का सबसे अच्छा तरीका क्या है? शीर्षक-उपसर्ग और शीर्षक-टेक्स्ट- (या कुछ इस तरह):

उत्तर

17

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

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

+0

उत्कृष्ट समाधान, और जैसा कि आप चाहें उतना ही सुरुचिपूर्ण। इसके लिए कुछ उपयोगकर्ता इनपुट को सामने की आवश्यकता हो सकती है (क्योंकि संभवतः मानव सहायता के बिना शीर्षक क्रमबद्ध करने के लिए 100% समाधान नहीं है), लेकिन डेटा दृष्टिकोण से सबसे अच्छा लगता है। –

1

स्टोर दो क्षेत्रों में शीर्षक (मैं MS-एसक्यूएल 2000 उपयोग कर रहा हूँ)। फिर दूसरे पर सॉर्ट करें, लेकिन दोनों के बीच एक स्थान के साथ संयोजन को प्रदर्शित करें।

+0

उसमें सभी शीर्षकों के सामने एक जगह होगी जो उपसर्ग से शुरू नहीं होती है। –

+0

सच है। तो ISNULL (TITLE-PREFIX + '', '') + TITLE-TEXT (मुझे लगता है कि न्यूल + 'न्यूल है ...) – dkretz

+0

मुझे लगता है कि यह इष्टतम उत्तर है। –

1

समस्या का मेरा समाधान डेटाबेस में तीन कॉलम बनाना था।

article varchar(4) 
sorttitle varchar(255) 
title  computed (article + sortitle) 

"लेख" केवल या तो "द", "ए" "एक" (नोट अंतरिक्ष प्रत्येक पर अनुगामी) या रिक्त स्ट्रिंग (शून्य नहीं)

"हो जाएगा" sorttitle साथ शीर्षक होगा प्रमुख लेख हटा दिया गया।

इस तरह, मैं SORTTITLE को सॉर्ट कर सकता हूं और TITLE प्रदर्शित कर सकता हूं। गणना किए गए क्षेत्र पर बहुत कम वास्तविक प्रसंस्करण चल रहा है (इसलिए यह तेज़ है), और डालने के दौरान केवल एक छोटा सा काम किया जाना है।

0

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

0

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

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