Theory
Memory ઢોળાવાની આફત
કલ્પો કે તમે students નાં નામ, roll numbers, પ્રવેશની તારીખો, અને profile ના ફોટા સાચવવા એક Excel sheet ગોઠવો છો. Excel ને પરવા નથી કે તમે ટૂંકા નામ માટેના cell માં લાંબો ફકરો મૂકો છો. પણ લાખો records રાખતા એક enterprise production database માં, જો તમે નાના 10-અક્ષરના શબ્દો માટે વિશાળ, નિશ્ચિત memory ના ટુકડા ફાળવો, તમારી hard drive ફૂલી જશે અને કીડીની ગતિએ ધીમી પડશે. એથી ઊલટું, જો તમે એક standard ટૂંકો ડબ્બો ફાળવો અને એક student 5,000 શબ્દોનું ઊંડું internship નું statement of purpose ચઢાવવાનો પ્રયાસ કરે, તો system તરત એક overflow error સાથે crash થશે. તો આપણે આપણા સંગ્રહના ડબ્બા એવી ચોકસાઈથી કેવી રીતે વ્યાખ્યાયિત કરીએ કે એ એક પણ byte બગાડ્યા વગર strings, numbers, binary blobs, અને સમયરેખાઓ સાથે બરાબર ગોઠવાઈ જાય?
Theory
નિશ્ચિત ખાનાંવાળું Egg Carton સામે ખેંચાતી સ્થિતિસ્થાપક થેલી
Database data types ને shipping containers જેવા વિચારો. CHAR વાપરવું એટલે બિલકુલ 20 વસ્તુઓ માટે પહેલેથી ઘડેલાં ખાનાં સાથે બનેલું એક કડક લાકડાનું ખોખું. જો તમે એની અંદર 4 અક્ષરનો નાનકડો શબ્દ મૂકો, ખોખું સંકોચાતું નથી; એ બાકીનાં 16 ખાનાં કોરી જગ્યાના વજન (spaces) થી ભરી દે છે. VARCHAR2 વાપરવું એટલે એક લવચીક, સ્થિતિસ્થાપક દોરીવાળી થેલી. જો તમે એમાં 4 અક્ષરો મૂકો, એ એ 4 અક્ષરોની આસપાસ ચુસ્ત વીંટળાય છે, disk ની માત્ર 4 bytes જગ્યા વાપરતાં. લખાણની નવલકથાઓ કે video files જેવા વિરાટ ભાર માટે, આપણે CLOB અને BLOB નામની વિશાળ સંગ્રહની ટાંકીઓ પર ચઢીએ છીએ જે મુખ્ય table ના માળખાની બહાર gigabytes જેટલો data રાખી શકે છે.
Theory
Oracle Data Types નું મુખ્ય માળખું
Relational Databases માં (ખાસ કરીને Oracle SQL માં), tables ને કડક સંરચનાત્મક data ની વ્યાખ્યાઓ જોઈએ. Data types નક્કી કરે છે કે data કેવી રીતે ચકાસાય, index થાય, અને ભૌતિક disk ના વિભાગો પર સંઘરાય. આપણે એમને ચાર પાયાની શ્રેણીઓમાં વર્ગીકૃત કરીએ છીએ: Character Strings, Numeric Values, Large Objects (LOBs), અને Temporal Datetime blocks.
At a glance
Table 1: Oracle SQL data types માટે તાંત્રિક વિગતો અને વ્યૂહાત્મક ઉપયોગનાં ક્ષેત્રો.
| Data Type નું નામ | સંગ્રહની વ્યવસ્થા અને મર્યાદાઓ | આદર્શ વ્યવહારુ Use Case |
|---|---|---|
| CHAR(size) | 2000 bytes સુધીની નિશ્ચિત લંબાઈની character string. ટૂંકી હોય તો પાછળ આપોઆપ spaces ભરે છે. | State ના ટૂંકાક્ષરો ('DL', 'MH') કે Status Flags ('Y', 'N') જેવા નિશ્ચિત codes. |
| VARCHAR2(size) | 4000 bytes સુધીની બદલાતી લંબાઈની character string. માત્ર ખરેખરી અક્ષરની લંબાઈ + overhead વાપરે છે. | નામ, Emails, અને સરનામાં જેવાં ખૂબ અનિશ્ચિત text fields. |
| NUMBER(p, s) | બદલાતી લંબાઈની આંકડાકીય value. 'p' કુલ precision ના અંકો છે; 's' scale ના દશાંશ સ્થાનો છે. | Semester Fees કે અપૂર્ણાંક Grade Point Averages (GPA) જેવાં financial fields. |
| DATE | સદી, વર્ષ, મહિનો, દિવસ, કલાક, મિનિટ, અને સેકન્ડની values સંઘરતું નિશ્ચિત 7-byte માળખું. | Exam Submission ના સમય કે જન્મતારીખો જેવા Timestamps. |
| CLOB / NCLOB | 4 Gigabytes સુધીનો text data રાખતો Character Large Object. NCLOB National UTF-16 સમૂહો સંભાળે છે. | Resume ની ઝલક કે Course ના અભ્યાસક્રમ જેવાં વિશાળ લખાણનાં તત્ત્વો. |
| RAW / LONG RAW | Raw binary byte પ્રવાહો (RAW 2000 bytes સુધી; LONG RAW 2GB સુધી). BLOB ની તરફેણમાં નાપસંદ કરાયેલા. | નાનાં icons, compile થયેલી cryptographic ચાવીઓ, કે digital signatures માટે જૂનો સંગ્રહ. |
Theory
ઊંડી ડૂબકી: Precision ની વ્યવસ્થા અને Large Objects
University ના પ્રશ્નપત્રો વારંવાર NUMBER(p, s) type ની બિલકુલ ગાણિતિક સીમાની ગણતરીઓ ચકાસે છે, સાથે જૂના સામે આધુનિક સંગ્રહની મર્યાદાઓ પણ (જેમ કે LONG સામે CLOB). Syntax NUMBER(5, 2) નો અર્થ છે કે એ સંખ્યાની precision કુલ 5 અંકોની છે, જેમાંથી 2 અંકોનો scale સખ્તાઈથી દશાંશ બિંદુ પછી અનામત છે. એટલે એ રાખી શકે એવી સૌથી મોટી value 999.99 છે. જો તમે 1000.50 સંઘરવાનો પ્રયાસ કરો, database એક arithmetic overflow error ફેંકે છે કારણ કે એને કુલ 6 અંકો જોઈએ!
Watch out
જૂનો ફાંદો: LONG અને LONG RAW ટાળો
જૂનાં પાઠ્યપુસ્તકોમાં, તમે લાંબા લખાણના blocks માટે LONG અને files માટે LONG RAW વપરાયેલા જોશો. આધુનિક ઉદ્યોગની systems માં, આ ખૂબ મર્યાદિત છે. એક table માં માત્ર એક જ LONG column હોઈ શકે, અને એ GROUP BY કે DISTINCT queries માં વાપરી શકાતો નથી. તમારાં lab assignments માં એને બદલે હંમેશા CLOB (લખાણ માટે) કે BLOB (binaries માટે) વાપરો!
Theory
Worked Example: Student Profile Schema નો નકશો
ચાલો એક college portal માટે એક વાસ્તવિક table બનાવીએ જે યોગ્ય, ઉદ્યોગ-કક્ષાની type ની પસંદગીઓ દર્શાવે, સંરચનાત્મક bugs અને જગ્યાની ફાળવણીનો બગાડ અટકાવતાં.
Practical
Constructing an Optimized Schema Definition
-- Step 1: Create a highly robust student registry profile
CREATE TABLE student_profile (
roll_id NUMBER(6,0) PRIMARY KEY, -- Allows integers up to 999999
gender CHAR(1), -- Always exactly 1 byte ('M'/'F')
student_name VARCHAR2(50), -- Shrinks dynamically to fit exact names
cgpa NUMBER(3,2), -- Maximum value 9.99 (Perfect for GPA)
date_of_joining DATE, -- Tracks both date and time values
semester_bio CLOB -- Unlimited rich text for biographies
);
-- Step 2: Test automatic rounding mechanics on scale variables
INSERT INTO student_profile VALUES
(100001, 'M', 'Amit Das', 8.576, SYSDATE, 'Enrolled via scholarship path.');
-- Step 3: Check how the system stores the CGPA decimal
SELECT roll_id, student_name, cgpa FROM student_profile;Think first
Rounding અને Scale ના મૂલ્યાંકનને ટ્રેસ કરો
Step 2 જુઓ. આપણે NUMBER(3,2) તરીકે વ્યાખ્યાયિત column માં 8.576 ની CGPA value નાખી. શું આ insert નિષ્ફળ જશે? જો એ પસાર થાય, તો database માં બિલકુલ કઈ value સચવાશે?
Show the answer
Statement કોઈ પણ errors વગર સફળતાપૂર્વક ચાલશે! કારણ કે scale 2 પર ગોઠવેલો છે, RDBMS આપોઆપ ત્રીજું દશાંશ સ્થાન તપાસે છે અને નિયમમાં બેસાડવા સંખ્યાને ઉપર round કરે છે. તેથી, column ની અંદર કાયમ માટે સંઘરાયેલી value 8.58 હશે.
Quiz
જો તમે એક column ને CHAR(10) તરીકે વ્યાખ્યાયિત કરો અને 'BCA' string નાખો, તો એ ચોક્કસ row નું cell કેટલી bytes ભૌતિક database સંગ્રહ વાપરશે?
- 3 bytes, કારણ કે VARCHAR/CHAR types હંમેશા overhead ની values દૂર કરવા સંકોચાય છે.
- 10 bytes, કારણ કે એ નિશ્ચિત લંબાઈનો કરાર પૂરો કરવા 7 અદૃશ્ય પાછળના space અક્ષરો જોડે છે.
- 13 bytes, input ના અક્ષરોને લક્ષ્ય લંબાઈના કદના parameter સાથે જોડતાં.
- એ એક DataWidthExceededException ચકાસણીની error ઊભી કરે છે.
Show the answer
10 bytes, કારણ કે એ નિશ્ચિત લંબાઈનો કરાર પૂરો કરવા 7 અદૃશ્ય પાછળના space અક્ષરો જોડે છે.
CHAR data type એક કડક નિશ્ચિત-લંબાઈનો નિયમ લાગુ કરે છે. જો input ની string જાહેર કરેલા કદ કરતાં ટૂંકી હોય, system આપોઆપ બાકીનો block કોરી જગ્યાઓથી ભરી દે છે, disk પર પૂરી કદની મર્યાદા (10 bytes) વાપરતાં.
Quiz
Oracle SQL systems માં VARCHAR અને VARCHAR2 વચ્ચેનો મુખ્ય કાર્યાત્મક ભેદ શું છે?
- VARCHAR માત્ર numbers રાખે છે, જ્યારે VARCHAR2 alpha-numeric અક્ષરની values રાખે છે.
- VARCHAR એક જૂનો type છે જે હાલમાં VARCHAR2 જેવો જ છે, પણ VARCHAR2 ભવિષ્યના updates માં પણ backward compatible અને variable-optimized રહેવાની ખાતરી આપે છે.
- VARCHAR2 માત્ર 2 Gigabytes સુધીના binary image data ના પ્રવાહો સંઘરી શકે છે.
- VARCHAR બહુભાષી વૈશ્વિક અક્ષરોને support કરે છે, જ્યારે VARCHAR2 એમને સંપૂર્ણપણે રોકે છે.
Show the answer
VARCHAR એક જૂનો type છે જે હાલમાં VARCHAR2 જેવો જ છે, પણ VARCHAR2 ભવિષ્યના updates માં પણ backward compatible અને variable-optimized રહેવાની ખાતરી આપે છે.
જોકે અત્યારે એ સરખું વર્તે છે, Oracle ખાસ કરીને VARCHAR ને બદલે VARCHAR2 વાપરવાનું ફરમાવે છે. VARCHAR તાંત્રિક રીતે ભવિષ્યના SQL standard ના updates માટે અનામત છે જ્યાં એનું વર્તન બદલાઈ શકે છે, જ્યારે VARCHAR2 એક ગતિશીલ, જગ્યા બચાવતું variable text field રહેવાની ખાતરી આપે છે.
Theory
Data Types ને Semester 3 PL/SQL Engineering સાથે જોડવા
જ્યારે તમે Semester 3 ના અદ્યતન database scripting (BCA301) પર જશો, ત્યારે સાચા types પસંદ કરવા તમને data ના રૂપાંતરની errors થી બચાવે છે. તમે ગતિશીલ anchoring attribute %TYPE વાપરતાં શીખશો. આ તમારા backend code ને તમારા table columns ના data types આપોઆપ નકલ કરવાનું કહે છે (v_name student_profile.student_name%TYPE), જે તમારા programs ને પછીથી table ની પહોળાઈઓ બદલાય તો પણ ખૂબ જાળવણીયોગ્ય બનાવે છે.
Summary
Key takeaways
- Data types table ના columns ના સ્પષ્ટ ચકાસણીના નિયમો અને ભૌતિક સંગ્રહની રૂપરેખા વ્યાખ્યાયિત કરે છે.
- CHAR નિશ્ચિત પહોળાઈનાં માળખાં લાગુ કરે છે અને ન વપરાયેલા blocks ને કોરી જગ્યાઓથી ભરે છે, ખોટો ઉપયોગ થાય તો સંગ્રહનો બગાડ કરતાં.
- VARCHAR2 string ની લંબાઈ સાથે મળવા dynamically ગોઠવાય છે, સંગ્રહનો વપરાશ optimize કરતાં.
- NUMBER(p,s) ચોક્કસ દશાંશ બિંદુનું configuration આપે છે, financial ગણતરીઓમાં અંકગણિતની વિકૃતિ અટકાવતાં.
- CLOB અને NCLOB 4GB સુધીનો ભારે લખાણનો data સંભાળે છે, પ્રતિબંધક, જૂનાં LONG માળખાં બદલતાં.
- Memory Hook: નિશ્ચિત codes CHAR વાપરે છે, બદલાતા લખાણને VARCHAR2 જોઈએ, અને numbers માટે હંમેશા precision ના નિયમો track કરો!