קוראים כמוך עוזרים לתמוך ב-MUO. כאשר אתה מבצע רכישה באמצעות קישורים באתר שלנו, אנו עשויים להרוויח עמלת שותף.

קשר מסד נתונים מתאר את החיבור בין טבלאות מסד נתונים שונות. היחסים קובעים כיצד לאחסן ולאחזר נתונים. Django עובד היטב עם מערכות מסדי נתונים יחסיים (RDBMS). לכן, הוא תומך בקשרי טבלת מסד נתונים.

סוגי מערכות היחסים תלויים בדרישות האפליקציה שלך ובנתונים שהיא מדגמנת. יחסים טובים בין דגמי Django למסד הנתונים משפרים את תחזוקת הנתונים. זה כולל שיפור ביצועי שאילתות והפחתת כפילות הנתונים.

תוכל ללמוד כיצד קשרי מסד נתונים של Django משפיעים על ביצועי האפליקציות על ידי בחינת שלושת הסוגים העיקריים של מערכות יחסים.

קשרי מסד נתונים

מערכות מסדי נתונים יחסיים תומכות בשלושה סוגים של קשרי מסד נתונים. היחסים הללו הם אחד לרבים, רבים לרבים ואחד לאחד. סוג הקשר של מסד הנתונים משפיע על מקרי השימוש של היישום שלך.

דגמי ג'נגו מייצגים טבלאות מסד נתונים באפליקציה. עליך ליצור קשרים טובים בין טבלאות כדי ליצור מערכת מסד נתונים טובה. יחסי מסד נתונים קובעים כיצד לאחסן ולהציג נתונים באפליקציה שלך.

כדי להבין את יחסי מסד הנתונים, התחל ב

instagram viewer
יצירת פרויקט ג'נגו בשם ברדסים. האפליקציה תהיה רשת חברתית שכונתית. היא תנהל את הפעילויות החברתיות, האבטחה והעסקים של שכונות שונות.

תושבים יכולים להירשם, להיכנס וליצור פרופילים. הם יכולים גם ליצור פוסטים ופרסומות עסקיות שכולם יוכלו לראות.

כדי להתחיל, צור מסד נתונים שיאחסן את כל נתוני השכונה. לאחר מכן, תיצור את המודלים Profile, NeighborHood, Business ו-Post. כדי ליצור את המודלים, עליך לקבוע את הקשר לטבלאות מסד הנתונים.

יחסי מאגר מידע אחד לאחד

מערכת יחסים של אחד לאחד מרמזת שרשומה במודל Django אחד מתייחסת לרשומה אחרת במודל אחר. שני התקליטים תלויים זה בזה. במקרה זה, ה דגם פרופיל תלוי ב מודל משתמש ליצירת פרופילי תושב.

אז יכול להיות רק פרופיל אחד עבור כל תושב הרשום באפליקציה. כמו כן, ללא משתמש, פרופיל לא יכול להתקיים.

מ django.db יְבוּא דגמים
מג'נגו.contrib.auth.מודליםיְבוּאמִשׁתַמֵשׁ

מעמדפּרוֹפִיל(דגמים. דֶגֶם):
משתמש = דגמים. OneToOneField (משתמש, on_delete=models. CASCADE, related_name='פּרוֹפִיל')
שם = דגמים. CharField (max_length=80, ריק=נָכוֹן)
ביו = מודלים. TextField (max_length=254, ריק=נָכוֹן)
profile_picture = CloudinaryField('תמונת פרופיל', ברירת מחדל='default.png')
מיקום = דגמים. CharField (max_length=50, ריק=נָכוֹן, ריק=נָכוֹן)
מייל = דגמים. EmailField(ריק=נָכוֹן)

def__str__(עצמי):
לַחֲזוֹר f'{עצמיפרופיל ‎.user.username}'

מודל המשתמש של ג'נגו הוא מודל אימות מובנה ב-Django. אתה לא צריך ליצור עבורו מודל. במקום זאת, ייבא אותו מ django.contrib.auth. ה OneToOneField() על דגם פרופיל מגדיר מערכת יחסים של אחד לאחד.

ה on_delete=מודלים. אֶשֶׁד ארגומנט מונע מחיקה של אחת מהרשומות הללו. עליך למחוק את הרשומות משתי הטבלאות.

אתה יכול להשתמש בממשק הניהול של Django כדי לדמיין את הקשר באפליקציה שלך. כדי להיכנס ל-Django admin, עליך להירשם כמשתמש admin המכונה a משתמש-על.

צור משתמש-על על ידי הפעלת הפקודה הבאה בטרמינל:

פִּיתוֹןלנהל.pyיוצר משתמש-על

תופיע הנחיה להזין את שם המשתמש, האימייל והסיסמה שלך. לאחר שעשית זאת, הפעל את השרת.

פתח את דף הניהול בדפדפן באמצעות כתובת האתר http://127.0.0.1:8000/admin.

תראה את דף הניהול שבו תוכל להיכנס עם האישורים שיצרת קודם לכן. לאחר הכניסה, תראה את ה קבוצות ו משתמשים חפצים. מסגרת האימות של Django מנהלת את שני המודלים הללו. בתחתית, תראה את דגם פרופיל.

פתח את ה פּרוֹפִיל דגם והמשך להוספת פרופיל. אתה תראה שזה מופיע בצורה הבאה:

שימו לב שיש לכם אפשרות ליצור פרופיל עבור משתמש. סוג הנתונים OneToOneField() מאפשר לך ליצור פרופילים עבור משתמשים מאומתים. כך האפליקציה מנהלת מערכות יחסים אחד לאחד.

מערכות יחסים של אחד לרבים

מערכת יחסים של אחד לרבים מרמזת שרשומה אחת במודל מתקשרת לרשומות רבות במודל אחר. זה מכונה גם מערכת יחסים של רבים לאחד.

במקרה שלך, מנהל אחד יכול ליצור מספר שכונות. אבל כל שכונה יכולה להיות שייכת רק למנהל אחד. אתה יכול להשתמש בסוג הנתונים ForeignKey כדי להגדיר קשר כזה.

ל-Django יש ממשק ניהול מובנה. אתה לא צריך ליצור עבורו מודל. למנהל יש את הזכות לנהל תוכן ולהמחיש את האפליקציה מפאנל הניהול.

הדגם שמכיל תקליטים רבים יהיה עם ForeignKey. זה מגדיר את הקשר כאחד לרבים. הקוד שלהלן מראה היכן למקם את המפתח.

מעמדשְׁכוּנָה(דגמים. דֶגֶם):
admin = מודלים. ForeignKey("פּרוֹפִיל", on_delete=מודלים. CASCADE, related_name='בַּרדָס')
שם = דגמים. CharField (max_length=50)
מיקום = דגמים. CharField (max_length=60)
hood_logo = CloudinaryField('hood_logo', ברירת מחדל='default.png')
תיאור = דגמים. שדה טקסט()
health_tell = מודלים. IntegerField(ריק=נָכוֹן, ריק=נָכוֹן)
משטרה_מספר = דגמים. IntegerField(ריק=נָכוֹן, ריק=נָכוֹן)
ספירה= דגמים. IntegerField(ריק=נָכוֹן, ריק=נָכוֹן)

def__str__(עצמי):
לַחֲזוֹר f'{עצמי.name} hood'

אתה יכול לראות את הקשר באפליקציה כפי שמוצג בתמונה:

ה שְׁכוּנָה לדגם יש עכשיו מנהל. כדי שכל אחד ייצור שכונה, חייב להיות לו זכויות מנהל. ושכונה אחת לא יכולה להיות הרבה מנהלים.

קשרי מסד נתונים רבים לרבים

ביחסים רבים-לרבים, רשומות רבות במודל אחד מתקשרות לאחרות במודל אחר. לדוגמה, ה הודעה ו עֵסֶק לדגמים יכולים להיות מספר רישומים אחד של השני. משתמשים יכולים לפרסם מספר פרסומות עסקיות בפוסטים שלהם ולהיפך.

עם זאת, יצירת קשרים רבים לרבים עלולה להוביל לנתונים לא מדויקים. במסגרות אחרות, תצטרך ליצור טבלה חדשה כדי להצטרף לשתי הטבלאות.

לג'נגו יש פתרון לזה. כאשר אתה משתמש בשדה רבים-לרבים, הוא יוצר טבלה חדשה הממפה את שתי הטבלאות יחד. אתה יכול לשים את השדה הרבה לרבים בכל אחד משני הדגמים, אבל זה לא אמור להיות בשני הדגמים.

מעמדהודעה(דגמים. דֶגֶם):
כותרת = דגמים. CharField (max_length=120, ריק=נָכוֹן)
פוסט = דגמים. שדה טקסט()
תאריך = דגמים. DateTimeField (auto_now_add=נָכוֹן)
משתמש = דגמים. ForeignKey (פרופיל, on_delete=models. CASCADE, related_name='בעל_פוסט')
מכסה המנוע = דגמים. ForeignKey (NeighbourHood, on_delete=models. CASCADE, related_name='hood_post')
עסקים = ​​מודלים. ManyToManyField (עסקים)

def__str__(עצמי):
לַחֲזוֹר f'{עצמיפוסט .title}'

עכשיו, כשאתה צופה ב הודעה דגם בפאנל הניהול, אתה יכול לצרף כמה עסקים לפוסט אחד.

ג'נגו מפשט את יחסי מסד הנתונים

סוג מסד הנתונים שבו אתה משתמש עבור היישום שלך קובע כיצד לרתום נתונים. ל-Django מערכת מקיפה המקלה על חיבור ותפעול מסדי נתונים יחסיים.

תכונות Django מקלות על אחסון ואחזור נתונים מטבלאות קשורות. יש לו ממשקי API מובנים המחברים ויוצרים קשרי מסד נתונים עבור האפליקציה שלך.

קשרי מסד נתונים קובעים את התנהגות האפליקציה שלך. אם אתה משתמש ביחסים של אחד לאחד, אחד לרבים או רבים לרבים תלוי בך.

עם Django, אתה יכול להגדיר ולבדוק תכונות מבלי לשבור את היישום שלך. השתמש ב-Django כדי לאבטח מערכות מסד נתונים ולייעל את חוויית המפתח שלך.