2012 yılında üzerinde çalıştığım bir proje için Türkiye'nin tüm il, ilçe, semt ve posta kodlarını içeren bir veri tabanı oluşturmam gerekmişti. O dönemde bu veriyi toparlayabilmek için ciddi bir emek harcamak zorunda kaldığımı hatırlıyorum.
Geçen gün yedeklerimi araştırırken o veri tabanını görünce, hem ihtiyaç duyabilecekler için bir kaynak olabileceğini hem de geçenlerde yazdığım Veri Tabanlarında Normalizasyon yazısına bir örnek oluşturabileceğini düşündüm ve paylaşmak istedim.
MySQL için hazırlanmış olan bu veri tabanı;
Veri tabanının 2012 yılından sonra güncellenmediğini hatırlatmak isterim...
Veri tabanını indirmek için: https://github.com/hozakar/postakod
Normalize edilmiş veri tabanlarında çalışmaya alışkın olmayan arkadaşlar için, verileri çekerken kullanılabilecek bazı SQL örneklerini aşağıda bulabilirsiniz. Ama önce tablo yapısını inceleyelim...
il:
ilce:
pkod:
semt:
İstanbul iline bağlı tüm ilçelerin listesini alalım.
SELECT ilce.isim FROM ilce INNER JOIN il ON il.id = ilce.il_id WHERE il.isim = 'İstanbul' ORDER BY ilce.isim
İstanbul ilinin Beykoz ilçesine bağlı tüm semtlerin listesini alalım.
SELECT semt.isim FROM semt INNER JOIN ilce ON semt.ilce_id = ilce.id INNER JOIN il ON ilce.il_id = il.id WHERE il.isim = 'İstanbul' AND ilce.isim = 'Beykoz' ORDER BY semt.isim
Hangi illerin Yenişehir adında ilçesi var?
SELECT il.isim FROM il INNER JOIN ilce ON il.id = ilce.il_id WHERE ilce.isim = 'Yenişehir' ORDER BY il.isim
Hangi illerin 100.Yıl adında semti var?
SELECT il.isim FROM il INNER JOIN ilce ON il.id = ilce.il_id INNER JOIN semt ON ilce.id = semt.ilce_id WHERE semt.isim = '100.Yıl' GROUP BY -- Aynı ilde aynı isimde birden fazla il.isim -- semt bulunması ihtimaline karşı ORDER BY il.isim
Posta kodu '34744' olan semt, bağlı olduğu ilçe ve il bilgisini alalım.
SELECT il.isim as il, ilce.isim as ilce, semt.isim as semt, pkod.kod FROM semt INNER JOIN ilce ON semt.ilce_id = ilce.id INNER JOIN il ON ilce.il_id = il.id INNER JOIN pkod ON semt.pkod_id = pkod.id WHERE pkod.kod = '34744'