Veritabanlarında Tabloların Bağlanması
Diyelim ki kullanıcı adlarını ve yaşadıkları şehirleri içeren bir tablomuz var:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Bu tablonun dezavantajı, aynı şehrin farklı kullanıcılar için birkaç kez tekrarlanmasıdır. Bu, bazı sorunlara yol açar.
İlk olarak, sürekli tekrarlama, veritabanının çok daha fazla yer kaplamasına neden olur.
İkinci olarak, şehirlerle işlem yapmak oldukça elverişsizdir. Örneğin, tüm şehirlerin bir listesini ekrana yazdırmak istiyoruz. Bunu basitçe yapmak mümkün olmayacaktır. Tüm kullanıcıları şehirleriyle birlikte almak, ardından alınan şehirlerden kopyaları çıkarmak ve ancak o zaman bu listeyi elde etmek zorunda kalacağız.
Şimdi, veritabanında 10 şehirden 10000 kullanıcı olduğunu hayal edin - bu 10 şehir için, çok sayıda satırdan oluşan tüm tabloyu çıkarmak zorunda kalacağız - bu, anlamsız kaynak israfıyla çok yavaş bir işlem olacaktır.
Sorunun Çözümü
Tablomuzu ikiye bölmemiz gerekiyor: birinde şehirler, diğerinde ise kullanıcılar saklanacak. Aynı zamanda, kullanıcılar tablosunda, kullanıcının şehrine referans verecek olan city_id sütunu olacak.
Peki, iki tablo yapalım. Şehirler tablosu:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Kullanıcılar tablosu:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Diyelim ki ürünleri (ad, fiyat, miktar) ve bu ürünlerin kategorilerini saklamanız gerekiyor. Saklama yapısını açıklayın.
Diyelim ki nehirleri ve bu nehirlerin döküldüğü denizleri saklamanız gerekiyor. Saklama yapısını açıklayın.
Diyelim ki şehirleri ve içinde bulundukları ülkeleri saklamanız gerekiyor. Saklama yapısını açıklayın.