Django ORM-இன் முழு திறனையும், Model Meta விருப்பத்தேர்வுகளுடன் தரவுத்தள அட்டவணை நடத்தையை ஆழமாகப் புரிந்துகொண்டு தனிப்பயனாக்குங்கள். சர்வதேச டெவலப்பர்களுக்கான இன்றியமையாத அமைப்புகளை உள்ளடக்கியது.
Django Model Meta விருப்பங்கள்: உலகளாவிய பயன்பாடுகளுக்கான தரவுத்தள அட்டவணை தனிப்பயனாக்குதலை மாஸ்டரிங் செய்தல்
வலை மேம்பாட்டின் மாறும் உலகில், உங்கள் பயன்பாடு அதன் தரவுத்தளத்துடன் எவ்வாறு தொடர்பு கொள்கிறது என்பதைத் துல்லியமாகக் கட்டுப்படுத்தும் திறன் மிக முக்கியமானது. Django, அதன் சக்திவாய்ந்த ஆப்ஜெக்ட்-ரிலேஷனல் மேப்பர் (ORM) உடன், இந்த தொடர்புக்கான ஒரு வலுவான கட்டமைப்பை வழங்குகிறது. Django ORM இன் இயல்புநிலை நடத்தை பெரும்பாலும் போதுமானதாக இருந்தாலும், அளவிடக்கூடிய, செயல்படக்கூடிய மற்றும் சர்வதேச அளவில் அறிந்த பயன்பாடுகளை உருவாக்குவதற்கு மேம்பட்ட தனிப்பயனாக்கம் அவசியம். இந்த தனிப்பயனாக்கத்தின் மையத்தில் உங்கள் Django மாடல்களுக்குள் Meta
வகுப்பு உள்ளது.
இந்த விரிவான வழிகாட்டி, Django இன் Meta
விருப்பத்தேர்வுகளின் நுணுக்கங்களுக்குள் செல்கிறது, குறிப்பாக அவை டெவலப்பர்களை தரவுத்தள அட்டவணை நடத்தையை எவ்வாறு வடிவமைக்க உதவுகின்றன என்பதில் கவனம் செலுத்துகிறது. அட்டவணை பெயரிடுதல், மனிதனால் படிக்கக்கூடிய பெயர்கள், இயல்புநிலை வரிசைப்படுத்துதல், தனித்துவமான கட்டுப்பாடுகள் மற்றும் குறியீட்டு உத்திகள் ஆகியவற்றை பாதிக்கும் முக்கிய விருப்பங்களை நாங்கள் ஆராய்வோம், இவை அனைத்தும் உலகளாவிய கண்ணோட்டத்தில் உள்ளன. நீங்கள் ஒரு உள்ளூர்மயமாக்கப்பட்ட இ-காமர்ஸ் தளத்தை உருவாக்கி வருகிறீர்களா அல்லது ஒரு பன்னாட்டு நிறுவன பயன்பாட்டை உருவாக்குகிறீர்களா, இந்த Meta
விருப்பத்தேர்வுகளை மாஸ்டரிங் செய்வது உங்கள் தரவுத்தள மேலாண்மை திறனை கணிசமாக அதிகரிக்கும்.
Meta
வகுப்பைப் புரிந்துகொள்வது
Django மாடல்களில் உள்ள Meta
வகுப்பு என்பது மாதிரி பற்றிய மெட்டாடேட்டாவை வழங்கும் ஒரு சிறப்பு உள் வகுப்பாகும். இது ஒரு மாதிரி புலம் அல்ல; அதற்கு பதிலாக, இது Django இன் ORM தரவுத்தளத்துடன் எவ்வாறு தொடர்பு கொள்கிறது மற்றும் Django சுற்றுச்சூழல் அமைப்பில் மாதிரி எவ்வாறு நிர்வகிக்கப்படுகிறது என்பதை பாதிக்கும் ஒரு உள்ளமைவு கொள்கலனாக உள்ளது. இந்த Meta
வகுப்பில் பண்புக்கூறுகளை வரையறுப்பதன் மூலம், நீங்கள் இயல்புநிலை நடத்தைகளை மேலெழுதலாம் மற்றும் தனிப்பயன் தர்க்கத்தை செயல்படுத்தலாம்.
ஒரு எளிய Django மாதிரியைக் கவனியுங்கள்:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return self.name
இயல்பாக, Django மாதிரியின் பயன்பாட்டு லேபிள் மற்றும் பெயரின் அடிப்படையில் தரவுத்தள அட்டவணை பெயரை யூகிக்கும். shop
என்ற பயன்பாட்டில் உள்ள Product
மாதிரிக்கு, அட்டவணைக்கு shop_product
என்று பெயரிடப்படலாம். இதேபோல், Django மனிதனால் படிக்கக்கூடிய பெயர்களை உருவாக்குகிறது மற்றும் மரபுகளின் அடிப்படையில் வரிசைப்படுத்துதலைக் கையாளுகிறது. இருப்பினும், உங்களுக்கு அதிக கட்டுப்பாடு தேவைப்பட்டால் என்ன செய்வது?
db_table
உடன் தரவுத்தள அட்டவணைப் பெயர்களைத் தனிப்பயனாக்குதல்
தரவுத்தள தொடர்பை தனிப்பயனாக்குவதற்கான மிகவும் நேரடியான வழிகளில் ஒன்று, உங்கள் மாதிரிக்கு எந்த தரவுத்தள அட்டவணைக்கு உள்ளது என்பதை சரியாகக் குறிப்பிடுவதாகும். இது Meta
வகுப்பில் db_table
விருப்பத்தைப் பயன்படுத்துவதன் மூலம் அடையப்படுகிறது.
ஏன் db_table
ஐத் தனிப்பயனாக்க வேண்டும்?
- மரபு தரவுத்தள ஒருங்கிணைப்பு: குறிப்பிட்ட அட்டவணை பெயரிடும் மரபுகளைக் கொண்ட ஏற்கனவே உள்ள தரவுத்தளங்களுடன் ஒருங்கிணைக்கும்போது.
- பெயரிடும் மரபுகள்: Django இன் இயல்புநிலைகளில் இருந்து வேறுபடும் நிறுவன அல்லது திட்ட-குறிப்பிட்ட பெயரிடும் தரநிலைகளைப் பின்பற்றுதல்.
- தரவுத்தள-குறிப்பிட்ட தேவைகள்: சில தரவுத்தள அமைப்புகள் அட்டவணை பெயர்கள் தொடர்பாக கட்டுப்பாடுகள் அல்லது பரிந்துரைகளைக் கொண்டிருக்கலாம்.
- தெளிவு மற்றும் படிக்கக்கூடிய தன்மை: சில நேரங்களில், மேலும் விளக்கமான அல்லது சுருக்கமான அட்டவணைப் பெயர் தரவுத்தள நிர்வாகிகள் அல்லது தரவுத்தளத்துடன் நேரடியாக பணிபுரியும் டெவலப்பர்களுக்கான படிக்கக்கூடிய தன்மையை மேம்படுத்தலாம்.
எடுத்துக்காட்டு: அட்டவணையை மறுபெயரிடுதல்
Product
மாதிரி இயல்புநிலை shop_product
க்குப் பதிலாக inventory_items
எனப்படும் அட்டவணையில் மேப் செய்யப்பட வேண்டும் என்று வைத்துக்கொள்வோம்.
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
db_table = 'inventory_items'
def __str__(self):
return self.name
இந்த மாற்றத்தின் மூலம், Product
மாதிரி தொடர்பான செயல்பாடுகளுக்கு inventory_items
அட்டவணையை இலக்காகக் கொண்ட SQL அறிக்கைகளை Django உருவாக்கும்.
db_table
க்கான உலகளாவிய பரிசீலனைகள்
உலகளாவிய பயன்பாடுகளுக்கான அட்டவணைப் பெயர்களைத் தேர்ந்தெடுக்கும்போது, பின்வருவனவற்றைக் கவனியுங்கள்:
- எழுத்துத் தொகுப்பு வரம்புகள்: பெரும்பாலான நவீன தரவுத்தளங்கள் பரந்த அளவிலான எழுத்துகளை ஆதரித்தாலும், அதிகபட்ச பொருந்தக்கூடிய தன்மைக்காக எழுத்து மற்றும் அடிக்கோடுகள் கொண்ட ஆல்பாநியூமரிக் எழுத்துக்களைப் பயன்படுத்துவது நல்லது. தரவுத்தள அமைப்புகள் அல்லது இயக்க முறைமைகளில் வித்தியாசமாக விளக்கப்படக்கூடிய சிறப்பு எழுத்துகளைத் தவிர்க்கவும்.
- வழக்கு உணர்திறன்: தரவுத்தள அட்டவணை பெயரிடும் வழக்கு உணர்திறன் மாறுபடும். நிலையான கேசிங் மரபுகளைப் பயன்படுத்துவது (எ.கா., அடிக்கோடுகளுடன் கூடிய அனைத்து சிறிய எழுத்துக்களும்) எதிர்பாராத நடத்தையைத் தவிர்க்க பொதுவாகப் பரிந்துரைக்கப்படுகிறது.
- ஒதுக்கப்பட்ட முக்கிய வார்த்தைகள்: உங்கள் தேர்ந்தெடுக்கப்பட்ட அட்டவணைப் பெயர்கள் உங்கள் இலக்கு தரவுத்தள அமைப்புகளில் (எ.கா., PostgreSQL, MySQL, SQL Server) ஒதுக்கப்பட்ட எந்த முக்கிய வார்த்தைகளுடன் மோதவில்லை என்பதை உறுதிப்படுத்தவும்.
- அளவிடுதல்:
db_table
உடன் நேரடியாக தொடர்புடையதாக இல்லாவிட்டாலும், பெயரிடும் மரபு எதிர்கால விரிவாக்கத்திற்கு உதவும். உங்கள் பயன்பாடு உருவாகும்போது கட்டுப்பாடாக மாறக்கூடிய அதிக குறிப்பிட்ட பெயர்களைத் தவிர்க்கவும்.
verbose_name
மற்றும் verbose_name_plural
உடன் படிக்கக்கூடிய தன்மையை மேம்படுத்துதல்
db_table
உண்மையான தரவுத்தள அட்டவணைப் பெயரை கட்டுப்படுத்துகிறது, அதே நேரத்தில் verbose_name
மற்றும் verbose_name_plural
ஆகியவை Django நிர்வாக இடைமுகம், படிவங்கள் மற்றும் பிழை செய்திகளில் உங்கள் மாதிரிகளை மேலும் மனிதனால் படிக்கக்கூடியதாக மாற்றுவதற்கு முக்கியமானது. இவை சர்வதேசமயமாக்கல் மற்றும் உள்ளூர்மயமாக்கல் முயற்சிகளுக்கு இன்றியமையாதவை.
verbose_name
verbose_name
விருப்பம் உங்கள் மாதிரியின் ஒரு தனிப்பட்ட பொருளுக்கான ஒருமை, மனிதனால் படிக்கக்கூடிய பெயரை வழங்குகிறது. உதாரணமாக, நிர்வாகத்தில் 'Product' என்பதைப் பார்ப்பதற்குப் பதிலாக, 'Inventory Item' என்பதைப் பார்க்கலாம்.
verbose_name_plural
verbose_name_plural
விருப்பம் உங்கள் மாதிரியின் பல பொருட்களுக்கான மனிதனால் படிக்கக்கூடிய பெயரை குறிப்பிடுகிறது. இது பல்வேறு மொழிகளில் துல்லியமான பன்மைக்கு குறிப்பாக முக்கியமானது.
எடுத்துக்காட்டு: படிக்கக்கூடிய தன்மையை மேம்படுத்துதல்
மேலும் விளக்கமான விரிவான பெயர்களுடன் Product
மாதிரியை மேம்படுத்துவோம்.
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
db_table = 'inventory_items'
verbose_name = 'Inventory Item'
verbose_name_plural = 'Inventory Items'
def __str__(self):
return self.name
Django நிர்வாகத்தில், இந்த மாதிரி இப்போது 'Inventory Item' (ஒருமை) மற்றும் 'Inventory Items' (பன்மை) என வழங்கப்படும், இது மிகவும் தெளிவான பயனர் அனுபவத்தை வழங்குகிறது.
விரிவான பெயர்களுக்கான உலகளாவிய பரிசீலனைகள்
ஒரு உலகளாவிய பார்வையாளர்களுக்காக, verbose_name
மற்றும் verbose_name_plural
ஆகியவற்றின் கவனமான பயன்பாடு முக்கியமானது:
- உள்ளூர்மயமாக்கல் (i18n): Django இன் சர்வதேசமயமாக்கல் கட்டமைப்பு சரங்களின் மொழிபெயர்ப்புகளைக் கையாள வடிவமைக்கப்பட்டுள்ளது.
verbose_name
மற்றும்verbose_name_plural
ஆகியவற்றிற்கு, பல்வேறு மொழிகளில் மொழிபெயர்ப்புகளை அனுமதிப்பதற்காக Django இன் மொழிபெயர்ப்பு பயன்பாடுகளைப் பயன்படுத்துவது (gettext
,gettext_lazy
) சிறந்த நடைமுறையாகும். - துல்லியமான பன்மை: வெவ்வேறு மொழிகள் பன்மைப்படுத்துவதற்கு முற்றிலும் மாறுபட்ட விதிகளைக் கொண்டுள்ளன. Django இன் நிர்வாக இடைமுகம் மற்றும் படிவங்கள்
verbose_name_plural
ஐப் பயன்படுத்த முயற்சிக்கும், சிக்கலான பன்மைப்படுத்தலுக்கு மட்டுமே அதை நம்புவது போதாது. மிகவும் அதிநவீன தேவைகளுக்கு, குறிப்பாக டைனமிக் உள்ளடக்கம் உருவாக்கத்தில், மொழியியல் பன்மைப்படுத்துதலை சரியாக கையாளும் நூலகங்களைப் பயன்படுத்துவதைக் கவனியுங்கள். - கலாச்சார நுணுக்கங்கள்: தேர்ந்தெடுக்கப்பட்ட விரிவான பெயர்கள் கலாச்சார ரீதியாக பொருத்தமானதாகவும், வெவ்வேறு பிராந்தியங்களில் விரும்பத்தகாத அர்த்தங்களைக் கொண்டிருக்கவில்லை என்றும் உறுதிப்படுத்தவும். எடுத்துக்காட்டாக, ஒரு கலாச்சாரத்தில் பொதுவான ஒரு சொல் மற்றொரு மொழியில் ஆக்கிரமிப்பு அல்லது தவறாக வழிநடத்தும்.
- நிலையான தன்மை: உங்கள் பயன்பாட்டில் விரிவான பெயர்களுக்கான நிலையான நடையை பராமரிக்கவும். இதில் கேசிங், கட்டுரைகளைப் பயன்படுத்துதல் (a/an), மற்றும் பொதுவான தொனி ஆகியவை அடங்கும்.
மொழிபெயர்ப்புடன் கூடிய எடுத்துக்காட்டு:
from django.db import models
from django.utils.translation import gettext_lazy as _
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
db_table = 'inventory_items'
verbose_name = _('Inventory Item')
verbose_name_plural = _('Inventory Items')
def __str__(self):
return self.name
_('Inventory Item')
ஐப் பயன்படுத்துவதன் மூலம் (இது gettext_lazy
க்கான ஒரு புனைப்பெயர்), நீங்கள் மொழிபெயர்ப்புக்கு இந்த சரங்களைக் குறிக்கிறீர்கள். மொழிபெயர்ப்பாளர்கள் ஒவ்வொரு மொழிக்கும் பொருத்தமான சொற்களை வழங்கக்கூடிய மொழிபெயர்ப்பு கோப்புகளை (.po
கோப்புகள்) Django உருவாக்க முடியும்.
ordering
உடன் தரவு வரிசையை கட்டுப்படுத்துதல்
Meta
வகுப்பில் உள்ள ordering
விருப்பம், இந்த மாதிரிக்கான வினவல் தொகுப்புகள் எந்த வரிசையில் திரும்ப வேண்டும் என்பதை குறிப்பிடுகிறது. இது செயல்திறன் மேம்பாடு மற்றும் வசதிக்கான அம்சமாகும்.
ஏன் ordering
ஐப் பயன்படுத்த வேண்டும்?
- நிலையான தரவு மீட்டெடுப்பு: தரவு எப்போதும் கணிக்கக்கூடிய வரிசையில் பெறப்படுவதை உறுதி செய்கிறது.
- செயல்திறன்: அடிக்கடி அணுகப்படும் தரவுக்கு, ஒவ்வொரு வினவலுக்கும் அதைப் பயன்படுத்துவதை விட, இயல்புநிலை வரிசையை அமைப்பது சில நேரங்களில் மிகவும் திறமையானதாக இருக்கும், குறிப்பாக குறியீடுகள் சம்பந்தப்பட்டிருந்தால்.
- பயனர் அனுபவம்: Django நிர்வாகம் போன்ற UI களில், தரவு பெரும்பாலும் பட்டியல்களில் காட்டப்படும். ஒரு நியாயமான இயல்புநிலை வரிசை பயனர் பயன்பாட்டை மேம்படுத்துகிறது.
எடுத்துக்காட்டு: இயல்புநிலை வரிசைப்படுத்துதல்
பெயரின் மூலம் தயாரிப்புகளை அகரவரிசைப்படி வரிசைப்படுத்த இயல்புநிலையாக:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
db_table = 'inventory_items'
verbose_name = 'Inventory Item'
verbose_name_plural = 'Inventory Items'
ordering = ['name'] # Ascending order by name
def __str__(self):
return self.name
நீங்கள் ஒரு ஹைபனைப் பயன்படுத்தி தலைகீழ் வரிசையை குறிப்பிடலாம்:
class Product(models.Model):
# ... fields ...
class Meta:
# ... other options ...
ordering = ['-price'] # Descending order by price
பல புலங்கள் வரிசைப்படுத்துவதற்குப் பயன்படுத்தப்படலாம், படிநிலை வரிசையை உருவாக்குகிறது:
class Product(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
class Meta:
# ... other options ...
ordering = ['category__name', 'name'] # Order by category name, then by product name
ordering
க்கான உலகளாவிய பரிசீலனைகள்
- செயல்திறன் தாக்கம்: வசதியாக இருந்தாலும், சிக்கலான வரிசைப்படுத்துதலின் செயல்திறன் தாக்கங்களை எப்போதும் கவனியுங்கள், குறிப்பாக பெரிய தரவுத்தொகுப்புகளில்.
ordering
இல் பயன்படுத்தப்படும் புலங்கள் குறியிடப்பட்டுள்ளதை உறுதிப்படுத்தவும். Django இன்indexes
மற்றும்ordering
போன்றMeta
விருப்பத்தேர்வுகள் தரவுத்தள குறியீடுகள் சரியாக வரையறுக்கப்பட்டால் சிறப்பாக செயல்படும். - சர்வதேச வரிசைப்படுத்தும் விதிகள்: தரவுத்தளங்களில் இயல்புநிலை அகரவரிசை வரிசைப்படுத்துதல் அனைத்து மொழிகளிலும் மொழியியல் வரிசைப்படுத்தும் விதிகளுடன் ஒத்துப்போகாது. எடுத்துக்காட்டாக, உச்சரிப்பு எழுத்துக்கள் அல்லது குறிப்பிட்ட எழுத்துத் தொகுப்புகள் வித்தியாசமாக வரிசைப்படுத்தப்படலாம். துல்லியமான மொழியியல் வரிசைப்படுத்துதல் உலகளாவிய பார்வையாளர்களுக்கு முக்கியமானதாக இருந்தால், நீங்கள்:
- தரவுத்தள-குறிப்பிட்ட சேர்க்கை அமைப்புகளைப் பயன்படுத்த வேண்டும்.
- உங்கள் பைத்தான் குறியீட்டில் தனிப்பயன் வரிசைப்படுத்தும் தர்க்கத்தை செயல்படுத்தவும், மேம்பட்ட மொழியியல் வரிசைப்படுத்துதலை ஆதரிக்கும் நூலகங்களைப் பயன்படுத்தவும்.
- குறிப்பிட்ட லோக்கல்களை மதிக்கும் வரிசைப்படுத்துதலுக்கான தரவுத்தள-நிலை செயல்பாடுகளைப் பயன்படுத்தவும்.
- தரவு நிலைத்தன்மை: நிதித் தரவு அல்லது நேர முத்திரைகளைக் கையாளும் பயன்பாடுகளுக்கு, வரிசைப்படுத்துதல் அர்த்தமுள்ளதாக இருப்பதை உறுதிப்படுத்தவும். உருவாக்கம் அல்லது மாற்றியமைத்தல் நேர முத்திரைகளின்படி வரிசைப்படுத்துதல் நிகழ்வுகளை காலவரிசைப்படி கண்காணிப்பதற்கு பொதுவானது.
unique_together
மற்றும் constraints
உடன் தரவு ஒருமைப்பாட்டை உறுதி செய்தல்
நம்பகமான பயன்பாடுகளுக்கு தரவு ஒருமைப்பாடு ஒரு மூலக்கல்லாகும். இரட்டை அல்லது தவறான தரவு உள்ளீடுகளைத் தடுப்பதன் மூலம், தரவுத்தள மட்டத்தில் தனித்துவத்தையும் பிற கட்டுப்பாடுகளையும் அமல்படுத்துவதற்கான வழிமுறைகளை Django வழங்குகிறது.
unique_together
(மரபு, அதற்குப் பதிலாக constraints
ஐப் பயன்படுத்தவும்)
வரலாற்று ரீதியாக, unique_together
என்பது அட்டவணையில் உள்ள அனைத்து பதிவுகளிலும் புலங்களின் சேர்க்கை தனித்துவமாக இருக்க வேண்டும் என்பதைக் குறிப்பிடப் பயன்படுத்தப்பட்டது. இருப்பினும், இந்த விருப்பம் மிகவும் நெகிழ்வான constraints
விருப்பத்திற்கு ஆதரவாக பயன்படுத்தப்படாமல் போயிற்று.
# Deprecated: Use constraints instead
class Product(models.Model):
# ... fields ...
class Meta:
# ... other options ...
unique_together = ('name', 'sku') # Combination must be unique
constraints
(தனித்துவம் மற்றும் பலவற்றிற்குப் பரிந்துரைக்கப்படுகிறது)
தரவுத்தள கட்டுப்பாடுகளை வரையறுப்பதற்கான நவீன மற்றும் சக்திவாய்ந்த வழி constraints
விருப்பம் ஆகும். இது தனித்துவமான கட்டுப்பாடுகள், சோதனை கட்டுப்பாடுகள் மற்றும் விலக்கு கட்டுப்பாடுகள் உள்ளிட்ட பல்வேறு வகையான கட்டுப்பாடுகளை அனுமதிக்கிறது.
தனித்துவமான கட்டுப்பாடுகளை வரையறுத்தல்
புலங்களின் சேர்க்கை தனித்துவமானது என்பதை அமல்படுத்த, நீங்கள் UniqueConstraint
பயன்படுத்தலாம்:
from django.db import models
class OrderItem(models.Model):
order = models.ForeignKey('Order', on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
class Meta:
constraints = [
models.UniqueConstraint(fields=['order', 'product'], name='unique_order_item')
]
இந்த எடுத்துக்காட்டில், ஒரு குறிப்பிட்ட தயாரிப்பு ஒரு ஆர்டருக்கு ஒரு முறை மட்டுமே தோன்றும். பிற புலங்களை மாற்றாமல் அதே தயாரிப்பை ஒரே ஆர்டரில் பல முறை சேர்க்க முயற்சித்தால், Django ஒரு ValidationError
(சரிபார்ப்பு இயங்கினால்) எழுப்பும் அல்லது தரவுத்தளம் செருகுதலை நிராகரிக்கும்.
பிற கட்டுப்பாட்டு வகைகள்
தனித்துவத்தைத் தவிர, constraints
இதற்கும் பயன்படுத்தப்படலாம்:
- சோதனை கட்டுப்பாடுகள்: மதிப்புகள் குறிப்பிட்ட அளவுகோல்களை பூர்த்தி செய்வதை உறுதி செய்ய (எ.கா.,
quantity > 0
). - விலக்கு கட்டுப்பாடுகள்: ஒன்றுடன் ஒன்று சேரும் வரம்புகள் அல்லது மதிப்புகளைத் தடுக்க (எ.கா., திட்டமிடல் பயன்பாடுகளில்).
- செயல்பாட்டு தனித்துவமான கட்டுப்பாடுகள்: வெளிப்பாடுகள் அல்லது செயல்பாடு அழைப்புகளின் அடிப்படையில் தனித்துவத்தை அமல்படுத்துதல் (எ.கா., வழக்கு-உணர்திறன் இல்லாத தனித்துவம்).
கட்டுப்பாடுகளுக்கான உலகளாவிய பரிசீலனைகள்
- தரவுத்தள ஆதரவு: நீங்கள் வரையறுக்கும் கட்டுப்பாட்டின் வகையை உங்கள் தேர்ந்தெடுக்கப்பட்ட தரவுத்தள பின்முனையம் ஆதரிக்கிறதா என்பதை உறுதிப்படுத்தவும். பெரும்பாலான நவீன உறவுமுறை தரவுத்தளங்கள் தனித்துவமான மற்றும் சோதனை கட்டுப்பாடுகளை ஆதரிக்கின்றன. விலக்கு கட்டுப்பாடுகள் குறைந்த ஆதரவைக் கொண்டிருக்கலாம்.
- பிழை கையாளுதல்: ஒரு கட்டுப்பாடு மீறப்பட்டால், தரவுத்தளம் பொதுவாக ஒரு பிழையை எழுப்பும். Django இன் ORM இந்த பிழைகளை பிடித்து, அவற்றை விதிவிலக்குகளாக மொழிபெயர்க்கும். பயனர் நட்பு பின்னூட்டத்தை வழங்க, உங்கள் பயன்பாட்டின் காட்சிகள் அல்லது வணிக தர்க்கத்தில் பொருத்தமான பிழை கையாளுதலை செயல்படுத்துவது மிகவும் முக்கியம்.
- சர்வதேச தரவு வடிவங்கள்: சர்வதேச தரவை (எ.கா., தொலைபேசி எண்கள், அஞ்சல் குறியீடுகள்) கையாளும் புலங்களில் கட்டுப்பாடுகளை வரையறுக்கும்போது, வடிவங்களில் உள்ளார்ந்த மாறுபாட்டைக் கவனத்தில் கொள்ளுங்கள். உலகளவில் செயல்படும் கடுமையான கட்டுப்பாடுகளை அமல்படுத்துவது சவாலாக இருக்கலாம். பெரும்பாலும், பயன்பாட்டு மட்டத்தில் மிகவும் தளர்வான சரிபார்ப்பு அணுகுமுறை, முக்கியமான புலங்களுக்கான தரவுத்தள-நிலை காசோலைகளுடன் இணைந்தால், அவசியம்.
- செயல்திறன்: கட்டுப்பாடுகள் தரவு ஒருமைப்பாட்டை மேம்படுத்தும் அதே வேளையில், அவை செயல்திறன் தாக்கத்தை ஏற்படுத்தும். கட்டுப்பாடுகளில் ஈடுபட்டுள்ள புலங்கள் நன்கு குறியிடப்பட்டுள்ளதை உறுதிப்படுத்தவும்.
index_together
மற்றும் indexes
உடன் வினவல்களை மேம்படுத்துதல்
தரவுத்தள குறியீட்டு முறை எந்தவொரு பயன்பாட்டின் செயல்திறனுக்கும், குறிப்பாக தரவு அளவுகள் அதிகரிக்கும்போது முக்கியமானது. Django இன் Meta
விருப்பத்தேர்வுகள் இந்த குறியீடுகளை வரையறுப்பதற்கான வழிகளை வழங்குகின்றன.
index_together
(மரபு, அதற்குப் பதிலாக indexes
ஐப் பயன்படுத்தவும்)
unique_together
ஐப் போலவே, index_together
பல-க நெடுவரிசை குறியீடுகளைக் குறிப்பிடப் பயன்படுத்தப்பட்டது. இது இப்போது indexes
விருப்பத்திற்கு ஆதரவாக பயன்பாட்டில் இல்லை.
# Deprecated: Use indexes instead
class Product(models.Model):
# ... fields ...
class Meta:
# ... other options ...
index_together = [('name', 'price')] # Creates a multi-column index
indexes
(குறியீட்டு வரையறைக்குப் பரிந்துரைக்கப்படுகிறது)
indexes
விருப்பம் உங்கள் மாதிரியின் புலங்களில் பல்வேறு வகையான தரவுத்தள குறியீடுகளை வரையறுக்க உங்களை அனுமதிக்கிறது.
பல-நெடுவரிசை குறியீடுகளை வரையறுத்தல்
பல புலங்களில் ஒரு குறியீட்டை உருவாக்க, Index
ஐப் பயன்படுத்தவும்:
from django.db import models
class Customer(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField()
class Meta:
indexes = [
models.Index(fields=['last_name', 'first_name']),
]
இது last_name
மற்றும் first_name
இல் ஒரு கூட்டு குறியீட்டை உருவாக்குகிறது, இது இரண்டு புலங்களையும் வடிகட்டும் அல்லது வரிசைப்படுத்தும் வினவல்களை விரைவுபடுத்தும்.
பிற குறியீட்டு வகைகள்
Django இன் indexes
விருப்பம் உட்பட பல்வேறு வகையான குறியீடுகளை ஆதரிக்கிறது:
- B-tree குறியீடுகள் (இயல்புநிலை): மிகவும் பொதுவான வினவல்களுக்கு ஏற்றது.
- ஹாஷ் குறியீடுகள்: சமத்துவ ஒப்பீடுகளுக்கு மிகவும் திறமையானது.
- ஜின் மற்றும் ஜிஸ்ட் குறியீடுகள்: முழு உரை தேடல் அல்லது புவிசார் தரவு போன்ற மேம்பட்ட தரவு வகைகளுக்கு.
- வெளிப்பாட்டு குறியீடுகள்: தரவுத்தள செயல்பாடுகள் அல்லது வெளிப்பாடுகளின் அடிப்படையில் குறியீடுகள்.
indexes
க்கான உலகளாவிய பரிசீலனைகள்
- தரவுத்தள-குறிப்பிட்ட குறியீட்டு முறை: வெவ்வேறு குறியீட்டு வகைகளின் தொடரியல் மற்றும் கிடைக்கும் தன்மை தரவுத்தள அமைப்புகளுக்கு இடையில் மாறுபடும் (எ.கா., PostgreSQL, MySQL, SQLite). Django இவற்றில் பெரும்பாலானவற்றைத் தொகுக்கிறது, ஆனால் மேம்பட்ட குறியீட்டு முறைக்கு குறிப்பிட்ட தரவுத்தள அறிவு தேவைப்படலாம்.
- குறியீட்டு உத்தி: அதிகமாக குறியிடாதீர்கள். ஒவ்வொரு குறியீடும் எழுதும் செயல்பாடுகளுக்கு (செருகுதல், புதுப்பிப்புகள், நீக்குதல்) ஓவர்ஹெட்டைச் சேர்க்கிறது. உங்கள் பயன்பாட்டின் அடிக்கடி கேட்கப்படும் வினவல் முறைகளை பகுப்பாய்வு செய்து அதற்கேற்ப குறியீடுகளை உருவாக்கவும். மெதுவான வினவல்களை அடையாளம் காண தரவுத்தள சுயவிவர கருவிகளைப் பயன்படுத்தவும்.
- சர்வதேசமயமாக்கல் மற்றும் குறியீட்டு முறை: சர்வதேச உரை தரவை சேமிக்கும் புலங்களுக்கு, வெவ்வேறு எழுத்துத் தொகுப்புகள் மற்றும் கூட்டுத்தொகுப்புகள் குறியீட்டு முறை மற்றும் தேடலை எவ்வாறு பாதிக்கின்றன என்பதை கவனியுங்கள். எடுத்துக்காட்டாக, வெவ்வேறு லோக்கல்களில் பெயர்களைத் தேடுவதற்கு வழக்கு-உணர்திறன் இல்லாத குறியீடு முக்கியமாக இருக்கலாம்.
- முழு-உரை தேடல்: பல மொழிகளில் அதிநவீன உரை தேடல் திறன்களைக் கோரும் பயன்பாடுகளுக்கு, தரவுத்தள-குறிப்பிட்ட முழு-உரை தேடல் அம்சங்களை ஆராயுங்கள் மற்றும் அவற்றை Django உடன் ஒருங்கிணைப்பது எப்படி, பெரும்பாலும் சிறப்பு குறியீட்டு வகைகளைப் பயன்படுத்துதல்.
உலகளாவிய வளர்ச்சிக்கான மேம்பட்ட Meta
விருப்பங்கள்
அடிப்படை விருப்பங்களைத் தவிர, பலவற்றை வலுவான உலகளாவிய பயன்பாடுகளை உருவாக்குவதற்கு மதிப்புமிக்கவை:
default_related_name
இந்த விருப்பம் மற்றொரு பொருளில் இருந்து ஒரு பொருளைப் பார்க்கும்போது தலைகீழ் உறவுக்குப் பயன்படுத்தப்படும் பெயரை குறிப்பிடுகிறது. பெரிய பயன்பாட்டின் வெவ்வேறு பகுதிகளில் அல்லது பல டெவலப்பர்களால் மாதிரிகள் மீண்டும் பயன்படுத்தப்படும்போது, பெயரிடும் மோதல்களைத் தவிர்ப்பது முக்கியம்.
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, default_related_name='profile')
# ... other fields ...
இங்கே, user.userprofile_set
மூலம் சுயவிவரத்தை அணுகுவதற்குப் பதிலாக, நீங்கள் மேலும் உள்ளுணர்வுடன் கூடிய user.profile
ஐப் பயன்படுத்தலாம்.
get_latest_by
இந்த விருப்பம் latest()
நிர்வாக முறை சமீபத்திய பொருளைத் தீர்மானிக்கப் பயன்படுத்த வேண்டிய ஒரு புலத்தை குறிப்பிடுகிறது. பொதுவாக, இது ஒரு தேதி அல்லது நேர முத்திரை புலம் ஆகும்.
class Article(models.Model):
title = models.CharField(max_length=200)
published_date = models.DateTimeField(auto_now_add=True)
class Meta:
get_latest_by = 'published_date'
நீங்கள் பின்னர் Article.objects.latest()
ஐ அழைக்கலாம்.
managed
இந்த பூலியன் விருப்பம் Django இந்த மாதிரிக்கு தரவுத்தள அட்டவணையை உருவாக்க வேண்டுமா மற்றும் நிர்வகிக்க வேண்டுமா என்பதைக் கட்டுப்படுத்துகிறது. இதை False
ஆக அமைப்பது மற்றொரு பயன்பாடு அல்லது அமைப்பால் நிர்வகிக்கப்படும் ஏற்கனவே உள்ள அட்டவணைக்கு நீங்கள் மேப் செய்யும்போது பயனுள்ளதாக இருக்கும்.
class LegacyData(models.Model):
# ... fields ...
class Meta:
managed = False
db_table = 'existing_legacy_table'
மேம்பட்ட விருப்பங்களுக்கான உலகளாவிய பரிசீலனைகள்
default_related_name
மற்றும் பெயரிடும் மோதல்கள்: ஒரு உலகளாவிய குழுவில், நிலையான மற்றும் விளக்கமான பெயரிடும் மரபுகள் முக்கியம்.default_related_name
ஐப் பயன்படுத்துவது, குறிப்பாக சிக்கலான பொருள் வரைபடங்களில், தெளிவின்மையை தடுக்க உதவுகிறது.get_latest_by
மற்றும் நேர மண்டலங்கள்: உலகளவில் கால உணர்திறன் கொண்ட தரவைக் கையாளும் போது, get_latest_by
இல் குறிப்பிடப்பட்டுள்ள புலம் நேர மண்டலத்தை அறிந்ததா என்பதை உறுதிப்படுத்தவும் (Django இன்DateTimeField
உடன்USE_TZ = True
ஐப் பயன்படுத்துதல்). இல்லையெனில், 'சமீபத்தியது' வெவ்வேறு நேர மண்டலங்களில் தவறாகப் புரிந்து கொள்ளப்படலாம்.managed = False
மற்றும் தரவுத்தள ஸ்கீமா:managed = False
என்றால், உங்கள் பயன்பாடு தரவுத்தள ஸ்கீமாவை மாற்றாது. இது நிலைத்தன்மையை உறுதிப்படுத்த தரவுத்தள நிர்வாகிகள் அல்லது ஸ்கீமாவைக் கையாளும் பிற அமைப்புகளுடன் கவனமாக ஒருங்கிணைக்க வேண்டும்.
உலகளாவிய திட்டங்களில் Meta
விருப்பத்தேர்வுகளைப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள்
ஒரு உலகளாவிய சூழலில் Meta
விருப்பங்களை திறம்பட பயன்படுத்த:
-
படிக்கக்கூடிய தன்மை மற்றும் சர்வதேசமயமாக்கலுக்கு முன்னுரிமை கொடுங்கள்: எப்போதும்
verbose_name
மற்றும்verbose_name_plural
ஐப் பயன்படுத்தவும், மேலும் இவற்றிற்கு Django இன் மொழிபெயர்ப்பு அமைப்பைப் பயன்படுத்தவும். பல்வேறு பயனர் தளத்தை இலக்காகக் கொண்ட பயன்பாடுகளுக்கு இது பேச்சுவார்த்தைக்கு உரியதல்ல. -
தேவைப்பட்டால்
db_table
உடன் வெளிப்படையாக இருங்கள்:db_table
ஐ விவேகத்துடன் பயன்படுத்தவும். இது கட்டுப்பாட்டை வழங்கினாலும், Django இன் இயல்புநிலைகளை நம்புவது இடம்பெயர்தலை எளிதாக்கும் மற்றும் சாத்தியமான மோதல்களைக் குறைக்கும், உங்கள் பெயரிடும் மரபுகள் நிலையானதாகவும் வலுவானதாகவும் இருந்தால். ஏற்கனவே உள்ள அமைப்புகளுடன் ஒருங்கிணைக்கும்போது அல்லது கடுமையான பெயரிடலை அமல்படுத்தும்போது, அதை தெளிவான ஆவணங்களுடன் பயன்படுத்தவும். -
உங்கள் தரவையும் வினவல் முறைகளையும் புரிந்து கொள்ளுங்கள்:
ordering
மற்றும்indexes
ஐ வரையறுப்பதற்கு முன், உங்கள் தரவை எவ்வாறு அணுகலாம் என்பதை பகுப்பாய்வு செய்யவும். செயல்திறன் தடைகளை அடையாளம் காண உங்கள் பயன்பாட்டை சுயவிவரம் செய்யுங்கள். முன்கூட்டியே மேம்படுத்துவதைத் தவிர்க்கவும். -
மரபு விருப்பத்தேர்வுகளுக்குப் பதிலாக
constraints
ஐ ஏற்றுக்கொள்ளுங்கள்: எப்போதும்unique_together
மற்றும்index_together
போன்ற பயன்படுத்தப்படாமல் போன விருப்பங்களுக்குப் பதிலாகconstraints
பண்புக்கூறைத் தேர்வு செய்யவும். இது அதிக நெகிழ்வுத்தன்மையையும் எதிர்கால ஆதாரத்தையும் வழங்குகிறது. -
உங்கள் தெரிவுகளை ஆவணப்படுத்துங்கள்: குறிப்பிட்ட
Meta
விருப்பத்தேர்வுகள் ஏன் பயன்படுத்தப்படுகின்றன என்பதைத் தெளிவாக ஆவணப்படுத்தவும், குறிப்பாகdb_table
, சிக்கலான கட்டுப்பாடுகள் அல்லது தரமற்ற குறியீட்டு முறைக்கு. இது குழு ஒத்துழைப்பு மற்றும் புதிய டெவலப்பர்களைப் பயன்படுத்துவதற்கு முக்கியமானது. - தரவுத்தளங்களில் சோதிக்கவும்: உங்கள் பயன்பாடு பல தரவுத்தள பின்முனைகளில் (எ.கா., PostgreSQL, MySQL) இயங்குவதற்காக வடிவமைக்கப்பட்டால், ஒவ்வொரு இலக்கு தரவுத்தளத்திலும் உங்கள் மாதிரி வரையறைகள் மற்றும் கட்டுப்பாடுகளை இணக்கத்தன்மையை உறுதிப்படுத்தவும்.
-
தெளிவுக்காக
related_name
மற்றும்default_related_name
ஐக் கவனியுங்கள்: குறிப்பாக பெரிய, விநியோகிக்கப்பட்ட பயன்பாடுகளில், வெளிப்படையானrelated_name
அல்லதுdefault_related_name
மதிப்புகள் குழப்பத்தைத் தடுக்கின்றன மற்றும் உறவுகளைப் புரிந்துகொள்வதை எளிதாக்குகின்றன. -
நேர மண்டல விழிப்புணர்வு முக்கியமானது: தேதிகள் மற்றும் நேரங்களைக் கையாளும் எந்தவொரு மாடல்களுக்கும், அவை நேர மண்டலத்தை அறிந்திருப்பதை உறுதிப்படுத்தவும். இது Django அமைப்புகளின் மட்டத்தில் நிர்வகிக்கப்படுகிறது (
USE_TZ = True
) மேலும்get_latest_by
இல் பயன்படுத்தப்பட்ட புலங்கள் உலகளவில் எவ்வாறு நடந்துகொள்கின்றன என்பதை பாதிக்கிறது.
முடிவுரை
Django இன் Meta
விருப்பத்தேர்வுகள் உங்கள் மாதிரிகளை குறிப்பிட்ட பயன்பாட்டு தேவைகளுக்கு ஏற்றவாறு வடிவமைப்பதற்கான ஒரு சக்திவாய்ந்த கருவித்தொகுப்பாகும். db_table
, verbose_name
, ordering
, constraints
மற்றும் indexes
போன்ற விருப்பங்களைப் புரிந்துகொள்வதன் மூலமும், விவேகத்துடன் பயன்படுத்துவதன் மூலமும், நீங்கள் மிகவும் வலுவான, செயல்படக்கூடிய மற்றும் பராமரிக்கக்கூடிய பயன்பாடுகளை உருவாக்கலாம்.
உலகளாவிய வளர்ச்சிக்கு, இந்த விருப்பங்கள் கூடுதல் முக்கியத்துவத்தை பெறுகின்றன. அவை பல்வேறு தரவுத்தளங்களுடன் தடையற்ற ஒருங்கிணைப்பை இயக்குகின்றன, வெவ்வேறு மொழிகள் மற்றும் கலாச்சாரங்களில் பயனர் நட்பு இடைமுகங்களை வழங்குகின்றன, தரவு ஒருமைப்பாட்டை உறுதி செய்கின்றன மற்றும் உலகளவில் செயல்திறனை மேம்படுத்துகின்றன. இந்த Meta
உள்ளமைவுகளை மாஸ்டரிங் செய்வது, உண்மையிலேயே சர்வதேசமயமாக்கப்பட்ட மற்றும் தொழில்முறை வலை பயன்பாடுகளை உருவாக்க முயலும் எந்தவொரு Django டெவலப்பருக்கும் ஒரு இன்றியமையாத படியாகும்.