Python базаларындагы таблицаларды байланыштыруу
Анда бизде колдонуучулардын аттары жана алар жашаган шаарлар жазылган таблица бар деп көрөлү:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Бул таблицанын жетишсиздиги - бир эле шаар ар кайсы колдонуучулар үчүн бир нече жолу кайталанып турат. Бул кээ бир көйгөйлөргө алып келет.
Биринчиден, тынымсыз кайталоо маалымат базасы көбүрөөк орун ээлей башташына алып келет.
Экинчиден, шаарлар менен операцияларды аткаруу жеткиликтүү эмес. Мисалы, биз экранга бардык шаарлардын тизмесин чыгаргыбыз келет. Муну оңой эле жасап болбойт. Биз бардык колдонуучуларды алардын шаарлары менен бирге алышыбыз керек, андан кийин алынган шаарлардан дубликаттарды өчүрүшүбүз керек, ошондон кийин гана биз бул тизмени ала алабыз.
Эми эсептейли, базада 10000 колдонуучу
жана 10 шаар бар - ушул 10 шаар
үчүн биз көп саптардан турган бүт таблицаны
алышыбыз керек болот - натыйжада абдан жай операция
жана маанисиз ресурс сарптоо болуп чыгат.
Көйгөйдү чечүү
Биздин таблицабызды экиге бөлүш керек: биринчисинде
шаарлар сакталат, экинчисинде - колдонуучулар.
Бул учурда колдонуучулар таблицасында колдонуучунун
шаарына шилтеме бере турган city_id
колонкасы болот.
Ошентип, эки таблица жасайлы. Шаарлар таблицасы:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Колдонуучулар таблицасы:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Практикалык тапшырмалар
Сиз товарларды (аты, баасы, саны) жана ал товарлардын категорияларын сакташыңыз керек деп коёлу. Сактоо структурасын жазыңыз.
Сиз дарыяларды жана ал дарыялар куйган деңиздерди сакташыңыз керек деп коёлу. Сактоо структурасын жазыңыз.
Сиз шаарларды жана алар жайгашкан өлкөлөрдү сакташыңыз керек деп коёлу. Сактоо структурасын жазыңыз.