Theory
Database Packing की समस्या
कल्पना कीजिए आप एक विशाल logistics warehouse चला रहे हैं। अगर आप एक नाज़ुक, छोटी microchip को एक कार के लिए बनाए एक विशाल, प्रबलित shipping container के अंदर store करने की कोशिश करते हैं, आपने जगह बर्बाद की। अगर आप एक विशाल कार को एक छोटे cardboard box में ज़बरदस्ती डालने की कोशिश करते हैं, यह बस फ़िट नहीं होगी। Databases बिल्कुल इसी तरह काम करते हैं। जब आप एक table design करते हैं, आपको system को बिल्कुल बताना होगा कि आप अपनी जानकारी store करने के लिए किस तरह का 'box' (data type) इस्तेमाल कर रहे हैं। ग़लत चुनिए, और आप या तो बहुमूल्य memory बर्बाद करते हैं या आपका data बस सही तरह save नहीं होगा।
Theory
Storage Containers
data types को अलग storage समाधानों की तरह सोचिए: CHAR एक कठोर धातु का box है जो हमेशा एक ही जगह लेता है, भले ख़ाली हो। VARCHAR2 एक लचीला थैला है जो केवल उतना ही फैलता है जितना आप अंदर रखते हैं। CLOB उन विशाल दस्तावेज़ों के लिए एक विशाल warehouse है जो किसी box में फ़िट नहीं होते, और NUMBER calculations के लिए एक विशेष precision औज़ार है।
Theory
विचार, औपचारिक रूप से
Oracle SQL में, एक Data Type एक column के लिए storage format, constraints, और valid operations परिभाषित करता है। आपकी BCA exams के लिए जानने योग्य सबसे अहम types हैं:
NUMBER(p, s)*: fixed या floating-point numbers store करता है। 'p' precision है (कुल digits), 's' scale है (decimal के बाद digits)।
CHAR(n)*: fixed-length character data। अगर आप CHAR(10) परिभाषित करते हैं और 'Hi' store करते हैं, यह 10 भरने के लिए 8 spaces जोड़ता है।
VARCHAR2(n)*: variable-length character data। यह केवल वे characters store करता है जो आप देते हैं, जगह बचाते हुए।
DATE*: date और time दोनों store करता है (century, year, month, day, hour, minute, second)।
CLOB / NCLOB*: Character Large Objects। text के विशाल blocks (4GB तक) के लिए इस्तेमाल होते हैं।
RAW / LONG RAW*: raw binary data (जैसे images या encrypted keys) legacy formats में store करते हैं।
At a glance
मुख्य Oracle data types की तुलना
| Data Type | Storage Style | Best Use Case |
|---|---|---|
| CHAR | Fixed-Length | 'US', 'IN', 'Y', 'N' जैसे codes (कम ही बदलते) |
| VARCHAR2 | Variable-Length | Names, addresses, email IDs (जगह की कुशलता) |
| NUMBER | Numeric | Prices, quantities, IDs, calculations |
| CLOB | Large Text | Book reviews, पूरी लंबाई के articles, logs |
Think first
CHAR Padding परीक्षण
अगर आप एक column को CHAR(10) के रूप में परिभाषित करते हैं और नाम 'Oracle' insert करते हैं, disk पर असल में कितने bytes store होते हैं?
Show the answer
यह 10 bytes store करेगा। क्योंकि CHAR fixed-length है, Oracle बचे 4 spaces को blanks से pad करेगा ताकि 10 के परिभाषित size तक पहुँचे। यही वजह है कि CHAR उस data के लिए अकुशल है जो लंबाई में बदलता है।
Theory
Legacy समस्या: LONG और LONG RAW
आप पुराने codebases में LONG और LONG RAW देख सकते हैं। ये text या binary data की विशाल मात्राएँ store करने के शुरुआती तरीक़े थे। पर, वे अत्यधिक सीमित हैं (आप एक table में एक से ज़्यादा नहीं रख सकते, वे कई SQL clauses में इस्तेमाल नहीं हो सकते)। नई designs के लिए हमेशा CLOB या BLOB इस्तेमाल कीजिए। अगर एक exam question 'legacy limitations' के बारे में पूछता है, बताइए कि LONG types आधुनिक LOBs की तुलना में पुराने और सीमित हैं।
Quiz
employee salaries (जैसे 50000.50) store करते एक column के लिए आपको कौन सा data type चुनना चाहिए?
- VARCHAR2
- CHAR
- NUMBER(10, 2)
- CLOB
Show the answer
NUMBER(10, 2)
NUMBER ख़ास तौर पर arithmetic के लिए design किया गया है। VARCHAR2 और CHAR strings के लिए हैं और सीधे calculations के लिए इस्तेमाल नहीं हो सकते, और CLOB text के बड़े blocks के लिए है।
Watch out
VARCHAR2 बनाम VARCHAR जाल
Oracle में, हमेशा VARCHAR2 इस्तेमाल कीजिए। जबकि 'VARCHAR' कुछ systems में एक synonym के रूप में मौजूद है, Oracle ख़ास तौर पर चेतावनी देता है कि इसका behavior भविष्य के versions में बदल सकता है। compatibility पक्की करने के लिए अपने exam answers और असली दुनिया के code के लिए हमेशा VARCHAR2 को तरजीह दीजिए।
Think first
Design फ़ैसला: Library System
आप एक library system के लिए एक table बना रहे हैं। आपके पास एक 'Book_Title' column और एक 'Book_Description' column है। आप हर एक के लिए कौन से data types चुनते हैं, और क्यों?
Show the answer
'Book_Title' के लिए, VARCHAR2(255) इस्तेमाल कीजिए क्योंकि titles लंबाई में बदलते हैं पर विशाल नहीं होते। 'Book_Description' के लिए, CLOB इस्तेमाल कीजिए क्योंकि descriptions बेहद लंबी हो सकती हैं, आसानी से VARCHAR2 की 4000-byte सीमा पार करती हुई।
Summary
Key takeaways
- सारे math-संबंधी values के लिए NUMBER इस्तेमाल कीजिए।
- जगह बचाने के लिए लंबाई में बदलते text के लिए VARCHAR2 इस्तेमाल कीजिए।
- CHAR केवल fixed-length codes के लिए इस्तेमाल कीजिए जहाँ access की कुशलता padding से ज़्यादा भारी पड़े।
- standard column सीमाएँ पार करते बड़े text blocks के लिए CLOB इस्तेमाल कीजिए।
- नई database designs में LONG और LONG RAW से बचिए; वे गंभीर functional सीमाओं वाले legacy types हैं।
- हमेशा याद रखिए: CHAR pad करता है, VARCHAR2 फ़िट होने के लिए सिकुड़ता है।