Sunday, January 25, 2009

எளிய தமிழில் SQL - பாகம் 4

எளிய தமிழில் SQL - பாகம் 4

ஒரு Tableன் Structure எப்படி இருக்கும்?

Column Name, Data Type(Width), Allow Nulls இவைகள் அனைத்தும் அடங்கியது ஒரு Table Structure.


Allow Null என்பது tick செய்யப்பட்டிருந்தால், அதன் மதிப்பை உள்ளீடு செய்யும்போது வெறுமனே விட்டுவிடலாம் என்று அர்த்தம். தற்சமயம் அதன் மதிப்பு நமக்குத் தெரிந்திருக்கவில்லை. பிறகு சில காலம் கழித்துக் கூட அதன் மதிப்பை நாம் உள்ளிட்டுக் கொள்ளலாம்.

Allow Null என்பது tick செய்யப்படாமல் இருந்தால், அந்தக் குறிப்பிட்ட columnன் தகவலைக் கண்டிப்பாக நாம் கொடுத்தே தீரவேண்டும். அதன் மதிப்பை உள்ளிடாமல் விட்டுவிட்டால் பிழைச்செய்தி வரும். ஆனால் Identity Columnக்கு மட்டும் ஒரு விதிவிலக்கு உண்டு.

முதல் Column ஆகிய AddressID ன் ஆரம்பத்தில் ஒரு சிறிய சாவியின் படம் போடப்பட்டுள்ளது. அது இந்த Tableன் primary key ஆகும்.



Primary key ஆனது ஒரு குறிப்பிட்ட Row வை தனித்து அடையாளம் கண்டுகொள்ள உதவும். மேலும் AddressID ஆனது Identity Column ஆகவும் குறிப்பிடப்பட்டுள்ளதால், இதன் மதிப்பை நாம் நேரடியாக உள்ளிட வேண்டிய அவசியமில்லை. Databaseல் தானியங்கியாக அடுத்தடுத்த எண்களை இந்த AddressIDல் Input செய்துவிடும்.

மேலே உள்ள Table Structureல் AddressLine2 க்கு மட்டும் Allow Nulls ஆனது tick செய்யப்பட்டு இருக்கிறது. ஆகவே AddressLine2க்கு உரிய தகவல் நம்மிடம் தற்சமயம் இல்லையென்றால் அதை நாம் உள்ளீடு செய்யாமல் அப்படியே விட்டுவிட்டு அடுத்த Columnக்கு உரிய தகவலை உள்ளீடு செய்யலாம். பிறகு எப்போது வேண்டுமானாலும் AddressLine2க்கு உரிய Dataவைக் கொடுக்கலாம். பிழைச்செய்தி எதுவும் வராது.

rowguid என்பதற்கு நேராக uniqueidentifier என Data Type இருக்கிறது.

அது என்ன Unique Identifier?

8DD27D89-6AE7-4316-B3B8-0CCEF0924F60 இது போன்ற ஒரு hexadecimal மதிப்பு.
இது ஒவ்வொரு முறையும் வேறு வேறு மதிப்புகளைக் கொடுக்கும். கணினிக்குக் கணினி வித்தியாசமான மதிப்பையும், ஒரே கணினியில் ஒவ்வொரு முறையும் இயக்கும்போது வேறு வேறு மதிப்புகளைக் கொடுக்கும்.

நாம் இந்த Unique Identifier Data Type ஐக் கொண்ட Column க்கு எந்த தகவலையும் உள்ளீடு செய்யவேண்டாம். இது தானியங்கியாக கணினியே உருவாக்கும் ஒரு மதிப்பாகும்.

ஒவ்வொரு row வையும் பிரித்துக் காட்ட UniqueIdentifierஐப் பயன்படுத்தலாம்.

உதாரணம் :

declare @a uniqueidentifier
set @a = newid()
print @a

இதன் விடை.

F94771ED-8405-4C30-893E-0325FA0A394C

மேலே கொடுத்துள்ள ஒரு சிறிய நிரல் ஆனது T-SQL programming ல் எழுதப்பட்டது.

T-SQL என்றால் Transact SQL என்ற விரிவைக் கொண்டது. இது ஒரு கணினி மொழி.

மேலே @a என்பது ஒரு variable. இதன் மதிப்பு ஒவ்வொரு முறையும் மாறிக்கொண்டே இருக்கும்.

set @a = newid() ---> என்றால் ஒரு கணினியால் அந்த நேரத்தில் உருவாக்கப்பட்ட ஒரு புதிய hexadecimal based மதிப்பை அந்த variable @a ல் பதிகிறோம்.

print @a --> திரையில் @a என்பதன் மதிப்பைக் காண்பி. உடனே திரையில் தெரியும் மதிப்பானது F94771ED-8405-4C30-893E-0325FA0A394C இப்படி இருக்கலாம். எனக்கு இந்த மதிப்பு வந்தது. உங்களுக்கு வேறு மதிப்பு வரும். ஒவ்வொருவருக்கும் வேறுவேறு மதிப்புகளை இந்த நிரல் உருவாக்கித் தரும்.

AddressLine1, AddressLine2, City, PostalCode ஆகிய Columnகளின் DataType ஆனது nVarchar வகையைச் சேர்ந்தது.

அதாவது இந்த Columnகளில் நாம் unicode வகையைச் சேர்ந்த எண்கள், எழுத்துக்கள், பிற அடையாளங்கள் ஆகியவற்றை உள்ளிடலாம்.

AddressLine1 க்காக நாம் அதிகபட்சமாக 60 எழுத்துக்களை ஒதுக்கியுள்ளோம். ஆனால் நாம் 20 எழுத்துக்களை மட்டுமே உள்ளிட்டால், மீதியுள்ள 40 காலியிடங்கள் trim செய்யப்பட்டு 20 எழுத்துக்கள் மாத்திரமே table ல் பதிவாகும். இதுவே varcharன் சிறப்பு.

இதுவே char என இருந்தால் ஒட்டுமொத்தமாக நாம் எவ்வளவு எழுத்துக்களை ஏற்கனவே ஒதுக்கியுள்ளோமோ அத்தனை இடங்களுமே வீணடிக்கப்பட்டுவிடும்.

AddressID, StateProvinceID இவையிரண்டின் DataType ஆனது int வகையைச் சேர்ந்தது. அதனால் இந்த இரண்டுக்கும் நாம் எண்களை உள்ளீடு செய்யலாம். ஆனால் AddressID ஆனது Identity Column வகையைச் சேர்ந்ததால் (அது auto increment வகைப்பட்டது) அதற்குத் தகவலை உள்ளிட வேண்டாம். StateProviceIDக்கு மட்டும் அதற்குரிய எண்ணைப் பதிவிட்டால் போதும்.

Modified Date என்பதில் அதற்குரிய DataType ஆனது DateTime ஆகக் குறிப்பிடப்பட்டுள்ளது.அதனால் அந்த Modified Date க்கு உரிய columnன் மதிப்பில் ஒரு குறிப்பிட்ட தேதியை உள்ளிடவேண்டும்.

ஒரு சிறிய T-SQL நிரல்.

declare @a datetime
set @a = getdate()
print @a

@a என்பது datetime எனப்படும் DataTypeஐச் சேர்ந்தது.
getdate() எனப்படும் ஒரு function நடப்புத் தேதியையும், நேரத்தையும் தரவல்லது.

print @a என்றவுடன் கிடைத்த விடை.
Jan 26 2009 11:00AM

இங்கே ஒரு சில இடங்களில் புதியவர்களுக்காக சில குறிப்பிட்ட பதங்களை ஒவ்வொரு முறையும் விளக்கியிருப்பேன். Primary key, Identity Column போன்றவற்றை மீண்டும் சுருக்கமாகக் கூறியிருப்பேன். ஒரு புரிதலுக்காகத்தான் அவ்வாறு மீண்டும் கூறியிருக்கிறேனே தவிர வேறெதுவும் இல்லை. இதற்கு முன்னர் வெளியிட்ட 3 பதிவுகளில் அவற்றை விளக்கியிருந்தாலும், அதே பதங்களை இங்கே 4வது பதிவுகளில் பயன்படுத்தும்போது புரியாமல் போகிவிடக்கூடாது மீண்டும் குறுவிளக்கமாகக் குறிப்பிட்டிருக்கிறேன்.

நன்றிகளுடன்,
தமிழ்நெஞ்சம்.

2 comments:

அன்புடன் அருணா said...

Fantastic explanation Thamiznenjam.
anbudan aruna

Tech Shankar said...

Thanks Anbudan Aruna

எளிய தமிழில் SQL - பாகம் 17

பாகம் 15ல் திரு G. ராஜாராமன், சவுதி அரேபியா அவர்கள் கீழ்க்கண்ட கேள்வியை எழுப்பி இருந்தார். அவருக்கு விடையளிக்கும் விதமாக இந்தப்பதிவு அமைகிற...