ცხრილების დაკავშირება მონაცემთა ბაზებში
დავუშვათ, გვაქვს ცხრილი მომხმარებელთა სახელებით და იქაური ქალაქებით, სადაც ისინი ცხოვრობენ:
| 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 |
დავუშვათ, თქვენ გჭირდებათ საქონლის შენახვა (სახელი, ფასი, რაოდენობა) და ამ საქონლის კატეგორიები. აღწერეთ შენახვის სტრუქტურა.
დავუშვათ, თქვენ გჭირდებათ მდინარეებისა და ზღვების შენახვა, რომლებშიც ეს მდინარეები ჩაედინება. აღწერეთ შენახვის სტრუქტურა.
დავუშვათ, თქვენ გჭირდებათ ქალაქებისა და ქვეყნების შენახვა, რომლებშიც ისინი მდებარეობენ. აღწერეთ შენახვის სტრუქტურა.