If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Verileri ilişkili tablolara ayırma

Şimdiye kadar aynı anda sadece tek bir tablo üzerinde çalışıp, bu tablodan ne kadar ilginç veriler toplayabileceğimizi gördük. Ama aslında, çoğu zaman, verilerimiz birden fazla tablo üzerine dağılmış olur, ve bu tablolar bir şekilde birbirleri ile "bağlantılı" olur.
Örneğin, diyelim ki öğrencilerin sınavlarında ne kadar iyi yaptıklarını kaydetmek için oluşturduğumuz bir tablomuz var ve bu tabloya, eğer ebeveynlere düşük notlar konusunda email atmamız gerekirse diye öğrencilerin emaillerini de ekliyoruz:
öğrenci_ismiöğrenci_e-postasıtestnot
Peter Rabbitpeter@rabbit.comBeslenme95
Alice Wonderlandalice@wonderland.comBeslenme92
Peter Rabbitpeter@rabbit.comKimya85
Alice Wonderlandalice@wonderland.comKimya95
Bununla beraber, öğrencilerin hangi kitapları okuduğunu kaydetmek için oluşturulan bir tablomuz da olabilir:
öğrenci_ismikitap_ismikitabın_yazarı
Peter RabbitThe Tale of Mrs. Tiggy-WinkleBeatrix Potter
Peter RabbitJabberwockyLewis Carroll
Alice WonderlandThe Hunting of the SnarkLewis Carroll
Alice WonderlandJabberwockyLewis Carroll
Ayrıca sadece öğrencilerin detaylı bilgileri için de bir tabloya sahip olabiliriz:
noöğrenci_ismiöğrenci_soyismiöğrenci_e-postasıphonedoğum günü
1PeterTavşanpeter@rabbit.com555-66662001-05-10
2AliceHarikalar Diyarıalice@wonderland.com555-44442001-04-02
Bu tablolar hakkında ne düşünüyorsunuz? Bu tabloları herhangi bir şekilde değiştirir miydiniz?
Bu tablolar hakkında farkına varılması gereken çok önemli bir nokta var: bu tablolar bize ilişkisel verileri gösteriyor, yani birbiri ile ilişkileri olan verileri. Bu tabloların her biri belirli bir öğrenci için verileri tanımlamaktadır, ve tabloları çoğu aynı verilerin kopyasıdır. Aynı veriler birden fazla tabloda çoğaltıldığında, ilginç sonuçlar ortaya çıkabilir.
Örneğin, bir öğrencinin epostası değişirse, ne olur? Hangi tabloları değiştirmemiz gerekir?
Öğrenci bilgi tablosunun değiştirmemiz gerekir, ama bu verileri sınıf tablosuna eklediğimiz için, bu öğrenciyle ilgili her bir satırı bulmamız, ve oradaki e-postayı da değiştirmemiz gerekir.
Belirli bir veri sütununun sadece bir yerde depolanması tercih edilir, böylece güncellememiz gereken daha az yer ve farklı yerlerde veri tutmanın daha az riski olur. Böyle yaparsak, verileri tablolar arasında ilişkilendirmenin bir yolunu bulmamız gerekir; buna sonra geleceğiz.
Diyelim ki, epostayı sınıf tablosundan çıkarmaya karar verdik, çünkü öğrenci detayları tablosunda tekrarlandığının farkına varıyoruz. Elimizde şu kalır:
öğrenci_ismitestnot
Peter RabbitBeslenme95
Alice WonderlandBeslenme92
Peter RabbitKimya85
Alice WonderlandKimya95
Her bir öğrencinin epostasını nasıl bulabiliriz? Öğrenci bilgi tablosunda, isimle eşleştirerek satırı bulabiliriz. Ya iki öğrencinin ismi aynıysa? (Bali'de her insanın isminin olası 4 isimden 1'i olduğunu biliyor muydunuz?) Öğrenciyi bulmak için isme güvenemeyiz, ve aslında bir tabloda bir şeyi benzersiz olarak tespit etmek için isim gibi bir şeye güvenmemeliyiz.
Böylece, yapabileceğiniz en iyi şey, student_name'i kaldırmak ve yerine student_id koymaktır, çünkü bu garantili eşsiz bir ayırt edicidir:
student_idtestnot
1Beslenme95
2Beslenme92
1Kimya85
2Kimya95
Aynı değişimi kitaplar tablomuza da yaparız, student_name yerine student_id kullanırız:
student_idkitap_ismikitabın_yazarı
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
1JabberwockyLewis Carroll
2The Hunting of the SnarkLewis Carroll
2JabberwockyLewis Carroll
Jabberwocky için başlık ve yazarın iki kere tekrarlandığına dikkat ettiniz mi? Bu, tablomuzu birden çok ilişkili tabloya bölmemizle ilgili başka bir uyarı işaretidir, böylece bir kitapla ilgili bir şey değiştiğinde birden fazla yeri güncellememiz gerekmez.
Sadece kitaplarla ilgili bir tablomuz olabilir:
nokitap_ismikitabın_yazarı
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
2JabberwockyLewis Carroll
3The Hunting of the SnarkLewis Carroll
O zaman, student_books tablomuz şöyle olur:
student_idbook_id
11
12
23
22
Bu tablonun her satıra tüm bilgiyi sıkıştırdığımız eski tablo kadar okunur olmadığını biliyorum. Ancak, tabloların insanlar için okunabilir olması için tasarlanmadını bilin- en iyi şekilde sürdürülebilir yoldan veri depolamak ve hata eğilimi en az şekilde tasarlanır. Birçok durumda, bilgiyi birden çok ilişkili tabloya ayırmak en iyi yol olabilir, böylece daha az tekrar eden veri ve güncellenecek daha az yer olur.
Birden çok ilişkili tablolara ayrılmış verilerle uğraşmak ve ihtiyacınız olduğunda, verileri geri getirmek için SQL'yi nasıl kullanacağınızı anlamak önemlidir. Bunu yapmak için "join" adında bir kavram kullanacağız ve size şimdi bunu göstereceğim.

Tartışmaya katılmak ister misiniz?

Henüz gönderi yok.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.