logo

אילוצי שלמות הפניות ב-DBMS

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

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

התחביר של הטבלה הראשית או הטבלה המופנית היא:

קפיץ סטים
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

כאן טור רול מתנהג כמו מפתח ראשי, מה שיעזור בגזירת הערך של מפתח זר בטבלת הילד.

אילוץ שלמות התייחסות

התחביר של טבלת צאצא או טבלת הפניות הוא:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

אילוץ שלמות הפניות

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

אילוץ מפתח זר או אילוץ שלמות הפניות.

ישנם שני אילוצי יושרה התייחסותיים:

הכנס אילוץ: לא ניתן להכניס ערך לטבלת CHILD אם הערך אינו מצוי ב-MASTER Table

מחק אילוץ: לא ניתן למחוק ערך מ-MASTER Table אם הערך נמצא בטבלת CHILD

נניח שרצית להוסיף Roll = 05 עם ערכים אחרים של עמודות בטבלה SUBJECT, אז תראה מיד שגיאה ' מגבלת מפתח זר הופר ' כלומר בהפעלת פקודת הכנסה כמו:

arraylist ממוין java

הכנס לתוך ערכי SUBJECT(5, 786, OS); לא יתבדר ב-SQL עקב אילוץ הכנסה (מכיוון שאינך יכול להכניס ערך בטבלת צאצא אם הערך אינו שוכב בטבלה הראשית, מכיוון ש-Roll = 5 אינו קיים בטבלה הראשית, ולכן לא יתאפשר להזין Roll = 5 בטבלת צאצא)

באופן דומה, אם אתה רוצה למחוק את Roll = 4 מטבלת STUDENT, תראה מיד שגיאה ' מגבלת מפתח זר הופר ' כלומר בהפעלת פקודת מחיקה כמו:

מחק מ-STUDENT שבו Roll = 4; לא יבדר על ידי SQL עקב אילוץ מחיקה. (מכיוון שאינך יכול למחוק את הערך מטבלת המאסטר אם הערך נמצא בטבלת הילד, מכיוון ש-Roll = 5 קיים בטבלת הילד, ולכן לא יתאפשר למחוק Roll = 5 מהטבלה הראשית, אפשר אם איכשהו הצלחנו למחוק את Roll = 5, ואז Roll = 5 יהיה זמין בטבלת צאצא, מה שבסופו של דבר יפר את אילוץ ההוספה.

ב-DELETE CASCADE.

בהתאם לאילוץ המחיקה: לא ניתן למחוק ערך מטבלת MASTER אם הערך נמצא בטבלת CHILD. השאלה הבאה מגיעה האם נוכל למחוק את הערך מטבלת המאסטר אם הערך מונח בטבלת הילד מבלי להפר את מגבלת המחיקה? כלומר ברגע שנמחק את הערך מטבלת המאסטר, הערך המתאים לו אמור להימחק גם מטבלת הילד.

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

תחביר טבלה

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

בתחביר לעיל, רק לאחר מילת מפתח הפניות (המשמשת ליצירת מפתח זר), הוספנו על מחיקת מפל, על ידי הוספת כזה כעת, נוכל למחוק את הערך מטבלת המאסטר אם הערך מונח בטבלת הבת מבלי להפר את המחיקה אילוץ. עכשיו אם רצית למחוק את Roll = 5 מטבלת המאסטר למרות ש-Roll = 5 שוכב בטבלת הילד, זה אפשרי כי ברגע שאתה נותן את הפקודה למחוק Roll = 5 מטבלת המאסטר, בשורה יש Roll = 5 מטבלת הילד גם יימחקו.

אילוץ שלמות הפניות
אילוץ שלמות התייחסות

שתי הטבלאות שלעיל STUDENT ו-SUBJECT עם ארבעה ערכים כל אחד מוצגות, כעת נניח שאתה מחפש למחוק Roll = 4 מטבלת STUDENT(Master) על ידי כתיבת פקודת SQL: מחק מ-STUDENT שבו Roll = 4;

ברגע ש-SQL יבצע את הפקודה לעיל, השורה עם Roll = 4 מטבלת SUBJECT( Child) תימחק גם היא, תלמיד ונושא הטבלה תיראה כך:

אילוץ שלמות הפניות
אילוץ שלמות התייחסות

משתי הטבלאות שלעיל STUDENT ו-SUBJECT, אתה יכול לראות שבשתי הטבלה Roll = 4 נמחק בבת אחת מבלי להפר את אילוץ המחיקה.

השוואת מחרוזות ב-java

לפעמים נשאלת שאלה חשובה מאוד בראיונות ש: האם למפתח זר יכולים להיות ערכי NULL?

התשובה לשאלה לעיל היא כן, ייתכן שיש לה ערכי NULL, בעוד שהמפתח הראשי לא יכול להיות NULL בכל מחיר. כדי להבין את השאלה לעיל באופן מעשי, בואו נבין להלן את המושג מחיקה null.

ב-DELETE NULL.

בהתאם לאילוץ המחיקה: לא ניתן למחוק ערך מטבלת MASTER אם הערך נמצא בטבלת CHILD. השאלה הבאה מגיעה האם נוכל למחוק את הערך מטבלת המאסטר אם הערך מונח בטבלת הילד מבלי להפר את מגבלת המחיקה? כלומר ברגע שנמחק את הערך מטבלת המאסטר, הערך המתאים לו אמור להימחק גם מטבלת הילד או שניתן להחליף אותו בערך NULL.

הערך של מחרוזת java

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

תחביר טבלה:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

בתחביר לעיל, רק אחרי מילת מפתח הפניות (המשמשת ליצירת מפתח זר), הוספנו על delete null, על ידי הוספת כזה כעת, נוכל למחוק את הערך מטבלת המאסטר אם הערך שוכב בטבלת הילד מבלי להפר את המחיקה אילוץ. עכשיו אם רצית למחוק את Roll = 4 מטבלת המאסטר למרות ש-Roll =4 שוכב בטבלת הילד, זה אפשרי כי ברגע שאתה נותן את הפקודה למחוק Roll = 4 מטבלת המאסטר, בשורה יש Roll = 4 מטבלת צאצא יוחלף בערך NULL.

אילוץ שלמות התייחסות
אילוץ שלמות התייחסות

שתי הטבלאות שלעיל STUDENT ו-SUBJECT עם ארבעה ערכים כל אחד מוצגות, כעת נניח שאתה מחפש למחוק Roll = 4 מטבלת STUDENT(Master) על ידי כתיבת פקודת SQL: מחק מ-STUDENT שבו Roll = 4;

ברגע ש-SQL יבצע את הפקודה לעיל, השורה עם Roll = 4 מהטבלה SUBJECT( Child ) תוחלף בערך NULL, התוצאה המתקבלת תלמיד ונושא הטבלה תיראה כך:

אילוץ שלמות התייחסות
אילוץ שלמות התייחסות

משתי הטבלאות שלעיל STUDENT ו-SUBJECT, אתה יכול לראות שבטבלה STUDENT Roll = 4 נמחק בעוד הערך של Roll = 4 בטבלה SUBJECT מוחלף ב-NULL. זה מוכיח שלמפתח הזר יכולים להיות ערכי null. אם במקרה ב-SUBJECT Table, עמודה Roll היא מפתח ראשי יחד עם מפתח זר, אז במקרה זה לא נוכל לגרום למפתח זר להיות בעל ערכי NULL.