Verilənlər bazasında cədvəllərin əlaqələndirilməsi
Tutaq ki, bizdə istifadəçi adları və onların yaşadıqları şəhərlər olan bir cədvəl var:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Bu cədvəlin çatışmazlığı ondadır ki, eyni şəhər müxtəlif istifadəçilər üçün bir neçə dəfə təkrarlanır. Bu, bəzi problemlərə səbəb olur.
Birincisi, daimi təkrarlanma verilənlər bazasının daha çox yer tutmasına səbəb olur.
İkincisi, şəhərlərlə əməliyyatlar yerinə yetirmək kifayət qədər əlverişsizdir. Məsələn, biz bütün şəhərlərin siyahısını ekranda çıxarmaq istəyirik. Bunu birbaşa etmək mümkün olmayacaq. Biz bütün istifadəçiləri onların şəhərləri ilə birlikdə əldə etməli, sonra əldə edilən şəhərlərdən təkrarlananları silməli və yalnız ondan sonra bu siyahını əldə edəcəyik.
İndi təsəvvür edin ki, bazada 10000 istifadəçi var və onlar 10 şəhərdəndirlər - bu 10 şəhər üçün biz böyük miqdarda sətirdən ibarət olan bütün cədvəli çıxarmalı olacağıq - bu, çox yavaş və mənasız resurs sərfi ilə nəticələnən əməliyyat olacaq.
Problemin həlli
Bizim cədvəlimizi ikiyə bölmək lazımdır: birində şəhərlər, digərində isə istifadəçilər saxlanılmalıdır. Eyni zamanda, istifadəçilər cədvəlində city_id adlı bir sütun olacaq, hansı ki, istifadəçinin şəhərinə istinad edəcək.
Beləliklə, gəlin iki cədvəl yaradaq. Şəhərlər cədvəli:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
İstifadəçilər cədvəli:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Tutaq ki, siz məhsulları (ad, qiymət, miqdar) və bu məhsulların kateqoriyalarını saxlamalısınız. Saxlama quruluşunu təsvir edin.
Tutaq ki, siz çayları və həmin çayların töküldüyü dənizləri saxlamalısınız. Saxlama quruluşunu təsvir edin.
Tutaq ki, siz şəhərləri və onların yerləşdiyi ölkələri saxlamalısınız. Saxlama quruluşunu təsvir edin.