Маалымат базаларында таблицаларды байланыштыруу
Андай болсун, бизде колдонуучулардын аты жана жашаган шаарлары бар таблица бар:
| 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 |
Сизге товарларды (аты, баасы, саны) жана ушул товарлардын категорияларын сактоо керек деп коёлу. Сактоо структурасын жазып бериңиз.
Сизге дарыяларды жана алар куйган деңиздерди сактоо керек деп коёлу. Сактоо структурасын жазып бериңиз.
Сизге шаарларды жана алар жайгашкан өлкөлөрдү сактоо керек деп коёлу. Сактоо структурасын жазып бериңиз.