Verilənlər bazasında ən vacib anlayışlardan biri verilənlər bazası tabloları arasında əlaqələr yaratmaqdır. Bu münasibətlər birdən çox masalarda saxlanılan məlumatları birləşdirmək və səmərəli şəkildə əldə etmək üçün bir mexanizm təmin edir. İki tablo arasındakı əlaqəni yaratmaq üçün, başqa cədvəldə bir sütuna istinad edən bir masada bir xarici düyməni göstərməlisiniz.
Verilənlər bazası və əlaqələri
Zaten veritabanları, Microsoft Excel kimi bir elektron tablo proqramında kullanabileceğiniz kimi, sadəcə bir sıra masalar olduğunu bilirsiniz. Əslində, bir Excel elektron tabloını bir verilənlər bazasına çevirə bilərsiniz. E-tablolardan verilən verilənlər bazaları fərqli olduğu yerlərdə isə, masalar arasında güclü əlaqələrin qurulması ilə bağlıdır.
Məsələn, insan resursları məlumatlarını izləmək üçün bir şirkətin istifadə etdiyi məlumat bazasını nəzərdən keçirin. Bu verilənlər bazasında şirkətin hər bir üzvü üçün aşağıdakı məlumatları ehtiva edən İşçilər adlı bir masa ola bilər:
- İşçilərin kimliyi
- Adı
- Soyad
- OfficePhone
- Ev Telefonu
- PositionID
Bu nümunədə, işçi identifikasiyası veritabanına əlavə edildikdə hər bir işçiyə təyin edilmiş benzersiz bir tamsayıdır. Vəzifə iddiası işçinin şirkətdəki mövqeyinə istinad etmək üçün istifadə olunan iş kodudür. Bu sxemdə işçi yalnız bir mövqedə ola bilər, lakin hər bir vəzifəni bir çox (və ya) heç bir işçi doldura bilməz. Məsələn, yüzlərlə işçinin "Kassir" mövqeyinə sahib ola bilərsiniz.
Verilənlər bazasında hər bir mövqe haqqında aşağıdakı əlavə məlumatlar olan Pozisyonlar adlı bir tablo da ola bilər:
- PositionID
- Başlıq
- JobLevel
- Bacarıq kateqoriyasındadır
- Yerləşmə
Bu cədvəldə yerləşən Vəzifə ID sahəsi, İşçilərin cədvəlində İşçilərin ID sahəsi ilə bənzərdir - bir mövqe verilənlər bazasına əlavə olunduqda yaradılan nadir yaradılan bir tamsayıdır.
Verilənlər bazasında çalışanların siyahılarını çəkmək üçün getdiyimizdə, hər birinin adını və başlığını tələb etmək təbiidir. Lakin, bu məlumat bir çox verilənlər bazası masalarında saxlanılır, belə ki, yalnız bir JOIN sorgusu istifadə edərək əldə edilə bilər ki, bu da cədvəllər arasında mövcud əlaqəni tələb edir.
Cədvəllərin strukturuna baxdığınızda əlaqəni müəyyən edən sahə yəqin ki, açıqdır - Vəzifə İdarəsi sahəsi. Hər bir işçinin yalnız bir mövqe ola biləcəyi və mövqeyi, Vəzifə cədvəlinin vəzifələrin cədvəlinin müvafiq girişindən daxil edilməsi ilə müəyyən edilir. Pozisyonlar cədvəlinin əsas nöqtəsi olmağına əlavə olaraq, bu nümunədə, Vəzifə İdarəsi sahəsi də İşçilərin cədvəlindən Vəzifələr cədvəlinə xarici bir açardır. Verilənlər bazası daha sonra məlumatları bir neçə cədvəldən əlaqələndirmək və verilənlər bazasında dəyişikliklər və əlavələrə istinad bütövlüyünü tətbiq etməyə davam etmək üçün bu sahəni istifadə edə bilər.
Xarici düyməni müəyyən etdikdən sonra, aşağıdakı sorguyu istifadə edərək, irəlidə bilərsiniz və istənilən məlumatı bazadan çıxarın:
SQL Server'da Xarici Anahtarların Yaratılması
Texniki cəhətdən, yuxarıdakı kimi sorguları yerinə yetirmək üçün əlaqəni açıq şəkildə müəyyən etmək lazım deyil. Lakin, xarici əsas məhdudiyyətlərdən istifadə edərək, əlaqəni dəqiq şəkildə müəyyən edərsəniz, verilənlər bazası sizin üçün bəzi ev işlərini yerinə yetirəcəkdir:
- Çalışanların cədvəlinə yeni bir qeyd əlavə etdikdə, verilənlər bazası, girdiğiniz Vəzifə ID'sinin Pozisyonlar tablosunda etibarlı bir əsasdır .
- Pozisyonlar cədvəlində bir Vəzifə ID dəyişdirirsinizsə, verilənlər bazası tutarlılığı qorumaq üçün tələb olunan yenilikləri Çalışanlar cədvəlində yerinə yetirə bilər.
- Verilənlər bazası mövqeyini müvafiq mövqedən silmək və ya əlaqəli işçi girişləri ilə mövqeyini silməkdən imtina etməklə və ya bütün əlaqədar işçilərin peşə silməsini reallaşdırmaqdan asılı olaraq mövqeyinin silinməsindən təsirlənə bilər.
SQL Server-da xarici anketin necə yaradılacağı burada:
ALTER TABLE İşçilər Əlavə XÜSUSİYYƏTLƏRİ (PositionID) REFERANSLAR Pozisyonlar (PositionID)Bənd əlavə edərək bir masa yaratdığınızda xarici bir düyməni də yarada bilərsiniz:
FOREIGN KEY REFERENCES Pozisyonlar (PositionID)xarici açar sütunu üçün sütun tərifinin sonuna.