जब खोज की बात आती है तो प्रति मान एक अलग कॉलम अधिक लचीला होता है।
यदि अलग-अलग पंक्तियों में बूलियन मानों के अलग-अलग संग्रह हैं, तो एक अलग कुंजी/मान तालिका अधिक लचीली होती है।
और, अगर
- बूलियन मानों की आपकी सूची कमोबेश स्थिर है
- आपकी सभी पंक्तियों में वे सभी बूलियन मान हैं
- आपकी प्रदर्शन-महत्वपूर्ण खोज उन पंक्तियों को ढूंढना है जिनमें कोई भी मान गलत है
फिर टेक्स्ट स्ट्रिंग्स जैसे '1001010010' आदि का उपयोग करना उन्हें स्टोर करने का एक अच्छा तरीका है। आप इस तरह खोज सकते हैं
WHERE flags <> '11111111'
आपको आवश्यक पंक्तियों को खोजने के लिए।
आप एक बिट प्रति ध्वज के साथ एक बाइनरी कॉलम का उपयोग कर सकते हैं। लेकिन यदि आप टेक्स्ट का उपयोग करते हैं तो आकस्मिक प्रश्नों और नेत्रगोलक निरीक्षण के लिए आपकी तालिका का उपयोग करना आसान हो जाएगा। CHAR के बजाय BINARY का उपयोग करने से होने वाली जगह की बचत तब तक महत्वपूर्ण नहीं होगी जब तक आप लाखों पंक्तियों को संग्रहीत करना शुरू नहीं करते।
संपादित करें यह कहा जाना चाहिए:हर बार जब मैंने बूलियन विशेषताओं के सरणी के साथ ऐसा कुछ बनाया है, तो बाद में मुझे निराशा हुई है कि यह कितना लचीला हो गया है। उदाहरण के लिए, मान लीजिए कि यह प्रकाश बल्बों की एक सूची थी। सहस्राब्दी के मोड़ पर, बूलियन झंडे जैसे सामान हो सकते हैं
screw base
halogen
mercury vapor
low voltage
फिर, चीजें बदल जाती हैं और मुझे लगता है कि मुझे और बूलियन झंडे की जरूरत है, जैसे,
LED
CFL
dimmable
Energy Star
आदि। अचानक मेरे डेटा प्रकार इतने बड़े नहीं हैं कि मैं उन्हें धारण कर सकूं। जब मैंने लिखा "बूलियन मूल्यों की आपकी सूची कम या ज्यादा स्थिर है" मेरा मतलब था कि आप अपने आवेदन के जीवनकाल के दौरान लाइट-बल्ब विशेषताओं में बदलाव की तरह कुछ उम्मीद नहीं करते हैं।
तो, विशेषताओं की एक अलग तालिका शायद बेहतर समाधान हो। इसमें ये कॉलम होंगे:
item_id fk to item table -- pk
attribute_id attribute identifier -- pk
attribute_value
यह अंततः लचीला है। आप बस नए झंडे जोड़ सकते हैं। आप उन्हें अपने आवेदन के जीवनकाल में किसी भी समय मौजूदा आइटम में, या नए आइटम में जोड़ सकते हैं। और, प्रत्येक वस्तु को झंडे के समान संग्रह की आवश्यकता नहीं होती है। आप लिख सकते हैं "किस आइटम में कोई झूठी विशेषताएँ हैं?" इस तरह की क्वेरी:
SELECT DISTINCT item_id FROM attribute_table WHERE attribute_value = 0
लेकिन, आपको सावधान रहना होगा क्योंकि "कौन से आइटम में विशेषताएँ गायब हैं" प्रश्न लिखना बहुत कठिन है।