Pythonda ma'lumotlar bazalarida jadvallarni bog'lash
Faraz qilaylik, bizda foydalanuvchilar ismlari va ular yashaydigan shaharlar jadvali mavjud:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Ushbu jadvalning kamchiligi shundaki, bir xil shahar turli foydalanuvchilar uchun bir necha marta takrorlanadi. Bu ba'zi muammolarga olib keladi.
Birinchi navbatda, doimiy takrorlash ma'lumotlar bazasi ko'proq joy egallashiga sabab bo'ladi.
Ikkinchidan, shaharlar bilan amallarni bajarash unchalik qulay emas. Masalan, biz barcha shaharlar ro'yxatini ekranga chiqarmoqchimiz. Buni shunchaki qilish mumkin bo'lmaydi. Bizga ularning shaharlari bilan birga barcha foydalanuvchilarni olingan shaharlardan dublikatlarni o'chirish kerak bo'ladi va shundan keyingina biz bu ro'yxatni olamiz.
Endi tasavvur qiling, bazada 10000
foydalanuvchi 10 ta shahardan - bu
10 ta shahar uchun biz juda ko'p
qatordan iborat butun jadvalni olishimiz
kerak bo'ladi - bu juda sekin ishlaydigan va
manbalarni behuda sarflaydigan operatsiya bo'ladi.
Muammoni yechish
Bizning jadvalimizni ikkiga bo'lish kerak: birida
shaharlar saqlanadi, ikkinchisida esa foydalanuvchilar.
Bunda foydalanuvchilar jadvalida city_id
ustuni bo'ladi, u foydalanuvchi shahriga
murojaat qiladi.
Xo'sh, keling ikkita jadval yasaylik. Shaharlar jadvali:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Foydalanuvchilar jadvali:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Amaliy vazifalar
Faraz qilaylik, siz tovarlarni (nomi, narxi, miqdori) va ushbu tovarlarning turkumlarini saqlashingiz kerak. Saqlash tuzilmasini yozib chiqing.
Faraz qilaylik, siz daryolar va bu daryolar quyiladigan dengizlarni saqlashingiz kerak. Saqlash tuzilmasini yozib chiqing.
Faraz qilaylik, siz shaharlarni va ular joylashgan mamlakatlarni saqlashingiz kerak. Saqlash tuzilmasini yozib chiqing.