5.1 அறிமுகம்

தொடர்புடைய தரவுத்தளங்களில் விசைகள் எவ்வாறு தேர்ந்தெடுக்கப்பட வேண்டும் மற்றும் பயன்படுத்தப்பட வேண்டும் என்பது பற்றிய பிடிவாதமான கட்டளைகளால் இணையம் நிரம்பியுள்ளது. சில சமயங்களில் தகராறுகள் கூட ஹோலிவர்களாக மாறும்: இயற்கை அல்லது செயற்கை விசைகள் பயன்படுத்தப்பட வேண்டுமா? தன்னியக்க அதிகரிப்பு முழு எண்கள் அல்லது UUIDகள்?

அறுபத்து நான்கு கட்டுரைகளைப் படித்து, ஐந்து புத்தகங்களின் பகுதிகளைப் புரட்டி, IRC மற்றும் StackOverflow பற்றிய டன் கேள்விகளைக் கேட்ட பிறகு, நான் (ஜோ "பெக்ரிஃப்ஸ்" நெல்சன், அசல் கட்டுரையின் ஆசிரியர்) புதிரின் துண்டுகளை ஒன்றாக இணைத்ததாகத் தெரிகிறது. இப்போது எதிரிகளை சமரசம் செய்ய முடியும். பல முக்கிய சச்சரவுகள் உண்மையில் வேறொருவரின் பார்வையில் தவறான புரிதலால் எழுகின்றன.

சிக்கலைப் பிரித்து, இறுதியில் அதை மீண்டும் ஒன்றாக இணைக்கலாம். முதலில், கேள்வியைக் கேட்போம் - "சாவி" என்றால் என்ன?

முதன்மை விசைகளைப் பற்றி ஒரு கணம் மறந்துவிடுவோம், நாங்கள் மிகவும் பொதுவான யோசனையில் ஆர்வமாக உள்ளோம். விசை என்பது நெடுவரிசை (நெடுவரிசை) அல்லது வரிசைகளில் நகல் மதிப்புகள் இல்லாத நெடுவரிசைகள் ஆகும் . மேலும், நெடுவரிசைகள் குறைக்க முடியாத வகையில் தனித்துவமாக இருக்க வேண்டும், அதாவது நெடுவரிசைகளின் எந்த துணைக்குழுவும் இந்தத் தனித்தன்மையைக் கொண்டிருக்கவில்லை.

ஆனால் முதலில், சில கோட்பாடுகள்:

முதன்மை விசை

முதன்மை விசைஅட்டவணையில் உள்ள வரிசைகளை அடையாளம் காண நேரடியாகப் பயன்படுத்தப்படுகிறது. இது பின்வரும் கட்டுப்பாடுகளுக்கு இணங்க வேண்டும்:

  • முதன்மை விசை எல்லா நேரத்திலும் தனித்துவமாக இருக்க வேண்டும்.
  • இது எப்போதும் அட்டவணையில் இருக்க வேண்டும் மற்றும் ஒரு மதிப்பைக் கொண்டிருக்க வேண்டும்.
  • அதன் மதிப்பை அடிக்கடி மாற்றக் கூடாது. வெறுமனே, அது மதிப்பை மாற்றவே கூடாது .

பொதுவாக, முதன்மை விசை ஒரு அட்டவணையின் ஒற்றை நெடுவரிசையைக் குறிக்கிறது, ஆனால் இது பல நெடுவரிசைகளைக் கொண்ட ஒரு கூட்டு விசையாகவும் இருக்கலாம்.

கூட்டு விசை

தனிப்பயன் விசை- ஒவ்வொரு அட்டவணை வரிசையையும் தனித்துவமாக அடையாளம் காணும் பண்புக்கூறுகளின் (நெடுவரிசைகள்) கலவையாகும். இது அனைத்து நெடுவரிசைகள் மற்றும் பல, மற்றும் ஒன்று. இந்த வழக்கில், இந்த பண்புகளின் மதிப்புகளைக் கொண்ட வரிகளை மீண்டும் செய்யக்கூடாது.

சாத்தியமான திறவுகோல்

வேட்பாளர் சாவி- உறவின் குறைந்தபட்ச கூட்டு விசையை (அட்டவணை) குறிக்கிறது, அதாவது, பல நிபந்தனைகளை பூர்த்தி செய்யும் பண்புகளின் தொகுப்பு:

  • தவிர்க்கமுடியாமை : இது குறைக்கப்பட முடியாது, இது குறைந்தபட்ச சாத்தியமான பண்புக்கூறுகளைக் கொண்டுள்ளது.
  • தனித்துவம் : வரிசை மாற்றத்தைப் பொருட்படுத்தாமல் இது தனித்துவமான மதிப்புகளைக் கொண்டிருக்க வேண்டும்.
  • ஒரு மதிப்பின் இருப்பு : அதற்கு பூஜ்ய மதிப்பு இருக்கக்கூடாது, அதாவது மதிப்பு இருக்க வேண்டும்.

5.2 முதன்மை விசைகளின் வினோதமான வழக்கு

முந்தைய பிரிவில் நாம் "விசைகள்" என்று அழைக்கப்படுவது பொதுவாக "வேட்பாளர் விசைகள்" என்று குறிப்பிடப்படுகிறது. "வேட்பாளர்" என்ற சொல், அத்தகைய அனைத்து விசைகளும் "முதன்மை விசை" (முதன்மை விசை) இன் கௌரவப் பாத்திரத்திற்காக போட்டியிடுவதைக் குறிக்கிறது, மீதமுள்ளவை "மாற்று விசைகள்" (மாற்று விசைகள்) ஒதுக்கப்படுகின்றன.

SQL செயலாக்கங்கள் விசைகள் மற்றும் தொடர்புடைய மாதிரி ஆகியவற்றுக்கு இடையே உள்ள பொருத்தமின்மையை போக்க சிறிது நேரம் எடுத்தது, மேலும் ஆரம்பகால தரவுத்தளங்கள் முதன்மை விசையின் குறைந்த-நிலை கருத்தை நோக்கி அமைந்தன. தொடர் சேமிப்பக மீடியாவில் ஒரு வரிசையின் இயற்பியல் இருப்பிடத்தைக் கண்டறிய இத்தகைய தரவுத்தளங்களில் முதன்மை விசைகள் தேவைப்பட்டன. ஜோ செல்கோ அதை எவ்வாறு விளக்குகிறார் என்பது இங்கே:

"விசை" என்பது ஒரு கோப்பு வரிசை விசையைக் குறிக்கிறது, இது ஒரு தொடர்ச்சியான கோப்பு முறைமையில் எந்த செயலாக்க செயல்பாடுகளையும் செய்யத் தேவைப்பட்டது. பஞ்ச் கார்டுகளின் தொகுப்பு ஒரே ஒரு வரிசையில் வாசிக்கப்பட்டது; திரும்பிச் செல்ல இயலாது. முந்தைய டேப் டிரைவ்கள் அதே நடத்தையைப் பிரதிபலித்தன மற்றும் இருதரப்பு அணுகலை அனுமதிக்கவில்லை. அதாவது, அசல் Sybase SQL சேவையகம் முந்தைய வரிசையைப் படிக்க அட்டவணையை தொடக்கத்திற்கு "ரிவைண்ட்" செய்ய வேண்டும்.

நவீன SQL இல், நீங்கள் தகவலின் உடல் பிரதிநிதித்துவம், அட்டவணைகள் மாதிரி உறவுகளில் கவனம் செலுத்த வேண்டியதில்லை, மேலும் வரிசைகளின் உள் வரிசை முக்கியமல்ல. இருப்பினும், இப்போதும் கூட, SQL சேவையகம் முன்னிருப்பாக முதன்மை விசைகளுக்கு ஒரு கிளஸ்டர் குறியீட்டை உருவாக்குகிறது மற்றும் பழைய பாரம்பரியத்தின் படி, வரிசைகளின் வரிசையை உடல் ரீதியாக ஒழுங்குபடுத்துகிறது.

பெரும்பாலான தரவுத்தளங்களில், முதன்மை விசைகள் கடந்த காலத்தின் ஒரு விஷயமாகும், மேலும் அவை பிரதிபலிப்பு அல்லது இயற்பியல் இருப்பிடத்தை விட சற்று அதிகமாக வழங்குகின்றன. எடுத்துக்காட்டாக, ஒரு PostgreSQL அட்டவணையில், முதன்மை விசையை அறிவிப்பது தானாகவே ஒரு தடையை செயல்படுத்துகிறது NOT NULLமற்றும் இயல்புநிலை வெளிநாட்டு விசையை வரையறுக்கிறது. கூடுதலாக, முதன்மை விசைகள் ஆபரேட்டருக்கு விருப்பமான நெடுவரிசைகளாகும் JOIN.

முதன்மை விசை மற்ற விசைகளை அறிவிக்கும் வாய்ப்பை மீறாது. அதே நேரத்தில், எந்த விசையும் முதன்மையாக ஒதுக்கப்படவில்லை என்றால், அட்டவணை இன்னும் நன்றாக வேலை செய்யும். மின்னல், எப்படியிருந்தாலும், உங்களைத் தாக்காது.

5.3 இயற்கை விசைகளைக் கண்டறிதல்

மேலே விவாதிக்கப்பட்ட விசைகள் "இயற்கை" என்று அழைக்கப்படுகின்றன, ஏனெனில் அவை மாதிரியான பொருளின் பண்புகள், அவை தங்களுக்குள் சுவாரஸ்யமானவை, அவற்றிலிருந்து யாரும் ஒரு திறவுகோலை உருவாக்க விரும்பாவிட்டாலும் கூட.

சாத்தியமான இயற்கை விசைகளுக்கான அட்டவணையை ஆராயும்போது முதலில் நினைவில் கொள்ள வேண்டியது மிகவும் புத்திசாலித்தனமாக இருக்க வேண்டாம். StackExchange இல் உள்ள பயனர் sqlvogel பின்வரும் ஆலோசனையை வழங்குகிறது:

சிலருக்கு "இயற்கை" விசையைத் தேர்ந்தெடுப்பதில் சிரமம் உள்ளது, ஏனெனில் அவர்கள் ஒரு குறிப்பிட்ட விசை தனிப்பட்டதாக இல்லாத அனுமான சூழ்நிலைகளைக் கொண்டு வருகிறார்கள். பணியின் அர்த்தமே அவர்களுக்குப் புரியவில்லை. ஒரு குறிப்பிட்ட அட்டவணையில் எந்த நேரத்திலும் பண்புக்கூறுகள் எப்போதும் தனித்துவமாக இருக்க வேண்டிய விதியை வரையறுப்பதே விசையின் பொருள். அட்டவணையில் ஒரு குறிப்பிட்ட மற்றும் நன்கு புரிந்துகொள்ளப்பட்ட சூழலில் ("பொருள் பகுதி" அல்லது "உரையாடல் பகுதியில்") தரவு உள்ளது, மேலும் அந்த குறிப்பிட்ட பகுதியில் உள்ள தடையின் பயன்பாடு மட்டுமே அர்த்தம்.

கிடைக்கக்கூடிய மதிப்புகளுடன் நெடுவரிசை தனித்துவமாக இருக்கும்போது ஒரு முக்கிய தடையை அறிமுகப்படுத்துவது அவசியம் என்பதை நடைமுறை காட்டுகிறது. தேவைப்பட்டால், கட்டுப்பாடு அகற்றப்படலாம் (இது உங்களைத் தொந்தரவு செய்தால், முக்கிய நிலைத்தன்மையைப் பற்றி கீழே பேசுவோம்.)

எடுத்துக்காட்டாக, பொழுதுபோக்கு கிளப் உறுப்பினர்களின் தரவுத்தளமானது இரண்டு நெடுவரிசைகளில் தனித்துவத்தைக் கொண்டிருக்கலாம் - first_name, last_name. ஒரு சிறிய அளவிலான தரவுகளுடன், நகல்களுக்கு வாய்ப்பு இல்லை, மேலும் ஒரு உண்மையான மோதல் எழுவதற்கு முன்பு, அத்தகைய விசையைப் பயன்படுத்துவது மிகவும் நியாயமானது.

தரவுத்தளம் வளரும் மற்றும் தகவலின் அளவு அதிகரிக்கும் போது, ​​இயற்கையான விசையைத் தேர்ந்தெடுப்பது மிகவும் கடினமாகிவிடும். நாங்கள் சேமிக்கும் தரவு வெளிப்புற யதார்த்தத்தின் எளிமைப்படுத்தலாகும், மேலும் உலகில் உள்ள பொருட்களை வேறுபடுத்தும் சில அம்சங்களைக் கொண்டிருக்கவில்லை, அதாவது காலப்போக்கில் மாறும் அவற்றின் ஆயத்தொலைவுகள் போன்றவை. ஒரு பொருளுக்கு எந்த குறியீடும் இல்லை என்றால், இரண்டு கேன்கள் பானம் அல்லது இரண்டு பெட்டி ஓட்மீல் அவற்றின் இடஞ்சார்ந்த ஏற்பாடு அல்லது எடை அல்லது பேக்கேஜிங்கில் உள்ள சிறிய வேறுபாடுகளைத் தவிர்த்து எப்படி சொல்ல முடியும்?

அதனால்தான் தரப்படுத்தல் அமைப்புகள் தயாரிப்புகளுக்கு தனித்துவமான மதிப்பெண்களை உருவாக்கி பயன்படுத்துகின்றன. வாகனங்களில் வாகன அடையாள எண் (விஐஎன்) முத்திரையிடப்பட்டுள்ளது , புத்தகங்கள் ஐஎஸ்பிஎன்களால் அச்சிடப்படுகின்றன , உணவுப் பொதிகளில் யுபிசிகள் உள்ளன . இந்த எண்கள் இயற்கையாக இல்லை என்று நீங்கள் எதிர்க்கலாம். நான் ஏன் அவற்றை இயற்கை விசைகள் என்று அழைக்கிறேன்?

தரவுத்தளத்தில் உள்ள தனித்துவமான பண்புகளின் இயல்பான தன்மை அல்லது செயற்கைத்தன்மை வெளி உலகத்துடன் தொடர்புடையது. ஒரு தரநிலை அமைப்பிலோ அல்லது அரசாங்க நிறுவனத்திலோ உருவாக்கப்பட்ட போது செயற்கையாக இருந்த ஒரு விசையானது நமக்கு இயற்கையானது, ஏனெனில் அது உலகம் முழுவதும் ஒரு தரமாக மாறுகிறது மற்றும் / அல்லது பொருள்களில் அச்சிடப்படுகிறது.

நாணயங்கள், மொழிகள், நிதி கருவிகள், இரசாயனங்கள் மற்றும் மருத்துவ நோயறிதல்கள் உட்பட பல்வேறு பாடங்களுக்கு பல தொழில்துறை, பொது மற்றும் சர்வதேச தரநிலைகள் உள்ளன. இயற்கை விசைகளாகப் பயன்படுத்தப்படும் சில மதிப்புகள் இங்கே:

  • ISO 3166 நாட்டின் குறியீடுகள்
  • ISO 639 மொழி குறியீடுகள்
  • ஐஎஸ்ஓ 4217 இன் படி நாணயக் குறியீடுகள்
  • பங்கு சின்னங்கள் ISIN
  • UPC/EAN, VIN, GTIN, ISBN
  • உள்நுழைவு பெயர்கள்
  • மின்னஞ்சல் முகவரிகள்
  • அறை எண்கள்
  • நெட்வொர்க் மேக் முகவரி
  • பூமியின் மேற்பரப்பில் உள்ள புள்ளிகளுக்கான அட்சரேகை, தீர்க்கரேகை

சாத்தியமான மற்றும் நியாயமான, ஒரு அட்டவணைக்கு பல விசைகள் இருக்கும் போதெல்லாம் விசைகளை அறிவிக்க பரிந்துரைக்கிறேன். ஆனால் மேலே உள்ள அனைத்திற்கும் விதிவிலக்குகள் இருக்கலாம் என்பதை நினைவில் கொள்ளுங்கள்.

  • அனைவருக்கும் மின்னஞ்சல் முகவரி இல்லை, இருப்பினும் சில தரவுத்தள நிபந்தனைகளின் கீழ் இது ஏற்றுக்கொள்ளப்படலாம். மேலும், மக்கள் தங்கள் மின்னஞ்சல் முகவரியை அவ்வப்போது மாற்றுகிறார்கள். (முக்கிய நிலைத்தன்மை பற்றி பின்னர்.)
  • ISIN பங்குச் சின்னங்கள் அவ்வப்போது மாறும், எடுத்துக்காட்டாக, GOOG மற்றும் GOOGL குறியீடுகள் Google இலிருந்து Alphabet வரை நிறுவனத்தின் மறுசீரமைப்பை துல்லியமாக விவரிக்கவில்லை. சில நேரங்களில் குழப்பம் ஏற்படலாம், TWTR மற்றும் TWTRQ போன்றவை, சில முதலீட்டாளர்கள் ட்விட்டர் ஐபிஓவின் போது பிந்தையதை தவறாக வாங்கினர்.
  • சமூகப் பாதுகாப்பு எண்கள் அமெரிக்க குடிமக்களால் மட்டுமே பயன்படுத்தப்படுகின்றன, தனியுரிமைக் கட்டுப்பாடுகள் உள்ளன, மேலும் அவை இறந்த பிறகு மீண்டும் பயன்படுத்தப்படுகின்றன. கூடுதலாக, ஆவணங்கள் திருடப்பட்ட பிறகு, மக்கள் புதிய எண்களைப் பெறலாம். இறுதியாக, ஒரே எண் ஒரு நபரையும் வருமான வரி அடையாளங்காட்டியையும் அடையாளம் காண முடியும்.
  • நகரங்களுக்கு ஜிப் குறியீடுகள் ஒரு மோசமான தேர்வாகும். சில நகரங்களில் பொதுவான குறியீடு உள்ளது, அல்லது அதற்கு நேர்மாறாக, ஒரு நகரத்தில் பல குறியீடுகள் உள்ளன.

5.4 செயற்கை விசைகள்

விசை ஒவ்வொரு வரிசையிலும் தனித்துவமான மதிப்புகளைக் கொண்ட ஒரு நெடுவரிசையாக இருப்பதால், அதை உருவாக்குவதற்கான ஒரு வழி ஏமாற்றுவது - ஒவ்வொரு வரிசையிலும் கற்பனையான தனிப்பட்ட மதிப்புகளை எழுதலாம். இவை செயற்கை விசைகள்: தரவு அல்லது பொருள்களைக் குறிக்கப் பயன்படுத்தப்படும் குறியீடு கண்டுபிடிக்கப்பட்டது.

தரவுத்தளத்தில் இருந்தே குறியீடு உருவாக்கப்படுவது மிகவும் முக்கியமானது மற்றும் தரவுத்தளத்தின் பயனர்களைத் தவிர வேறு யாருக்கும் தெரியாது. இதுவே செயற்கை விசைகளை தரப்படுத்தப்பட்ட இயற்கை விசைகளிலிருந்து வேறுபடுத்துகிறது.

ஒரு அட்டவணையில் உள்ள நகல் அல்லது சீரற்ற வரிசைகளுக்கு எதிராக இயற்கை விசைகள் பாதுகாக்கும் நன்மையைக் கொண்டிருந்தாலும், செயற்கை விசைகள் பயனுள்ளதாக இருக்கும், ஏனெனில் அவை மனிதர்கள் அல்லது பிற அமைப்புகளுக்கு வரிசையைக் குறிப்பிடுவதை எளிதாக்குகின்றன, மேலும் அவை தேடுதலை விரைவுபடுத்துகின்றன மற்றும் அவை பயன்படுத்தாததால் இணைகின்றன. சரம் (அல்லது பல நெடுவரிசை) ஒப்பீடுகள்.

மாற்றுத் திறனாளிகள்

செயற்கை விசைகள் நங்கூரங்களாகப் பயன்படுத்தப்படுகின்றன - விதிகள் மற்றும் நெடுவரிசைகள் எவ்வாறு மாறினாலும், ஒரு வரிசையை எப்போதும் அதே வழியில் அடையாளம் காண முடியும். இந்த நோக்கத்திற்காக பயன்படுத்தப்படும் செயற்கை விசையானது "வாலி விசை" என்று அழைக்கப்படுகிறது மற்றும் சிறப்பு கவனம் தேவை. பினாமிகளை கீழே கருத்தில் கொள்வோம்.

பினாமி அல்லாத செயற்கை விசைகள் தரவுத்தளத்திற்கு வெளியே இருந்து ஒரு வரிசையைக் குறிப்பிடுவதற்கு பயனுள்ளதாக இருக்கும். ஒரு செயற்கை விசை ஒரு தரவு அல்லது பொருளை சுருக்கமாக அடையாளம் காட்டுகிறது: இது ஒரு URL ஆக குறிப்பிடப்படலாம், விலைப்பட்டியலுடன் இணைக்கப்படலாம், தொலைபேசியில் கட்டளையிடலாம், வங்கியிலிருந்து பெறலாம் அல்லது உரிமத் தட்டில் அச்சிடலாம். (காரின் லைசென்ஸ் பிளேட் என்பது நமக்கு இயற்கையான சாவி, ஆனால் செயற்கை சாவியாக அரசாங்கத்தால் வடிவமைக்கப்பட்டது.)

எழுத்துப் பிழைகள் மற்றும் பிழைகளைக் குறைப்பதற்கு சாத்தியமான பரிமாற்ற வழிமுறைகளைக் கருத்தில் கொண்டு செயற்கை விசைகளைத் தேர்ந்தெடுக்க வேண்டும். விசையை பேசலாம், அச்சிடலாம், எஸ்எம்எஸ் மூலம் அனுப்பலாம், கையால் எழுதலாம், கீபோர்டில் இருந்து தட்டச்சு செய்யலாம் மற்றும் URL இல் உட்பொதிக்கலாம் என்பதை கவனத்தில் கொள்ள வேண்டும். கூடுதலாக, கிரெடிட் கார்டு எண்கள் போன்ற சில செயற்கை விசைகள் செக்சம் கொண்டிருக்கும், இதனால் சில பிழைகள் ஏற்பட்டால், அவை குறைந்தபட்சம் அங்கீகரிக்கப்படலாம்.

எடுத்துக்காட்டுகள்:

  • அமெரிக்க உரிமத் தகடுகளுக்கு, O மற்றும் 0 போன்ற தெளிவற்ற எழுத்துக்களைப் பயன்படுத்துவதற்கான விதிகள் உள்ளன.
  • மருத்துவமனைகள் மற்றும் மருந்தகங்கள் மருத்துவர்களின் கையெழுத்தைக் கருத்தில் கொண்டு குறிப்பாக கவனமாக இருக்க வேண்டும்.
  • உரைச் செய்தி மூலம் உறுதிப்படுத்தல் குறியீட்டை அனுப்புகிறீர்களா? GSM 03.38 எழுத்துத் தொகுப்பிற்கு அப்பால் செல்ல வேண்டாம்.
  • தன்னிச்சையான பைட் தரவை குறியாக்கம் செய்யும் Base64 போலல்லாமல், Base32 பழைய கணினி அமைப்புகளில் பயன்படுத்தவும் கையாளவும் மனிதர்களுக்கு வசதியான ஒரு வரையறுக்கப்பட்ட எழுத்துத் தொகுப்பைப் பயன்படுத்துகிறது.
  • ப்ரோக்விண்ட்கள் படிக்கக்கூடிய, எழுதக்கூடிய மற்றும் உச்சரிக்கக்கூடிய அடையாளங்காட்டிகள். இவை சந்தேகத்திற்கு இடமின்றி புரிந்து கொள்ளப்பட்ட மெய்யெழுத்துகள் மற்றும் உயிரெழுத்துக்களின் PRO-அறிவிக்கக்கூடிய QUINT-அப்லெட்டுகள்.

உங்கள் செயற்கை விசையை உலகிற்கு அறிமுகப்படுத்தியவுடன், மக்கள் விசித்திரமாக அதற்கு சிறப்பு கவனம் செலுத்தத் தொடங்குவார்கள் என்பதை நினைவில் கொள்ளுங்கள். "திருடர்கள்" உரிமத் தகடுகளைப் பாருங்கள் அல்லது உச்சரிக்கக்கூடிய அடையாளங்காட்டிகளை உருவாக்குவதற்கான அமைப்பைப் பாருங்கள், இது பிரபலமற்ற தானியங்கு சாபம் ஜெனரேட்டராக மாறியுள்ளது.

எண் விசைகளுக்குள் நாம் மட்டுப்படுத்தப்பட்டாலும், பதின்மூன்றாவது தளம் போன்ற தடைகள் உள்ளன. ப்ரோக்வின்ட்கள் பேசும் எழுத்துக்கு அதிக அடர்த்தி கொண்ட தகவல்களாக இருந்தாலும், எண்கள் பல வழிகளில் நன்றாக இருக்கும்: URLகள், பின்-விசைப்பலகைகள் மற்றும் கையால் எழுதப்பட்ட குறிப்புகள், பெறுநருக்குத் தெரியும் வரை, எண்கள் மட்டுமே.

இருப்பினும், பொது எண் விசைகளில் வரிசைமுறை வரிசையைப் பயன்படுத்தக் கூடாது என்பதை நினைவில் கொள்ளவும், ஏனெனில் இது வளங்களை (/videos/1.mpeg, /videos/2.mpeg, மற்றும் பல) மற்றும் எண்ணைப் பற்றிய தகவலைக் கசிய அனுமதிக்கிறது. தகவல்கள். எண்களின் வரிசையில் ஒரு Feistel வலையை மிகைப்படுத்தி, எண்களின் வரிசையை மறைக்கும்போது தனித்துவத்தைப் பாதுகாக்கவும்.

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

பல செயற்கை விசைகள் ஏதேனும் இருந்தால் அறிவிப்பதும் மதிப்பு. எடுத்துக்காட்டாக, ஒரு நிறுவனத்தில் வேலை வேட்பாளர்கள் (விண்ணப்பதாரர்கள்) மற்றும் பணியாளர்கள் (ஊழியர்கள்) உள்ளனர். ஒவ்வொரு பணியாளரும் ஒருமுறை வேட்பாளராக இருந்தார், மேலும் அவர்களின் சொந்த அடையாளங்காட்டி மூலம் வேட்பாளர்களைக் குறிப்பிடுகிறார், இது பணியாளரின் திறவுகோலாகவும் இருக்க வேண்டும். மற்றொரு எடுத்துக்காட்டு, நீங்கள் பணியாளர் ஐடி மற்றும் உள்நுழைவு பெயரை பணியாளர்களில் இரண்டு விசைகளாக அமைக்கலாம்.

5.5 வாகை விசைகள்

ஏற்கனவே குறிப்பிட்டுள்ளபடி, ஒரு முக்கியமான வகை செயற்கை விசை "வாலி விசை" என்று அழைக்கப்படுகிறது. இது மற்ற செயற்கை விசைகளைப் போல சுருக்கமாகவும் கடந்து செல்லக்கூடியதாகவும் இருக்க வேண்டிய அவசியமில்லை, ஆனால் சரத்தை எப்போதும் அடையாளம் காட்டும் உள் லேபிளாகப் பயன்படுத்தப்படுகிறது. இது SQL இல் பயன்படுத்தப்படுகிறது, ஆனால் பயன்பாடு அதை வெளிப்படையாக அணுகவில்லை.

PostgreSQL இன் சிஸ்டம் நெடுவரிசைகளை நீங்கள் நன்கு அறிந்திருந்தால், நீங்கள் பினாமிகளை கிட்டத்தட்ட ஒரு தரவுத்தள செயலாக்க அளவுருவாக (ctid போன்றவை) நினைக்கலாம், இருப்பினும், இது எப்போதும் மாறாது. ஒரு வரிசைக்கு ஒரு முறை பினாமி மதிப்பு தேர்ந்தெடுக்கப்பட்டது, அதன் பிறகு மாற்றப்படாது.

ON UPDATE RESTRICTவாடகை விசைகள் வெளிநாட்டு விசைகளைப் போலவே சிறந்தவை, மேலும் பினாமியின் மாறாத தன்மையுடன் பொருந்துவதற்கு அடுக்கு கட்டுப்பாடுகள் குறிப்பிடப்பட வேண்டும் .

மறுபுறம், பொதுவில் பகிரப்பட்ட விசைகளுக்கான வெளிநாட்டு விசைகள் ON UPDATE CASCADEஅதிகபட்ச நெகிழ்வுத்தன்மையை வழங்க, உடன் குறிக்கப்பட வேண்டும். கேஸ்கேடிங் புதுப்பிப்பு சுற்றியுள்ள பரிவர்த்தனையின் அதே தனிமைப்படுத்தல் மட்டத்தில் இயங்குகிறது, எனவே ஒத்திசைவு சிக்கல்களைப் பற்றி கவலைப்பட வேண்டாம் - நீங்கள் ஒரு கண்டிப்பான தனிமைப்படுத்தல் அளவைத் தேர்வுசெய்தால் தரவுத்தளம் நன்றாக இருக்கும்.

பினாமி விசைகளை "இயற்கையாக" மாற்ற வேண்டாம். இறுதிப் பயனர்களுக்கு பினாமி விசையின் மதிப்பைக் காட்டினால், அல்லது மோசமாக இருந்தால், அந்த மதிப்புடன் (குறிப்பாக ஒரு தேடலின் மூலம்) வேலை செய்ய அனுமதித்தால், நீங்கள் திறம்பட விசைக்கு மதிப்பைக் கொடுக்கிறீர்கள். உங்கள் தரவுத்தளத்திலிருந்து காட்டப்படும் விசையானது வேறொருவரின் தரவுத்தளத்தில் இயல்பான விசையாக மாறும்.

பரிமாற்றத்திற்காக பிரத்யேகமாக வடிவமைக்கப்பட்ட பிற செயற்கை விசைகளைப் பயன்படுத்த வெளிப்புற அமைப்புகளை கட்டாயப்படுத்துவது, மாறிவரும் தேவைகளைப் பூர்த்தி செய்ய தேவையான விசைகளை மாற்றுவதற்கு நம்மை அனுமதிக்கிறது, அதே நேரத்தில் பினாமிகளுடன் உள் குறிப்பு ஒருமைப்பாட்டைப் பராமரிக்கிறது.

தானியங்கு அதிகரிப்பு INT/BIGINT

பினாமி விசைகளுக்கான மிகவும் பொதுவான பயன்பாடானது தானாக அதிகரிக்கும் "பெரிய சீரியல்" நெடுவரிசை ஆகும், இது அடையாளம் என்றும் அழைக்கப்படுகிறது . (உண்மையில், PostgreSQL 10 ஆனது இப்போது அடையாள கட்டமைப்பை ஆதரிக்கிறது, ஆரக்கிள் போலவே, அட்டவணையை உருவாக்குவதைப் பார்க்கவும்.)

இருப்பினும், தானாக அதிகரிக்கும் முழு எண் என்பது பினாமி விசைகளுக்கு ஒரு மோசமான தேர்வாகும் என்று நான் நம்புகிறேன். இந்த கருத்து பிரபலமற்றது, எனவே விளக்குகிறேன்.

தொடர் விசைகளின் தீமைகள்:

  • எல்லா வரிசைகளும் 1 இல் தொடங்கி, படிப்படியாக அதிகரித்தால், வெவ்வேறு அட்டவணைகளின் வரிசைகள் ஒரே முக்கிய மதிப்புகளைக் கொண்டிருக்கும். இந்த விருப்பம் சிறந்ததல்ல, அட்டவணையில் உள்ள விசைகளின் விசைகளின் பிரிவினைகளைப் பயன்படுத்துவது இன்னும் விரும்பத்தக்கது, எனவே, எடுத்துக்காட்டாக, வினவல்கள் தற்செயலாக மாறிலிகளை குழப்பி JOINஎதிர்பாராத முடிவுகளைத் தராது. (மாற்றாக, குறுக்குவெட்டுகள் இல்லை என்பதை உறுதிப்படுத்த, ஒருவர் ஒவ்வொரு வரிசையையும் வெவ்வேறு பகா எண்களின் மடங்குகளிலிருந்து உருவாக்கலாம், ஆனால் இது மிகவும் கடினமானதாக இருக்கும்.)
  • nextval() இன்றைய விநியோகிக்கப்பட்ட SQL இல் ஒரு வரிசையை உருவாக்குவதற்கான அழைப்பு முழு அமைப்பும் சரியாக அளவிடப்படவில்லை.
  • வரிசைமுறை விசைகளைப் பயன்படுத்தும் தரவுத்தளத்திலிருந்து தரவை உட்கொள்வது முரண்பாடுகளை ஏற்படுத்தும், ஏனெனில் வரிசை மதிப்புகள் கணினிகள் முழுவதும் தனிப்பட்டதாக இருக்காது.
  • ஒரு தத்துவக் கண்ணோட்டத்தில், எண்களின் தொடர்ச்சியான அதிகரிப்பு பழைய அமைப்புகளுடன் தொடர்புடையது, அதில் வரிகளின் வரிசை குறிக்கப்படுகிறது. நீங்கள் இப்போது வரிசைகளை ஆர்டர் செய்ய விரும்பினால், நேர முத்திரை நெடுவரிசை அல்லது உங்கள் தரவில் அர்த்தமுள்ள ஒன்றைக் கொண்டு வெளிப்படையாகச் செய்யுங்கள். இல்லையெனில், முதல் சாதாரண வடிவம் மீறப்படுகிறது.
  • பலவீனமான காரணம், ஆனால் இந்த குறுகிய அடையாளங்காட்டிகள் யாரிடமாவது சொல்லத் தூண்டுகின்றன.

UUID

மற்றொரு விருப்பத்தைப் பார்ப்போம்: சீரற்ற வடிவத்தின்படி உருவாக்கப்பட்ட பெரிய முழு எண்களைப் (128-பிட்) பயன்படுத்துதல். இத்தகைய உலகளாவிய தனித்துவ அடையாளங்காட்டிகளை (UUID கள்) உருவாக்குவதற்கான அல்காரிதம்கள் ஒரே நேரத்தில் இரண்டு வெவ்வேறு செயலிகளில் இயங்கும் போது கூட, ஒரே மதிப்பை இருமுறை தேர்ந்தெடுக்கும் நிகழ்தகவு மிகக் குறைவு.

அப்படியானால், UUIDகள் வாடகை விசைகளாகப் பயன்படுத்துவதற்கான இயல்பான தேர்வாகத் தெரிகிறது, இல்லையா? நீங்கள் வரிசைகளை தனித்துவமான முறையில் லேபிளிட விரும்பினால், தனித்துவமான லேபிளை விட எதுவும் இல்லை!

எல்லோரும் ஏன் அவற்றை PostgreSQL இல் பயன்படுத்துவதில்லை? இதற்கு பல திட்டமிடப்பட்ட காரணங்கள் உள்ளன மற்றும் ஒரு தர்க்கரீதியான ஒன்றைச் சுற்றி வேலை செய்ய முடியும், மேலும் எனது கருத்தை விளக்குவதற்கு நான் வரையறைகளை முன்வைப்பேன்.

முதலில், நான் தொலைதூர காரணங்களைப் பற்றி பேசுவேன். UUID கள் சரங்கள் என்று சிலர் நினைக்கிறார்கள், ஏனெனில் அவை பாரம்பரிய ஹெக்ஸாடெசிமல் குறியீட்டில் கோடு: 5bd68e64-ff52-4f54-ace4-3cd9161c8b7f. உண்மையில், சில தரவுத்தளங்களில் கச்சிதமான (128-பிட்) uuid வகை இல்லை, ஆனால் PostgreSQL இரண்டு அளவைக் கொண்டுள்ளது bigint, அதாவது, தரவுத்தளத்தில் உள்ள மற்ற தகவல்களின் அளவுடன் ஒப்பிடும்போது, ​​மேல்நிலை மிகக் குறைவு.

UUID கள் சிக்கலானவை என்று நியாயமற்ற முறையில் குற்றம் சாட்டப்படுகின்றன, ஆனால் அவற்றை யார் உச்சரிப்பார்கள், தட்டச்சு செய்வார்கள் அல்லது படிப்பார்கள்? செயற்கை விசைகள் காட்டப்படுவது அர்த்தமுள்ளதாக இருக்கிறது, ஆனால் யாரும் (வரையறையின்படி) மாற்று UUID ஐப் பார்க்கக்கூடாது. கணினியை பிழைத்திருத்த psql இல் SQL கட்டளைகளை இயக்கும் டெவலப்பரால் UUID கையாளப்படும், ஆனால் அது பற்றி. மேலும் டெவலப்பர் அவர்கள் கொடுக்கப்பட்டால், மிகவும் வசதியான விசைகளைப் பயன்படுத்தி சரங்களையும் குறிப்பிடலாம்.

UUID களின் உண்மையான பிரச்சனை என்னவென்றால், அதிக சீரற்ற மதிப்புகள், முழுப் பக்கத்தை எழுதும் பதிவுக்கு (WAL) எழுதுவதால், பெருக்கத்தை எழுத வழிவகுக்கிறது . இருப்பினும், செயல்திறன் சிதைவு உண்மையில் UUID தலைமுறை அல்காரிதம் சார்ந்தது.

எழுத்து பெருக்கத்தை அளவிடுவோம் . உண்மையில், சிக்கல் பழைய கோப்பு முறைமைகளில் உள்ளது. PostgreSQL வட்டில் எழுதும் போது, ​​அது வட்டில் உள்ள "பக்கத்தை" மாற்றுகிறது. நீங்கள் கணினியின் சக்தியை முடக்கினால், பெரும்பாலான கோப்பு முறைமைகள் தரவு வட்டில் பாதுகாப்பாகச் சேமிக்கப்படுவதற்கு முன்பே வெற்றிகரமாக எழுதப்பட்டதாகப் புகாரளிக்கும். PostgreSQL அத்தகைய செயலை நிறைவு செய்ததாக அப்பாவியாக உணர்ந்தால், அடுத்த கணினி துவக்கத்தின் போது தரவுத்தளம் சிதைந்துவிடும்.

PostgreSQL ஆனது பெரும்பாலான இயக்க முறைமைகள்/கோப்பு முறைமைகள்/வட்டு உள்ளமைவுகளை நம்பி தொடர்ச்சியை வழங்க முடியாது என்பதால், தரவுத்தளம் மாற்றப்பட்ட டிஸ்க் பக்கத்தின் முழு நிலையை ஒரு ரைட்-அஹெட் லாக்கில் சேமிக்கிறது, இது சாத்தியமான செயலிழப்பிலிருந்து மீட்கப் பயன்படும். UUID கள் போன்ற மிகவும் சீரற்ற மதிப்புகளை அட்டவணைப்படுத்துவது பொதுவாக வெவ்வேறு வட்டு பக்கங்களின் தொகுப்பை உள்ளடக்கியது மற்றும் ஒவ்வொரு புதிய நுழைவுக்கும் முழு பக்க அளவு (பொதுவாக 4 அல்லது 8 KB) WAL இல் எழுதப்படும். இது முழுப் பக்க எழுத்து (முழு பக்க எழுதுதல், FPW) என்று அழைக்கப்படுகிறது.

சில UUID தலைமுறை அல்காரிதம்கள் (Twitter இன் "ஸ்னோஃப்ளேக்" அல்லது uuid_generate_v1() PostgreSQL இன் uuid-ossp நீட்டிப்பு போன்றவை) ஒவ்வொரு கணினியிலும் ஒரே மாதிரியான மதிப்புகளை உருவாக்குகின்றன. இந்த அணுகுமுறை குறைவான வட்டு பக்கங்களில் எழுதுவதை ஒருங்கிணைத்து FPW ஐ குறைக்கிறது.

5.6 முடிவுகள் மற்றும் பரிந்துரைகள்

இப்போது பல்வேறு வகையான விசைகள் மற்றும் அவற்றின் பயன்பாடுகளைப் பார்த்தோம், அவற்றை உங்கள் தரவுத்தளங்களில் பயன்படுத்துவதற்கான எனது பரிந்துரைகளை பட்டியலிட விரும்புகிறேன்.

ஒவ்வொரு அட்டவணைக்கும்:

  • அனைத்து இயற்கை விசைகளையும் வரையறுத்து அறிவிக்கவும்.
  • இயல்புநிலை மதிப்புடன் UUID<table_name>_id வகையின் பினாமி விசையை உருவாக்கவும் . நீங்கள் அதை முதன்மை விசையாகக் கூட குறிக்கலாம். இந்த அடையாளங்காட்டியில் அட்டவணையின் பெயரைச் சேர்த்தால், இது எளிதாக்கும் , அதாவது. பதிலாக பெறு . இந்த விசையை வாடிக்கையாளர்களுக்கு அனுப்ப வேண்டாம் மற்றும் தரவுத்தளத்திற்கு வெளியே அதை வெளிப்படுத்த வேண்டாம்.uuid_generate_v1()JOINJOIN foo USING (bar_id)JOIN foo ON (foo.bar_id = bar.id)
  • வழியாக செல்லும் இடைநிலை அட்டவணைகளுக்கு JOIN, அனைத்து வெளிநாட்டு விசை நெடுவரிசைகளையும் ஒற்றை கூட்டு முதன்மை விசையாக அறிவிக்கவும்.
  • விருப்பமாக, URL அல்லது பிற சரம் குறிப்பு அறிகுறிகளில் பயன்படுத்தக்கூடிய செயற்கை விசையைச் சேர்க்கவும். தானாக அதிகரிக்கும் முழு எண்களை மறைக்க Feistel கட்டம் அல்லது pg_hashids ஐப் பயன்படுத்தவும் .
  • ON UPDATE RESTRICTவாகை UUIDகளை வெளிநாட்டு விசைகளாகவும் செயற்கை வெளிநாட்டு விசைகளாகவும் பயன்படுத்தி ஒரு அடுக்குத் தடையைக் குறிப்பிடவும் ON UPDATE CASCADE. உங்கள் சொந்த தர்க்கத்தின் அடிப்படையில் இயற்கை விசைகளைத் தேர்ந்தெடுக்கவும்.

இயற்கை விசைகளை அனுமதிக்கும் மற்றும் பாதுகாக்கும் போது இந்த அணுகுமுறை உள் விசைகளின் நிலைத்தன்மையை உறுதி செய்கிறது. கூடுதலாக, காணக்கூடிய செயற்கை விசைகள் எதனுடனும் இணைக்கப்படாது. எல்லாவற்றையும் சரியாகப் புரிந்துகொண்டு, நீங்கள் "முதன்மை விசைகளில்" மட்டுமே தொங்கவிட முடியாது மற்றும் விசைகளைப் பயன்படுத்துவதற்கான அனைத்து சாத்தியக்கூறுகளையும் பயன்படுத்த முடியாது.