Python-da Verilenler Bazasında Cedvellerin Birlesdirilmesi
Tutaq ki, bizim istifadeçi adları ve onların yaşadığı şeherlerle bir cedvelimiz var:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Bu cedvelin çatışmazlığı ondadır ki, eyni şeher müxtelif istifadeçiler üçün bir neçe defe tekrarlanır. Bu, bir sıra problemlere sebeb olur.
Birincisi, daimi tekrarlar verilenler bazasının daha çox yer tutmasına getirib çıxarır.
Ikincisi, şeherlerle emeliyyatları yerine yetirmek olduqca narahatdır. Meselen, ekranda bütün şeherlerin siyahısını çıxartmaq istəyirik. Bunu asanlıqla etmek olmayacaq. Biz bütün istifadeçileri onların şeherleri ile birlikde almalı, sonra alınan şeherlerden dublikatları silmeli ve ancag o zaman bu siyahını alacığıq.
Indi təsəvvür edin ki, bazada 10000 istifadeçi var və onlar 10 şeherdendir - bu 10 şeher üçün biz böyük sayda setirden ibaret olan bütün cedveli çıxarmalı olacığıq - bu, çox yavaş işleyen ve mənasız resurs sərfi demekdir.
Problemin həlli
Bizim cedvelimizi iki yerə bölmək lazımdır: birinde şeherler saxlanılır, digərinde isə istifadeçiler. Eyni zamanda, istifadeçiler cedvelinde city_id adlı bir sütun olacaq, hansı ki, istifadeçinin şeherine istinad edəcək.
Beləliklə, gəlin iki cedvel yaradaq. Şeherler cedveli:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Istifadeçiler cedveli:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktiki tapşırıqlar
Tutaq ki, siz malları (ad, qiymet, miqdar) ve bu malların kateqoriyalarını saxlamalısınız. Saxlama quruluşunu təsvir edin.
Tutaq ki, siz çayları ve bu çayların axdığı denizleri saxlamalısınız. Saxlama quruluşunu təsvir edin.
Tutaq ki, siz şeherleri ve onların yerləşdiyi ölkeleri saxlamalısınız. Saxlama quruluşunu təsvir edin.