en-UShe-IL
You are here:   Blog
Register   |  Login

Blog Archive:

Maximize
* Can be used in order to search for older blogs Entries

Search in blogs


Blog Categories:

Maximize
* Can be used in order to search for blogs Entries by Categories

Blog Tags:

Maximize
* Can be used in order to search for blogs by keywords

TNWikiSummit


Awared MVP

 


Microsoft® Community Contributor 


Microsoft® Community Contributor


 Read first, before you you use the blog! Maximize

Recent Entries

Minimize
מרץ19

Written by: ronen ariely
19/03/2013 18:22 RssIcon

ננסה לסכם כמה נקודות חשובות לגבי ההבדלים בין unique index ("אינדקס ייחודי" כפי שאקרא לו בעברית) ובין PRIMARY KEY (נעזר במושג "מפתח ראשי").

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

* ניתן לבנות אינדקס ייחודי על טורים או על טור בודד.

* ניתן לבנות מפתח ראשי על מספר טורים או על טור בודד (בניגוד למה שמצאתי רשום בכמה מדריכים באינטרנט).

* בשרתי MySQL אילוץ של ייחודיות מאפשר ערכי null מרובים, בשרתי SQL לא.

דברים שהם זהים:

* ממפתח ראשי משתמע גם אינדקס ייחודי.

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

דברים שהם שונים:

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

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

* אם אין הגדרה מפורשת של clustered index אז המפתח הראשי ישמש כ clustered index.

* לשימוש transactional replication חייבים שיהיה מפתח הראשי.

from BOL (Book On Line): "Tables published for transactional replication must have a primary key."

במילים אחרות:

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

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

A brief summary of the similarities and differences between 'PRIMARY KEY' and a 'Unique index'

* A unique index on a column(s) is an index on that column(s) that also enforces the constraint that you cannot have two equal values in that column in two different rows.
* It is possible to make a unique index on mutiple columns.
* It is possible to make a PRIMARY KEY on mutiple columns.
* In MySQL a unique constraint allows multiple NULLs.

Things that are the same:

* A primary key implies a unique index.
* Foreign keys work with unique constraints as well as primary keys.

Things that are different:

* A primary key also implies NOT NULL, but a unique index can be nullable.
* There can be only one primary key, but there can be multiple unique indexes.
* If there is no clustered index defined then the primary key will be the clustered index.
* For transactional replication, you need the primary key.
from BOL: "Tables published for transactional replication must have a primary key."

In other words:

* primary key is just a Unique index with the restrictions
* PRIMARY KEY is a Constraint element forbidding NULLs in the key column(s) as well as forbidding duplicates.