Key ב-SQL הוא צירוף או איחוד של שדות שונים בטבלה שניתן להשתמש בו על מנת לשלוף רשומות או נתונים מהטבלה בהתאם לתנאי מסוים, כמו כן ניתן להשתמש בו על מנת ליצור מערכת יחסים בין טבלאות שונות.
SQL KEYS
ב-SQL קיימים סוגים שונים של-Keys שבאמצעותם ניתן למשל לזהות שורות מהטבלה (ID), או\וגם על מנת לתאר\ליצור מערכת יחסים בין טבלאות שונות.
לפני שנתחיל, נסתכל על סוגי ה-Keys אשר קיימים ב-SQL:
- SUPER KEY – אוסף של מפתחות אשר שניתן להשתמש בהם על מנת לזהות רשומה באופן ייחודי בטבלה, PRIMARY KEY, UNIQUE KEY, ALTERNATE KEY למשל.
- CANDIDATE KEY – אוסף של שורות\עמודות שניתן לזהות באופן ייחודי בטבלה. טבלה יכולה להכיל כמה כאלה, כאשר כל אחד(בלבד) מהם יכול לתפקד כ-PRIMARY KEY.
- PRIMARY KEY – אוסף של שורות\עמודות בטבלה שיש להם מזהה ייחודי שניתן לזהות באמצעותו רשומות. הוא לא יכול לקבל את הערך –NULL, ורק CANDIDATE KEY אחד יכול להיות ה-PRIMARY KEY.
- ALTERNATE KEY – מפתח זה יכול לתפקד כ-PRIMARY KEY, ברמת העיקרון, זהו CANDIDATE KEY שהוא כרגע לא ה-PRIMARY KEY.
- COMPOSITE\COMPUND KEY – צירו, שורות\עמודות של טבלה. הוא יכול להיות CANDIDATE KEY או PRIMARY KEY.
- UNINQUE KEY – בדומה ל-PRIMARY KEY, זהו אוסף של שורות\עמודות בטבלה שיש להם מזהה ייחודי שניתן לזהות באמצעותו רשומות, רק שלא ניתן להכיל בו ערכים כפולים.
- FOREIGN KEY – שדה בטבלה מסוימת שהוא ה-PRIMARY KEY של טבלה אחרת. מפתח זה יודע להכיל ערכים כפולים.
PRIMARY KEY
כפי שהוסבר זהו אילוץ אשר מזהה רשומות באופן ייחודי בטבלה, כלומר שהוא מכיל רק ערכים ייחודים (UNIQUE).
טבלה יכולה להכיל PRIMARY KEY אחד בלבד.
צרו את הטבלה הבאה:
CREATE TABLE Person ( ID int NOT NULL PRIMARY KEY, FirstName nvarchar(50), (LastName nvarchar(50, Age int )
כעת נכניס את הרשומות הבאות לטבלה:
INSERT INTO PERSON(ID, FirstName, LastName, Age) VALUES (1,'Jhon','Nemo',56), (2,'Jhon','Nemo',56), (3,'Ronny','Zaur',80), (4,'Dina','Zaura',86), (5,'Jeff','Fiejell',23), (6,'Dona','Nona',32), (7,'Shosh','Cohen',56), (8,'Dave','Dangerous',56)
* שימו לב כי אם היינו מנסים להכניס את אותו ה-ID פעמיים היינו מקבלים שגיאה כמובן, על ה-ID להיות ייחודי.
לדוגמא תוכלו להבחין כי הדבר היחיד ששונה בין 2 הרשומות הראשונות הוא ה-ID.
FOREIGN KEY
כפי שהוסבר, FOREIGN KEY מתייחס ל-PRIMARY KEY של טבלה אחרת.
כעת ניצור טבלה של צבעים, על מנת שנוכל לתת צבע מועדף לכל אדם מהטבלה הראשונה:
INSERT INTO dbo.Colors (ID, ColorName) VALUES (1,'Red'), (2,'Blue'), (3,'Green'), (4,'Yellow')
הדבר הבא שניצור זו טבלה שתראה לנו איזה צבע אוהב כל אדם מהטבלה הראשונה:
CREATE TABLE dbo.PersonVsColors ( PesonId int NOT NULL, ColorId int NOT NULL CONSTRAINT PK_Persons PRIMARY KEY CLUSTERED ( PesonId ASC, ColorId ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE dbo.PersonVsColors WITH CHECK ADD CONSTRAINT FK_PersonVsColors_persons FOREIGN KEY(PesonId) REFERENCES dbo.Person (Id) GO ALTER TABLE dbo.PersonVsColors CHECK CONSTRAINT FK_PersonVsColors_persons GO
כעת נוכל להכניס נתונים לטבלה זו בהתאם.
ואם נריץ שאילתה שמחזירה לנו את רשומות הטבלה:
SELECT PersonID, ColorID, ColorName FROM PersonVsColors JOIN Colors c ON c.ID = ColorId GROUP BY PersonID, ColorID, ColorName
נוכל לקבל את התוצאה הבא:
לקריאה מורחבת על Keys באתר של מייקרוסופט יש ללחוץ כאן