Geçişli Bağımlılıklardan Kaçının Olmasını təmin edin
Verilənlər bazasında keçidli bir asılılıq eyni cədvəldəki funksional asılılığa səbəb olan dəyərlər arasında dolaysız bir əlaqədir. Üçüncü Normal Forma (3NF) normallaşdırma standartına çatmaq üçün hər hansı keçidli asılılığı aradan qaldırmaq lazımdır.
Doğrusu, keçidli bir asılılıq arasında aralarında funksional bir asılılığa malik olan üç və ya daha çox xüsusiyyət (və ya verilənlər bazası sütunları) tələb olunur, yəni bir masada A sütunu ara sütun C
Bunun necə işlədiyini görək.
Keçidli bağımlılık nümunəsi
AUTHORS
| Author_ID | Müəllif | Kitab | Author_Nationality |
|---|---|---|---|
| Auth_001 | Orson Scott Kartı | Ender oyun | Amerika Birləşmiş Ştatları |
| Auth_001 | Orson Scott Kartı | Ender oyun | Amerika Birləşmiş Ştatları |
| Auth_002 | Margaret Atwood | Keçmişin hekayəsi | Kanada |
Yuxarıdakı AUTHORS nümunəsində:
- Kitab → Müəllif : Burada Kitabın öznitəsi Yazar xüsusiyyətini müəyyən edir. Kitabın adını bilirsinizsə, yazarın adını öyrənə bilərsiniz. Müəllif bir neçə kitab yaza bildiyi üçün Müəllif Kitabını təyin etmir. Məsələn, yazarın adını Orson Scott Card bildiyimiz üçün hələ də kitabın adını bilmirik.
- Müəllif → Author_Nationality : Eyni şəkildə, Yazar dəqiqliyi Author_Nationality-i müəyyən edir, ancaq ətrafındakı digər yolu deyil; Çünki biz bilirik ki, vətəndaşlıq müəllifi təyin edə bilərik.
Ancaq bu cədvəl keçidli asılılığı təqdim edir:
- Kitab → Author_Nationality: Kitabın adını bildiyimiz halda, Müəllif sütunu vasitəsilə vətəndaşlığı müəyyən edə bilərik.
Təcrübəli Bağımlılıqlardan Müdafiə
Üçüncü Normal Forma təmin etmək üçün keçidli asılılığı aradan qaldıraq.
Kitab sütununu Müəlliflər cədvəlindən çıxararaq və ayrı bir Kitab tablosu yaratmaqla başlaya bilərik:
KİTABLAR
| Book_ID | Kitab | Author_ID |
|---|---|---|
| Kitab_001 | Ender oyun | Auth_001 |
| Kitab_001 | Mind uşaqları | Auth_001 |
| Kitab_002 | Keçmişin hekayəsi | Auth_002 |
AUTHORS
| Author_ID | Müəllif | Author_Nationality |
|---|---|---|
| Auth_001 | Orson Scott Kartı | Amerika Birləşmiş Ştatları |
| Auth_002 | Margaret Atwood | Kanada |
Bunu düzəldər mi? İndi bağımlılıklarımızı inceleyelim:
KİTABLAR :
- Book_ID → Kitab: Kitab Book_ID-dən asılıdır.
- Bu cədvəldə başqa heç bir bağımlılıq yoxdur, buna görə də biz yaxşıyıq. Qeyd edək ki, xarici_məlilci_d_bu bu cədvəl AUTHORS masasına birincil əsas Author_ID vasitəsilə istinad edir . Biz keçidli asılılıqdan, əlaqəli məlumat bazalarının əsas dizaynından qaçınmaq üçün əlaqələr yaratdıq.
AUTHORS masa :
- Author_ID → Yazar: Müəllif Author_ID-ə asılıdır.
- Müəllif → Author_Nationality: Mətn müəllif tərəfindən müəyyən edilə bilər.
- Author_ID → Author_Nationality: Müəllif Yazarın öznitəsilə Author_ID- dən müəyyən edilə bilər. Hələ də keçidli bir asılılıq var.
Bu məlumatları normallaşdırmaq üçün üçüncü bir masa əlavə etməliyik:
ÖLKƏLƏR
| Ölkə_ID | Ölkə |
|---|---|
| Coun_001 | Amerika Birləşmiş Ştatları |
| Coun_002 | Kanada |
AUTHORS
| Author_ID | Müəllif | Ölkə_ID |
|---|---|---|
| Auth_001 | Orson Scott Kartı | Coun_001 |
| Auth_002 | Margaret Atwood | Coun_002 |
İndi üç masa var ki, cədvəllər arasında əlaqə qurmaq üçün xarici düymələrdən istifadə edir:
- BOOK masanın xarici əsası Author_ID AUTHORS cədvəldə bir kitabın bir kitabını əlaqələndirir.
- AUTHORS cədvəlinin xarici kodu Country_ID bir müəllifi COUNTRIES cədvəlində bir ölkə ilə əlaqələndirir.
- ÖLKƏLƏR cədvəlində heç bir xarici düyməyə malik deyildir, çünki bu dizaynda başqa cədvəllə əlaqə qurmağa ehtiyac yoxdur.
Niyə Transitive Bağımlılıklar Bad Database Design edir
3NF'yi təmin etmək üçün keçidli bağımlılıklardan qaçınmanın dəyəri nədir? İlk masamızı yenidən nəzərdən keçirək və yaratdıqları məsələləri nəzərdən keçirək:
AUTHORS
| Author_ID | Müəllif | Kitab | Author_Nationality |
|---|---|---|---|
| Auth_001 | Orson Scott Kartı | Ender oyun | Amerika Birləşmiş Ştatları |
| Auth_001 | Orson Scott Kartı | Mind uşaqları | Amerika Birləşmiş Ştatları |
| Auth_002 | Margaret Atwood | Keçmişin hekayəsi | Kanada |
Bu cür dizayn data anomaliyaları və uyğunsuzluqlara kömək edə bilər, məsələn:
- Əgər "Uşaqlar Mind" və "Ender's Game" adlı iki kitabı sildiyseniz, yazarın "Orson Scott Card" və onun vətəndaşlığı tamamilə verilənlər bazasından silinəcəkdir.
- Bir kitab əlavə etmədiyiniz halda verilənlər bazasına yeni bir yazı əlavə edə bilməzsiniz; Müəllif hələ nəşr olunmamışsa və ya yazdığı bir kitabın adını bilmirsinizsə?
- "Orson Scott Card" öz vətəndaşlığını dəyişdirsə, onu göründüyü bütün qeydlərdə dəyişmək məcburiyyətindəsiniz. Eyni müəlliflə çoxlu qeydlərin olması qeyri-dəqiq məlumatlarla nəticələnə bilər: məlumat girişi şəxsin onun üçün birdən çox qeydiyyatdan keçdiyini və yalnız bir qeyddə məlumatları dəyişdiyini nə ilə izah edir?
- Müəllifi tamamilə silmədən "The Handmaid's Tale" kimi bir kitabı silə bilməzsiniz.
Bunlar normallaşma və keçidli bağımlılıklardan qaçınmaq, məlumatları qorumaq və davamlılığı təmin etmək üçün bəzi səbəblərdir.