מה ההבדל בין Primary Key

גרי רשף

New member
בדרך כלל הם חופפים אך לא בהכרח

יכולים להיות כמה Unique Index, אבל Primary Key רק אחד. דוגמה: נניח שיש לך טבלה של כל הישובים בארץ והקודים שלהם. שים לב שכל שם מופיע פעם אחת וגם כל קוד פעם אחת, ולכן יש כאן אפשרות לשני Unique Index; אבל Primary Key יכול להיות רק אחד וצריך להחליט מי מהם. המשמעות של בחירת Primary Key היא בקישור של 1:N בין טבלה הזו לטבלה אחרת (נניח- טבלת עובדים בה מופיע הישוב של כל אחד).
 

s h i m s h o n

New member
עוד הבדל

PK לא יכול להכיל ערכי NULL ועמודה שעליה מבוסס ה-PK נחשבת כעמודת Mandatory/Not-null . UK יכול להכיל ערכי NULL ובהתאם לבסיס-הנתונים, יכול להכיל יותר מ-NULL אחד (אין בדיקת כפילות ל-NULL). בברכה, ש.
 
ההבדל הוא יותר לוגי

primary key נועד לתת אפשרות לזהות רשומה. בין האפשרות לזיהוי רשומה לביצועים לא אמור להיות קשר. אינדקס נועד לשפר את הביצועים. unique index משמש גם לאכוף ייחודיות של נתונים, אבל לא נועד לזהות רשומה. מאחר שמאחורי primary key עומד unique index, ושניתן לזהות רשומה באמצעות unique index (למרות, שזה לא תפקיד האינדקס), קל מאד להתבלבל בינהם, ולהחליט שהם אובייקטים זהים, אבל גם אם האימפלמנטציה שלהם מאחורי הקלעים זהה (השרת בונה unique index לשדות, שמשמשים כprimary key), התפקיד שלהם שונה. הבדלים קלים נוספים הם, שניתן להגדיר מספר אינדקסים, אבל רק primay key אחד, וששדות שמשתתפים בprimary key לא יכולים להכיל את הערך null (לעומת זאת שדות שמשתתפים בunique index יכולים בהתאם להגדרת השדות להכיל את הערך null).
 

ליאור ב

New member
וגם...

על Primary Key יהיה Clustered Index , על Unique Key לא, אלא אם הוגדר במקום ה PK. זה אומר שהנתונים בטבלה יהיו מסודרים פיזית לפי ה Primary Key. ליאור.
 

ליאור ב

New member
Correction

Usually a Primary Key will be also clustered index if it is an Identity column. Notice - When you create a PK from the Enterprise Manager, by default it will be a clustered one. Usually , the unique constraint / index will be created later and therefor, by default, a non clustered. The different between Unique constraint and unique index is that you can set a foreign key on an unique constraint but not on the unique index. Leor.​
 
למעלה