Pythonda ma'lumotlar bazalarida jadvallarni bog'lash

Faraz qilaylik, bizda foydalanuvchilar ismlari va ular yashaydigan shaharlar jadvali mavjud:

users
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:

cities
id name
1 city1
2 city2
3 city3

Foydalanuvchilar jadvali:

users
id name city_id
1 user1 1
2 user2 1
3 user3 2
4 user4 1
5 user5 3
6 user6 2

Amaliy vazifalar

Задание 1

Faraz qilaylik, siz tovarlarni (nomi, narxi, miqdori) va ushbu tovarlarning turkumlarini saqlashingiz kerak. Saqlash tuzilmasini yozib chiqing.

Задание 2

Faraz qilaylik, siz daryolar va bu daryolar quyiladigan dengizlarni saqlashingiz kerak. Saqlash tuzilmasini yozib chiqing.

Задание 3

Faraz qilaylik, siz shaharlarni va ular joylashgan mamlakatlarni saqlashingiz kerak. Saqlash tuzilmasini yozib chiqing.