האם Foreign Key יכול לקבל null?

האם Foreign Key יכול לקבל null?

שלום שלום יש לי שתי טבלאות המקושרות ביניהן עם אילוץ של Foreign Key. הבעיה היא שיש מקרים שבהם אני רוצה להכניס נתונים לטבלת הבן, כששדה ה-FK ריק (null), אבל אז אני מקבלת את הודעת השגיאה: UPDATE statement conflicted with COLUMN FOREIGN KEY constraint . האם אכן אין אפשרות להשאיר null בשדה שהוא FK? ואם כך - אז איך לאלץ שהשדה הנ"ל (הנ"ל, ה-null... הא הא .. משחק מילים... לא חשוב) יקבל אך ורק ערכים שלקוחים משדה מסויים בטבלה אחרת, או ערכי null, ולא שום דבר אחר? (מדובר ב-DB על SQLSRVR, שאותו אני מעדכנת בדפי ASP)
 

eli_leiba

New member
תעבדי מול unique constraint באבא

קצת תורה של sql server unique Constraint נבדל מ Primary key בשני דברים 1- אפשר להגדיל כמה unique Constraints ו Primary יש קר אחד 2 הבדל נוסף שלא הרבה יודעים - ניתן להכניס ל unique column ערך של null מה שאסור לעשות ב primary key ולכן מה שהאוסטרלית שלנו צריכה לעשות זה להגדיר באב unique constraint להוסיף שורת null בשדה (רק אחת אפשר!) ואז להגדיר את ה foreign key column כמקבל null ולאכוף את האילוץ וזהו בדיוק מה שאת צריכה
 
תודה על התשובה המעמיקה. ../images/Emo45.gif

אבל... (תמיד יש אבל): 1 - מבחינת נרמול הדטה בייס, או ניהול נכון שלו, האם זה לא בעייתי להכניס שורה פיקטיבית רק לצרכי null? (זו סתם שאלה פילוסופית תיאורטית, לא אכפת לי לעשות את זה אם זה פותר לי את הבעייה). 2 - בעייה קצת יותר מעשית: פעלתי כהמלצתך: שיניתי את ה-PK בטבלת האב ל-unique constraint, אפשרתי לו לקבל null, הוספתי רשומה פיקטיבית עם ערך null, ואז כשניסיתי להחזיר את האילוץ, קיבלתי הודעת שגיאה בזו הלשון:
- Unable to create relationship ´FK_dest_books´. ODBC error: [Microsoft][ODBC SQL Server Driver][SQL Server]ALTER TABLE statement conflicted with COLUMN FOREIGN KEY constraint ´FK_dest_books´. The conflict occurred in database ´haolamDB´, table ´books´, column ´ISBN´.​
(books היא טבלת האב, dest היא טבלת הבן, ISBN הוא השדה המדובר). מה יכול להיות הקונפליקט שעליו הוא מתריע?
 
הסתדרתי עם 2. כמה מביך ../images/Emo9.gif

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

eli_leiba

New member
שמחתי לעזור והבנתי שבסוף הסתדרת ../images/Emo48.gif

מבחינת נרמול - unique מאפשר להכניס null אחד בלבד לאבא והרבה null לבנים לכן מבחינת החוקים null מתנהג אותו דבר כמו כל ערך לא-ריק אחר. ברור ש Primary key clustered עדיף מבחינת אופטימיזציה אבל אם פתרתי לך בעייה אפליקטיבית בהגדרות בלבד אז תשתשי ב unique כי אחרת ל כל dropdown box תצטרכי להוסיף את ה null בעצמך ביישום.
 
למעלה