KONUMSAL VERİTABANI I Dersi İLİŞKİSEL VERİTABANINDA TABLOLAR ARASI İLİŞKİLER VE SORGULAMALAR soru cevapları:
Toplam 20 Soru & Cevap#1
SORU:
Tablolar arasında hangi ilişkilerden bahsedilebilir?
CEVAP:
Tablolar arasında 3 farklı tipte ilişkiden söz edilebilir.
- Bire-bir (one to one 1:1)
- Birden-çoğa (one to many 1:M)
- Çoktan-çoğa (many to many M:N)
#2
SORU:
Veritabanı kuramı ortaya atıldığında ilk geliştirilen model nedir?
CEVAP:
Veritabanı kuramı ortaya atıldığında ilk geliştirilen model hiyerarşik veritabanı modelidir (hierarchical database model). Hiyerarşik veritabanı modelinde, adından da anlaşılacağı üzere yalnızca birden çoğa bir ilişki söz konusudur. Zaman içerisinde farklı ilişkilerin de gerekliliği gündeme gelince, ağ veritabanı modeli (networkw database model) geliştirilmiş ve birden çoğa ilişkinin yanı sıra çoktan çoğa ilişki kurulabilmiştir. Ancak hiyerarşik veritabanı ve ağ veritabanı modellerinin esnek olamayışı, bu modellerde veriyi bilgiye dönüştürme sürecinde tablolar arası ilişkilerin tam olarak tanımlanamaması, ilişkisel veritabanı modelinin ortaya atılmasında tetikleyici bir etken olmuştur.
#3
SORU:
Birebir ilişkiyi açıklayınız.
CEVAP:
Bire bir ilişkide, her iki tabloda ilişki kurulacak ortak bilgi alanı genellikle birincil anahtar (primary key field) ya da tekil anahtar alan (unique key field) olarak seçilir. TCDD bilet sistemini örnek alalım. İki adet tablo kullanalım. Yolcu tablosu ve bilet tablosu. Bu iki tablo arasındaki ilişki bire bir olur. Her yolcu yalnızca bir bilet satın alır ve her bileti yani koltuğu sadece bir kişi satın alabilir. İlişki kurulurken yolcu tablosuna mı yoksa bilet tablosuna mı ortak bilgi alanı eklemeliyiz? Eğer bilet tablosuna TCKIMLIK_NO bilgi alanı eklersek satılmayan koltuklar için “NULL” boş kayıt oluşturmuş oluruz. Bu istenen bir durum değildir. Yolcu tablosuna BILET_NO bilgi alanı eklersek her yolcu için bir bilet satın alınmış olacağı için herhangi bir “NULL” değeri yani boş kayıt oluşturmamış oluruz.
#4
SORU:
Yapılandırılmış Sorgulama Dili’ni (SQL) açıklayınız.
CEVAP:
Tablolar arası karmaşık ilişkilerin söz konusu olduğu veritabanlarının tasarlanması ve yönetilmesi için IBM tarafında geliştirilmiş dile, Yapılandırılmış Sorgulama Dili (Structured Query Language - SQL) adı verilir. Kavramın İngilizce kısaltması dilimize doğrudan geçmiş olup, Türkçe literatürde de doğrudan SQL olarak kullanılır. Genel itibariyle SQL;
- Veritabanının tasarım özelliklerini belirlemek,
- Tabloların ve ilişkilerin kurulmasını sağlamak,
- Veritabanı kullanıcılarının yetkilendirilmesini ve erişimlerini kontrol etmek,
- Veritabanı içerisine kayıtları eklemek,
- Önceden eklenmiş kayıtları güncellemek ve silmek gibi veritabanı yönetimi söz konusu olduğunda ihtiyaç duyulan bütün süreçlerin yönetilebilmesini sağlayan yönetim sistemi yazılımlarında bazı küçük farklılıklar bulunmasına rağmen hemen hepsi standart SQL sorgulama dilini destekler. SQL sorgulama dili ile veritabanının yönetimine dair işlemler yapılabilir.
#5
SORU:
Birden çoğa ilişkiler hangi durumlarda kullanılır?
CEVAP:
Birden çoğa ilişkilerde ana tablonun bir kaydı, ikinci tablonun bir ya da birden fazla kaydı ile ilişkilidir. Bu sayede birden fazla tekrar eden kayıtların saklanmasında etkili bir depo alanı kullanımı sağlar. Bu ilişki tipi hiyerarşik veritabanı modelinin ortaya çıkmasını sağlamıştır. Örnek vererek açıklamak gerekirse bir kreş-yuva için anne ve çocuk ilişkisini ele alalım. Örneğe göre ilişki kuracağımız tablolar anne ve çocuk tabloları olsun. Bir anne birden fazla çocuğunu kreşe getirmiş olabilir, diğer bir deyişle annenin birden fazla çocuğu olabilir. Ancak bir çocuğun birden fazla annesi olamaz. Buna göre tablolar arasında birden çoğa ilişki kurulmalıdır.
#6
SORU:
Çoktan çoğa ilişkileri hangi durumlarda kullanılır?
CEVAP:
Bir tabloda birden fazla kayıt diğer tablodaki birden fazla kayıt ile ilişkili ise tablolar arasında çoktan çoğa ilişki kurulur. Çoktan çoğa ilişki kurabilmek için ek olarak ilişki tablosuna gereksinim vardır. Bu ilişkiyi açıklamak için öğrenci ve ders ilişkisini ele alalım. Üniversitede bir öğrenci birden fazla ders alabilir, bu duruma ek olarak bir derse birden fazla öğrenci katılabilir. Bu durum öğrenci ve ders tablolarının çoktan çoğa ilişkisi ile veritabanında tanımlanabilir.
#7
SORU:
Yapılandırılmış Sorgulama Dili’nin (SQL) en önemli avantajı nedir?
CEVAP:
SQL’in veritabanı yönetim yeteneklerinin yanı sıra en önemli avantajı, adından da anlaşılacağı üzere güçlü sorgulama ve sorgulamalar ile oluşturulan raporlama özellikleridir. Tablolar arasındaki ilişkileri kullanan SQL, tek bir sorgulama komutuyla, birden fazla tabloyu aynı anda ele alarak ilgili tablolardaki elde edilen verileri tek bir sonuç olarak raporlayabilir. Bütün bu süreçleri kontrol ederek veritabanını yöneten ve sorgulama sağlayan komutlar bütününe SQL (yapılandırılmış sorgulama dili) adı verilir.
#8
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) SELECT komutunun işlevi nedir?
CEVAP:
SELECT SQL’in en temel sorgulama komutudur.
Tablolar ve aralarındaki ilişkileri göz önüne alarak istenilen sorgulara göre tablolardan ve istenen veri alanlarından verileri toparlayıp, raporlayan komuttur. Türkçe karşılığı “seçmek” olan SELECT komutunu tanımlamak için hangi tablo veya tablolardaki hangi alanının ya da alanlarının sorgulandığının belirtilmesi gerekir. En basit haliyle;
SELECT <Alan_Adı> FROM <Tablo_Adı> olarak tanımlanabilir. Örneğin ilçeler tablosunda tanımlanmış ilçe adları ile ilgili bir sorgulama istenir ise;
SELECT ilçe_adı FROM ilçeler şeklinde ifade edilmelidir. Bu komut sayesinde ilçeler tablosunun bütün alanları yerine sadece ilçe_adı alanındaki veriler sorgulanarak, kullanıcının talep ettiği sade raporların elde edilmesi mümkün olmaktadır.
#9
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) “SELECT * FROM ilçeler” komutu girilirse hangi tablonun gösterilmesi beklenir?
CEVAP:
SELECT * FROM ilçeler ifadesi ile ilçeler tablosundaki bütün veriler listelenir. Select komutunun temel kullanımı verildikten sonra operatörler aracılığıyla çok çeşitli kullanımları bölümün devamında detaylarıyla incelenecektir.
#10
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) INSERT INTO komutunun işlevi nedir?
CEVAP:
INSERT INTO komutu tablolara yeni kayıt eklemek için kullanılan komuttur. Türkçe karşılığı
‘içine ekle’ olan komutun temel ifadesi şu şekildedir; INSERT INTO <Tablo_Adı> VALUES (Alanlara ait veriler) Örneğin ilçeler tablosuna yeni bir kayıt eklemek için;
INSERT INTO ilçeler VALUES (15, ‘Emirdağ’,
‘Afyonkarahisar’, 0301)
#11
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) UPDATE komutunun işlevi nedir?
CEVAP:
UPDATE eksik bırakılan alanlara yeni verilerin girilmesi ya da var olan verilerin değiştirilmesi için kullanılır. UPDATE komutunun Türkçe karşılığı ‘güncelleme’ olarak ifade edilir. UPDATE komutunda, INSERT komutundaki tablo ve alan adları ile eklenecek yeni verilere ek olarak, veritabanındaki hangi kaydın değiştirileceğinin de bildirilmesi gerekir. Aşağıda verilen örnekte 1 no’lu ilçenin erkek ve kadın nüfus verilerinin nasıl güncelleneceği gösterilmektedir. UPDATE ilçe_nüfus SET erkek_nüfus=185282, kadın_nüfus=191368 WHERE ilçe_no=1
#12
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) DELETE komutunun işlevi nedir?
CEVAP:
Türkçe karşılığı ‘kayıt sil’ olan DELETE veritabanında tutulan kayıtların silinmesi işleminde kullanılır.
DELETE FROM ilçe_nüfus WHERE ilçe_no=15
#13
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) WHERE komutunun kullanımı nasıldır?
CEVAP:
WHERE komutu veritabanında yapılan sorgulamalarda ve işlemlerde belirli özelliklere sahip kayıtların belirtilmesinde kullanılır. WHERE ifadesi ile SELECT komutunun kullanım örneği şöyledir. SELECT * FROM ilçeler WHERE bağlı_olduğu_il = ‘Eskişehir’
SELECT komutunun işletilmesi sonucunda bütün tablodaki kayıtlar yerine sadece Eskişehir iline bağlı ilçeler listelenir. Burada karşılaştırma operatörü olarak kullanılan eşittir karakterine ve tırnak işaretine dikkat edilmesi gerekir. Eğer veri alanının veri türü metinsel (alfa-nümerik) ise, eşittir operatöründen sonra değer tırnak içinde yazılır. Eşittir operatörünün nümerik veri türünde bilgi alanı ile kullanımı ise doğrudan eşitliktir, değer tırnak içinde yazılmaz.
SELECT * FROM ilçeler WHERE plaka_kod = 26
#14
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) LIKE operatörünün kullanımı nasıldır?
CEVAP:
WHERE sadece eşitlik durumunda değil, benzerlik, büyüklük, küçüklük vb. karşılaştırmalarda kullanılan bir komuttur. Veritabanında yapılan sorgulamalarda bazı özelliklere göre benzer kayıtların seçilmesi istenildiğinde WHERE komutu ile beraber LIKE operatörü kullanılmaktadır. Türkçe karşılığı ‘benzer’ olan LIKE ifadesi ile WHERE komutunun kullanım örneği şöyledir:
SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘E%’ ifadesi ile E harfi ile başlayan illerin ilçeleri listelenir.
#15
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) “%” işareti ne ifade eder?
CEVAP:
% işareti ‘bir veya birden fazla herhangi bir karakter gelebilir’ demektir. Örneğin aşağıdaki ifadede ismi ‘şehir’ ile biten illerin ilçeleri listelenir. Bu defa % işareti öne konularak sonu ‘şehir’ olan illere bağlı ilçeler listelenmektedir.
SELECT * FROM ilçeler WHERE bağlı_olduğu_il LIKE ‘%şehir’
#16
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) IsNull komutunun işlevi nedir?
CEVAP:
IsNull : SQL de boş geçilmesine izin verilen alanlardaki eksik veya girilmemiş veriler Null (yokluk- boşluk) olarak ifade edilir. Bu sayede veritabanındaki kaydı boş olan alanlar sorgulanabilir. Örneğin
SELECT * FROM ilçe_nüfus WHERE erkek_ nüfus ISNULL veya
SELECT * FROM ilçe_nüfus WHERE erkek_ nüfus = NULL komutunun uygulanması ile erkek nüfus verisi girilmemiş ilçeler listelenir. Komutun iki farklı uygulama şekline dikkat ediniz.
#17
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) ORDER BY komutunun işlevi nedir?
CEVAP:
SELECT komutu ile yapılan sorgulamalarda veritabanındaki sorguya uygun kayıtlar, belirtilen bilgi alanına göre azalan veya çoğalan olarak sıralanır. Örneğin ilçe_nüfus tablosunda bulunan ilçeler sorgulandığında veritabanına kayıtlar eklendiği sırada sorgu sonucu listelenir. Burada sıralama kriteri birincil anahtardaki artış sırasıdır. Bu sorgulama sonucu eğer farklı bir alana göre sıralanmak istenir ise ORDER BY komutu ile sorgu sonucunun sıralanması istenen kriter belirtilir. Bu tür sıralama işlemlerinin tek komutta yapılabilmesi açısından SELECT komutunun ardına eklenen ORDER BY komutu ile tek aşamada bu sıralama işlemi yapılabilir. ORDER BY komutuna ek olarak sıralama yönünün de belirtilmesi gerekir.
#18
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) <> ifadesinin kullanımını açıklayınız.
CEVAP:
Eşit değildir (<>) : Sorgulama sonucunda belirtilen verileri içermeyen kayıtları listelemek için kullanılır.
Örneğin Eskişehir dışındaki illerin ilçelerini listelemek için aşağıdaki komut kullanıldığında yalnızca
Afyonkarahisar’ın ilçelerini listeler:
SELECT * FROM ilçe_nüfus WHERE bağlı_olduğu_il <> “Eskişehir”
#19
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) GROUP BY komutunun işlevini nedir?
CEVAP:
Veritabanlarında yapılan sorgulamalar sonucu kayıt sayısı çok fazla olan sonuç listeleri elde edilebilir. Bu listelerde birbirine benzer özellikteki kayıtların geleneksel yöntemlerle sayılması, toplanması vb. işlemleri yapmak oldukça zordur. Bu amaçla, birbirine benzer kayıtların gruplandırılarak sayılması, toplanması gibi işlemlerin sorgu komutlarının içerisinde yapılabilmesi işlemleri kolaylaştıracaktır. Ortak özelliği bulunan kayıtların gruplanması sayma, toplama vb. işlemlerinin yapılabilmesini kolaylaştıran SQL komutu GROUP BY komutudur.
SELECT COUNT(ilçe_no) AS iller_bağlı_ilçe_sayısı, bağlı_olduğu_il
FROM ilçe_nüfus
GROUP BY bağlı_olduğu_il
Yukarıdaki SQL komutunda GROUP BY komutu, ilçeler tablosundaki ilçeleri bağlı oldukları illere göre gruplandırmıştır. Gruplandırma işleminden sonra bir ile bağlı kaç ilçe kaydı olduğu COUNT (ilçe_ no) komutu ile saydırılmıştır. Buradan anlaşılacağı üzere COUNT sayma komutudur. Sayım sonucunun görüntülenebilmesi için sanal bir bilgi alanı gerekir. Komutun sonucu sanal bilgi alanında göstermesi ve sayıların yanına illeri listeleyebilmesi için, AS iller_bağlı_ilçe_sayısı, bağlı_olduğu_il kullanılmıştır.
GROUP BY operatörü ile sadece sayma işlemi değil, toplama, en yüksek, en düşük ve ortalama işlemleri de yapılabilir.
#20
SORU:
Yapılandırılmış Sorgulama Dili’nde(SQL) HAVING komutunun kullanımını açıklayınız.
CEVAP:
GROUP BY komutunun yeteneklerini artırmak için eklenen ve Türkçe anlamı ‘sahiplik’ olan, WHERE komutundaki eşitlik, büyüklük, küçüklük gibi karşılaştırma kriterlerini kullanarak grup içinde süzme işlemi gerçekleştiren bir SQL operatörüdür. Örneğin toplam nüfusu 5000’in üzerindeki ilçelerin sayısını bulmak için;
SELECT COUNT (Toplam_nüfus),ilçe_adı,bağlı_olduğu_il
FROM ilçe_nüfus
GROUP BY bağlı_olduğu_il
HAVING (toplam_nüfus) > 5000
SQL komut dizini kullanılır. Burada GROUP BY komutu ile bağlı olduğu il bazında gruplama yaparak,
HAVING komutu ile toplam nüfusu 5000’i geçen ilçeler belirlenip, COUNT komutu ile sayısı bulunabilir.