Ma'lumotlar bazasida jadvallarni bog'lash
Faraz qilaylik, bizda foydalanuvchilar ismlari va ular yashaydigan shaharlar bilan jadval bor:
| 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.
Birinchidan, doimiy takrorlash ma'lumotlar bazasi joyni juda ko'p egallashiga sabab bo'ladi.
Ikkinchidan, shaharlar bilan amallarni bajarish unchalik qulay emas. Masalan, biz barcha shaharlar ro'yxatini ekranga chiqarmoqchimiz. Buni shunchaki qilish mumkin bo'lmaydi. Bizga ularning shaharlari bilan birga barcha foydalanuvchilarni olish, keyin olingan shaharlardan dublikatlarni o'chirish kerak bo'ladi va shundan keyingina biz bu ro'yxatni olamiz.
Endi tasavvur qiling, bazada 10000
foydalanuvchi va 10 ta shahar bor - aynan shu 10
shahar uchun biz katta miqdordagi qatorlardan iborat butun jadvalni
olib chiqishimiz kerak bo'ladi - bu juda sekin ishlovchi
va resurslarni behuda sarflaydigan operatsiya bo'lib chiqadi.
Muammoni yechish
Bizning jadvalimizni ikkiga bo'lish kerak: birida
shaharlar saqlansin, 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 |
Faraz qilaylik, siz mahsulotlarni (nomi, narxi, miqdori) va ushbu mahsulotlarning toifalarini saqlashingiz kerak. Saqlash tuzilmasini yozing.
Faraz qilaylik, siz daryolar va bu daryolar quyiladigan dengizlarni saqlashingiz kerak. Saqlash tuzilmasini yozing.
Faraz qilaylik, siz shaharlar va ular joylashgan mamlakatlarni saqlashingiz kerak. Saqlash tuzilmasini yozing.