پایگاههای داده حجم عظیمی از اطلاعات را در چندین جدول ذخیره میکنند. هر جدول ممکن است هزاران سطر داشته باشد و طبیعی است که بسیاری از این سطرها حاوی اطلاعات تکراری و اضافی باشند. با این حال چگونه میتوان دادهها را به شکلی مدیریت کرد که فقط اطلاعات یکتا ذخیره شوند و بین جدولهای مختلف در پایگاه داده ارتباط برقرار کرد؟ پاسخ تمام این سؤالات، کلید در پایگاه داده است.
کلیدهای SQL تضمین میکنند که هیچ سطری دارای مقادیر تکراری نباشد. همچنین، این کلیدها به برقراری ارتباط بین جدولهای مختلف در پایگاه داده کمک میکنند. بنابراین، آشنایی با انواع کلیدهای پایگاه داده ضروری است. در این مقاله از بلاگ آسا، کلیدهای متداولی که در مدیریت پایگاه داده مورد استفاده قرار میگیرند را بررسی میکنیم.
کلیدها در DBMS چیستند؟
کلید در سیستم مدیریت پایگاه داده (DBMS) به ویژگی یا مجموعهای از ویژگیها گفته میشود که به شناسایی یکتای یک سطر (یا تاپل) در یک رابطه (یا جدول) کمک میکند. کلیدها برای ایجاد ارتباط بین جداول و ستونهای مختلف در یک پایگاه داده رابطهای به کار میروند. به طور کلی، هفت نوع کلید در سیستمهای مدیریت پایگاه داده (DBMS) وجود دارد.
تمام این کلیدها در SQL باید به درستی برای پایگاه داده مربوطه پیادهسازی شوند تا از تکرار دادهها جلوگیری شود. شناسایی صحیح کلیدها، دقت پایگاه داده را افزایش میدهد و باعث بهبود نتایج میشود. بیایید با بررسی این کلیدها، اطلاعات بیشتری درباره کلیدها در SQL به دست آوریم:
- کلید اصلی (Primary Key)
- کلید کاندیدا (Candidate Key)
- ابرکلید (Super Key)
- کلید خارجی (Foreign Key)
- کلید مرکب (Composite Key)
- کلید جایگزین (Alternate Key)
- کلید یکتا (Unique Key)
در ادامه هر یک از این کلیدها را بررسی و کاربردشان را تشریح میکنیم.
ابرکلید (Super Keys)
ابرکلیدها یک کلید منفرد یا گروهی از چندین کلید هستند که میتوانند به تنهایی Toppleها (ردیفها) را در یک جدول شناسایی کنند. یک ابرکلید میتواند شامل چندین ویژگی (Attribute) باشد اما هیچکدام از این ویژگیها به تنهایی نمیتوانند یکتایی تاپلها را مشخص کنند. به همین دلیل برخی از کلیدها باهم گروهبندی میشوند تا تاپلها را مشخص کنند.
مثال ابرکلید
برای روشنتر شدن موضوع، به مثال زیر توجه کنید. جدولی با ساختار زیر را در نظر بگیرید:
Id | Name | Gender | City | Dep_Id | |
۱ | Ali Reza | Male | Tehran | alireza@example.com | ۱ |
۲ | Maryam | Female | Shiraz | Maryam12@example.com | ۲ |
۳ | Hossein | Male | Isfahan | Hossein@example.com | ۱ |
۴ | Fatemeh | Female | Mashhad | Fatemeh@example.com | ۳ |
۵ | Ahmad | Male | Tabriz | Ahmad25@example.com | ۲ |
فرض کنید ستون Id شناسه کارمندان را به صورت منحصربهفرد نشان میدهد. در این صورت، میتوان گفت که ویژگی Id میتواند تاپلهای این جدول را به طور یکتا مشخص کند. بنابراین، id یک ابرکلید برای این جدول است. اما توجه داشته باشید که این جدول میتواند ابرکلیدهای دیگری هم داشته باشد.
برای مثال:
- (Id, Name)
- (Id, Email)
- (Id, Name, Email)
تمام این موارد میتوانند بهعنوان ابرکلید در نظر گرفته شوند، زیرا همه آنها میتوانند تاپلهای جدول را به طور یکتا شناسایی کنند. دلیل این امر وجود ویژگی id در این کلیدها است که توانایی شناسایی یکتای تاپلها را دارد. ویژگیهای اضافی در این کلیدها (مانند Name یا Email) ضروری نیستند، اما همچنان میتوانند تاپلها را شناسایی کنند. توجه داشته باشید که ویژگی Email هم میتواند یک ابر کلید باشد، زیرا ایمیل هر نفر منحصر به اوست.
کلیدهای کاندید (Candidate Keys)
کلید کاندید یک کلید منفرد یا گروهی از چندین کلید است که بهطور یکتا سطرهای یک جدول را شناسایی میکند. در واقع، کلید کاندید زیرمجموعهای از ابرکلید (Super Keys) است که فاقد ویژگیهای اضافی و غیرضروری برای شناسایی یکتای تاپلها است. به همین دلیل، کلید کاندید را میتوان بهعنوان ابرکلید حداقلی هم معرفی کرد.
مقدار کلید کاندید برای همه سطرها، در جدول یکتا و غیر تهی (non-null) است، بنابراین دو قید مهم را در بر میگیرد: قید یکتا (Unique) و قید غیر تهی (Not Null). این موضوع تضمین میکند که مقادیر کلید کاندید هیچگاه تکراری نباشند. توجه داشته باشید که هر جدول حداقل باید یک کلید کاندید داشته باشد.
مثال کلید کاندید
در مثالی که پیشتر ارائه شد، هر دو ستون ID و Email میتوانند بهعنوان کلید کاندید عمل کنند، زیرا هر دو حاوی مقادیر یکتا و غیر تهی هستند. اما اگر ویژگی City یا Gender را به آنها اضافه کنیم، آیا هنوز هم یک کلید کاندید خواهیم داشت؟ همانطور که گفته شد، کلید کاندید باید یک کلید با حداقل ویژگیها باشد، بنابراین اضافه کردن چنین ویژگیهایی به کلید کاندید، آنها را به یک ابرکلید تبدیل میکند.
کلید اصلی (Primary Key)
کلید اصلی همان کلید کاندیدی است که توسط مدیر پایگاه داده (Database Administrator) انتخاب میشود تا تاپلهای یک جدول را به طور یکتا شناسایی کند. از میان تمام کلیدهای کاندید ممکن برای یک جدول، تنها یکی از آنها برای شناسایی یکتای تاپلها استفاده میشود که به آن کلید اصلی میگویند. در مثال بالا دیدید که هر دو ستون ID و Email میتوانند کلید کاندید باشند اما فقط یکی از این دو باید به عنوان کلید اصلی انتخاب شود تا از بروز ناسازگاری جلوگیری شود.
روشهای تعریف کلید اصلی
دو روش برای ایجاد کلید اصلی در یک جدول وجود دارد:
۱. اضافه کردن قید کلید اصلی به یک ویژگی موجود
در این روش، پس از ایجاد یک ویژگی، قید کلید اصلی را به آن اضافه میکنیم. به مثال زیر توجه کنید:
ALTER TABLE employees
ADD CONSTRAINT pk_employee PRIMARY KEY (ID);
در اینجا، ویژگی ID بهعنوان کلید اصلی انتخاب شده و اگر سعی کنیم سطری با مقدار تکراری برای ID اضافه کنیم، پیام خطا دریافت خواهیم کرد.
INSERT INTO employees (ID, Name, Email) VALUES (1, ‘John’, ‘john@example.com’);
— Error: Duplicate entry for ID
۲. تعریف کلید اصلی در زمان ایجاد جدول
در این روش، هنگام تعریف جدول، قید کلید اصلی را پس از تعریف تمام ویژگیها اضافه میکنیم:
CREATE TABLE employees (
ID INT NOT NULL,
Name VARCHAR(50),
Email VARCHAR(100),
PRIMARY KEY (ID)
);
نکته: برای تعریف کلید اصلی روی چند ویژگی (کلید مرکب)، میتوانید تمام ویژگیها را در پرانتز لیست کنید:
CREATE TABLE orders (
OrderID INT NOT NULL,
ProductID INT NOT NULL,
PRIMARY KEY (OrderID, ProductID)
);
توجه داشته باشید که تمام ویژگیهای کلید اصلی باید غیر تهی تعریف شوند.
کلیدهای جایگزین (Alternate Keys) یا ثانویه (Secondary Keys)
کلیدهای جایگزین به کلیدهای کاندیدایی گفته میشود که به عنوان کلید اصلی (Primary Key) انتخاب نشدهاند. اگر یادتان باشد بالاتر گفتیم که بین دو ستون ID و Email فقط یکی از آنها میتواند به عنوان کلید اصلی انتخاب شود. در این مثال اگر شما ID را به عنوان کلید اصلی انتخاب کنید، ویژگی Email به عنوان کلید ثانویه شما شناخته خواهد شد.
به عبارت ساده، از آنجا که هر جدول فقط میتواند یک کلید اصلی داشته باشد، سایر کلیدهای کاندید باقیمانده بهعنوان کلیدهای جایگزین یا ثانویه شناخته میشوند. این کلیدها هم میتوانند تاپلهای جدول را بهطور یکتا شناسایی کنند، اما مدیر پایگاه داده (Database Administrator) کلید دیگری را بهعنوان کلید اصلی انتخاب کرده است.
کلید خارجی (Foreign Key)
کلید خارجی، یک ویژگی (Attribute) است که در جدول والد (Parent Table) بهعنوان کلید اصلی تعریف شده، اما در یک جدول میزبان (Host Table) بهعنوان یک ویژگی استفاده میشود. این نوع کلید یک رابطه بین جدول والد و جدول میزبان ایجاد میکند. در ادامه از یک مثال برای درک بهتر این کلید استفاده میکنیم.
مثال کلید اصلی و کلید خارجی
بهعنوان مثال فرض کنید علاوه بر جدول Employee که اطلاعات شخصی کارکنان را ذخیره میکند، جدولی به نام Department هم داریم که اطلاعات مربوط به بخشهای کاری کارکنان را شامل میشود. ساختار این جدول به صورت زیر است:
Id | Name | Location |
۱ | marketing | Tehran |
۳ | sales | Rasht |
۲ | finance | Mashhad |
در این جدول، Id کلید اصلی است، بنابراین ما میتوانیم این ویژگی را به جدول Employee اضافه کنیم و آن را به عنوان کلید خارجی (Dep_Id) در جدول تعریف کنیم. این کار را میتوان هم هنگام ایجاد جدول و هم با تغییر جدول پس از ایجاد انجام داد. در مثال زیر، جدول تغییر داده شده است:
ALTER TABLE Employee
ADD CONSTRAINT fk_department
FOREIGN KEY (Dep_Id) REFERENCES Department(Id);
در اینجا، Dep_Id در جدول Employee بهعنوان کلید خارجی تعریف شده است، درحالیکه Id در جدول Department کلید اصلی است.
کاربرد کلید خارجی
کلید خارجی امکان ایجاد رابطه بین دو جدول را فراهم میکند و به این ترتیب، نرمالسازی (Normalization) در پایگاه دادههای رابطهای تضمین میشود. هر جدول اطلاعات مرتبط با یک حوزه خاص (مثلا کارمند و بخش کاری) را توصیف میکند. همچنین، بهروزرسانی پایگاه داده با کلیدهای خارجی بسیار سادهتر میشود، زیرا فقط نیاز است تغییرات را در چند سطر محدود اعمال کنیم. بهعنوان مثال، اگر بخش بازاریابی از Rasht به Shiraz منتقل شود، بهجای بهروزرسانی همه سطرهای مرتبط در جدول Employee، فقط کافی است مکان جدید را در جدول Department تغییر دهیم. این کار خطر ناسازگاری دادهها در مکانهای مختلف را کاهش میدهد.
کلید مرکب (Composite Key)
کلید مرکب، یک کلید کاندید یا کلید اصلی است که از بیش از یک ویژگی (Attribute) تشکیل شده است. در برخی موارد، هیچ ویژگی منفردی نمیتواند تاپلهای یک جدول را به طور یکتا شناسایی کند. در چنین شرایطی، میتوانیم از ترکیب چند ویژگی استفاده کنیم تا یکتایی تاپلها تضمین شود.
مثال کلید مرکب
به جدول زیر توجه کنید:
Transaction_Id | Product_Id | Customer_Id | Product | Quantity |
T1002 | P101 | C1001 | Smartphone | ۲ |
T2003 | P102 | C1002 | Laptop | ۱ |
T1002 | P101 | C1001 | Smartwatch | ۳ |
T3001 | P103 | C1003 | Smartphone | ۲ |
T3001 | P102 | C1002 | Smartwatch | ۲ |
در این جدول، هیچیک از ویژگیهایTransaction_Id یا Product_Id بهتنهایی نمیتوانند تاپلها را بهطور یکتا شناسایی کنند. اما اگر این دو ویژگی را با هم ترکیب کنیم، میتوانیم یک کلید بسازیم که تاپلها را یکتا شناسایی کند. این ترکیب، کلید مرکب نامیده میشود و تضمین میکند که هیچ دو سطر در جدول مقادیر یکسانی برای این ترکیب ندارند.
نکته: تفاوت کلید مرکب با ابرکلید در این است که میتوان برخی از ویژگیها را از یک ابرکلید حذف کرد و به یک کلید اصلی دست یافت، اما نمیتوان از کلید اصلی یک ویژگی را حذف کرد، زیرا در آن حالت دیگر نمیتواند تاپلها را به صورت یکتا مشخص کند.
نکته ۲: کلید مرکب میتواند هم بهعنوان کلید اصلی و هم بهعنوان کلید خارجی در پایگاه دادهها استفاده شود.
کلید یکتا (Unique Key)
کلید یکتا یک ستون یا مجموعهای از ستونهاست که هر رکورد را در جدول به طور یکتا شناسایی میکند. تمام مقادیر در این کلید باید یکتا باشند. تفاوت کلید یکتا با کلید اصلی (Primary Key) در این است که کلید یکتا میتواند تنها یک مقدار null داشته باشد، در حالی که کلید اصلی نمیتواند مقدار null داشته باشد. این نوع کلید معمولا در مواقع خاص استفاده میشود. به عنوان مثال در برخی مواقع نمیتوان از سایر ستونها برای تشکیل کلید اصلی استفاده کرد. در این شرایط اضافه کردن یک ستون با یک مقدار null میتواند این مشکل را برطرف کند.
جدول انواع کلیدها در دیتابیس
در جدول زیر خلاصهای از خصوصیات و اهداف هر کلید آورده شده است که پیشنهاد میکنیم آن را به خاطر بسپارید.
هدف | خصوصیات | نوع کلید |
---|---|---|
به طور منحصر به فرد ردیفها را در جدول شناسایی میکند | میتواند شامل صفات تکراری باشد | ابر کلید |
ردیفها را به طور منحصر به فرد شناسایی میکند، زیرمجموعهای از ابر کلید است | فقط شامل صفات ضروری است | کلید کاندید |
ردیفها را به طور منحصر به فرد در جدول شناسایی میکند | منحصر به فرد و غیر قابل تهی بودن | کلید اصلی |
میتواند برای اهداف ثانویه مورد استفاده قرار گیرد | به عنوان کلید اصلی انتخاب نشده است | کلید ثانویه |
ردیفها را به طور منحصر به فرد شناسایی میکند | بیش از یک صفت دارد | کلید مرکب |
حفظ تمامیت ارجاعی، برقرار کردن روابط | به کلید اصلی در جدول دیگری مرتبط است | کلید خارجی |
تشکیل کلید اصلی در مواقعی که ساخت کلید با دیگر ویژگیها ممکن نباشد | مشابه کلید اصلی است اما با (حداکثر) یک مقدار null | کلید یکتا |
سخن پایانی
در این مقاله، با اهمیت انواع کلیدها در SQL آشنا شدیم، نحوه پیادهسازی هر یک از این کلیدها در SQL را مشاهده کردیم و تفاوتهای میان آنها را دیدیم. هر یک از این کلیدها نقش اساسی در طراحی و مدیریت پایگاه دادهها دارند و دقت، یکپارچگی و کارایی پایگاه داده را تضمین میکنند. با توجه به این که انتخاب کلید مناسب میتواند تفاوت چشمگیری در کیفیت طراحی پایگاه داده ایجاد کند، پیشنهاد میکنیم هنگام طراحی جداول و روابط، با دقت ویژگیهای هر نوع کلید را بررسی و بهترین گزینه را انتخاب کنید. در نهایت، تسلط بر این مفاهیم شما را در مسیر تبدیلشدن به یک متخصص حرفهای پایگاه داده یاری خواهد کرد.
منابع
www.javatpoint.com | www.airbyte.com | www.geeksforgeeks.org
دیدگاهتان را بنویسید