Veritabanı

Sizler için profesyonel yazarlarımız ile hazırladığımız makalelerimizi okuyun ve kendinizi geliştirin.

BÜYÜK VERİ NEDİR?
BÜYÜK VERİ NEDİR?
Günümüz dünyası içerisinde bilgi toplumların unsurlarını hayatın her noktasında insanların görüyor olması çok olası ve mümkün olan bir durum olarak karşımıza çıkmaktadır. Aynı zamanda pek çok insanın cebinde bir akıllı telefon yer almakta ve aynı zamanda pek çok insanın evinde bir adet bilgisayar yer almakta ve bütün şirketlerin aslında kapalı kapılar içerisinde yer almakta olan ofislerinde bilgi teknolojileri konusunun yönetimi gerçekleştirilmektedir. Pek tabi ki bu yönetimler, alakalı olan birimler tarafından gerçekleştirilir. Bilginin Görünürlüğü Bilgi teknolojisi üzerine çalışan sistemlerin ve bilgisayarların bulunması durumlarında her zaman bilginin kendisinin görünür olmadığını bilmemiz gerekiyor. Bu noktada söylemiş olduğumuz veriler ışığında insanların hayatına girmesinin ardından sadece elli sene sonra bilginin miktarı da kendisi kadar anlamlı ve özel bir nitelik kazanacak tarzda toplanmaya ve bu şekilde kullanılmaya başlanmıştır. Günümüz dünyasında sadece ama sadece bilginin miktarı artmamış, artan bilgi miktarına doğru orantılı olarak aynı zamanda bilgiye erişim hızı da artmıştır. Söz konusu olan bu nicelik değişiminin hemen ardından peşi sıra nitelik değişimi de gerçekleştirmiştir. Verilerin yani bilgilerin gerçekten anlam ifade edecek bir bütünlük içerisinde toplanma işlemi ilk olarak astronomi ve genetik alanında gerçekleştirilen çalışmalar ile meydana gelebilmiştir. Büyük veri olarak adlandırdığımız şey aslında hayatımızın bütün noktalarında kendisini göstermeyi başarmış olan bir durumdur. örnek olarak ise, internet arama motorlarını ve Google üzerinden insanların geçirmekte olukları hastalıkları ve bu hastalıkların teşhis ve tedavisi hakkında da bilgilere internet üzerinden ulaşılabilmektedir. Büyük Veri Ne Anlama Gelmektedir? Topluma açık yani toplumsal olan medya paylaşımları, fotoğraflar, videolar, bloglar, ağ günlükleri ve log dosyaları tarzında olan değişik kaynaklar üzerinden toplanabilme özelliği taşıyan bütün verilerin, anlamlı ve gerçekten mantıklı bir şekilde işlenilebilmesine ve aynı zamanda bunların dönüştürülmüş biçimine büyük veri adı verilmektedir. Büyük veri aslında sandığınızdan daha basit, ama aynı zamanda sandığınızdan daha karmaşık olan bir durumdur. bunun nedeni de aradığınız her bir şeyin bu büyük veri içerisinde bulunabilmesinden kaynaklanan bir durumdur.
Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent Connections)
Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent Connections)
Kalıcı bağlantılar betiğinizin çalışması bittiğinde kapanmayan bağlantılardır. Bir kalıcı bağlantı istendiğinde PHP evvelce açılmış eşdeğer bir kalıcı bağlantı var mı diye bakar ve varsa onu kullanır. Yoksa yeni bir bağlantı oluşturur. Bir 'eşdeğer' bağlantı, aynı konağa (uygulanabildiği takdirde) aynı kullanıcı adı ve parola kullanılarak açılmış bağlantıdır. HTTP sunucuları hakkında tam bilgi sahibi olmayan kişiler ne yaptıklarını bilmeden yükü yanlış kalıcı bağlantılara dağıtabilir ve bu yanlış bağlantılarla çalışabilirler. Özellikle, size aynı bağlantı üzerinde 'kullanıcı oturumları' açma olanağını, verimli hareket işlemleri kurulmasını ve başka birçok şeyi bir bütün halinde sağlamazlar. Aslında, son derece net olarak, kalıcı bağlantılar, kalıcı olmayan bağlantılarla mümkün olmayan işlevselliği size sağlayamazlar. Neden? Bu HTTP sunucusunun işi nasıl yaptığı ile ilgilidir. PHP'nin HTML sayfalarını üretmek için HTTP sunucusunu üç şekilde kullanabilir. İlk yöntem, PHP'yi bir CGI "sarmalayıcı" olarak kullanmaktır. Bu yolla, HTTP sunucusundan her PHP sayfası isteğinde PHP yorumlayıcısının yeni bir örneği oluşturulup yok edilir. Yorumlayıcı her istekten sonra yok edildiğinden kazanılan özkaynaklar da (bir SQL veritabanı bağlantısı gibi) kaybedilir. Bu durumda, kalıcı bağlantılar kullanarak da hiç bir şey kazanamazsınız; çünkü özkaynaklar kalıcı olmayacaktır. İkinci ve en çok kullanılan yöntem, PHP'yi çok süreçli bir sunucuda bir modül olarak çalıştırmaktır. Bu olanak şimdilik sadece Apache HTTP sunucusu ile mümkündür. Çok süreçli bir sunucu, işleri sayfaları sunmak olan bir çok (alt) süreci denetimi altında tutan bir ana sürece sahiptir. Bir istemciden bir istek geldiğinde, başka istemcilere hizmet sunmayan alt süreçlerden birini bu isteğe tahsis eder. Eğer aynı istemci ikinci bir istek yaparsa bu isteğe başka bir alt süreç yanıt verebilir. Kalıcı bir bağlantı açıldığında SQL hizmeti isteği yapılan her sayfa isteği SQL sunucuya tahsis edilen aynı bağlantıdan sunulur. Son yöntem, PHP'yi çok evreli bir sunucuda bir eklenti olarak kullanmaktır. PHP4 şimdilik, PHP'nin bir eklenti olarak kullanımına izin veren Netscape FastTrack (iPlanet), Microsoft's Internet Information Server (IIS) ve O'Reilly's WebSite Pro gibi çok evreli HTTP sunucularında ISAPI, WSAPI ve (Windows üzerinde) NSAPI için destek vermektedir. Davranış esas olarak ikinci yöntemde açıklanan çok süreçli yöntemle aynıdır. Kalıcı bağlantılar ek bir işlevselliğe sahip değilseler bunlar neden tercih ediliyorlar? Yanıtı oldukça basittir: Verimlilik. SQL sunucunuza bağlantı açmak çok masraflıysa kalıcı bağlantılar kurmak daha iyidir. Bu bedel gerçekte birçok sebebe bağlı olabileceği gibi olmayabilir de. Bu, veritabanının, HTTP sunucunun bulunduğu makinede olup olmamasından SQL sunucusunun makineye ne kadar yük bindirdiğine kadar geniş bir yelpazede değerlendirilebilir. Son değerlendirmede, eğer bu bedel yüksekse kalıcı bağlantıların büyük ölçüde yardımı olacaktır. SQL sunucuya yapılan her bağlantı isteğinde alt süreç sadece o sayfayı işleyeceği yerde, kalıcı bağlantı durumunda her alt sürecin ömrü boyunca bir bağlantı krmasına olanak tanınır. Yani, bir kalıcı bağlantı açmış her alt sürecin kendine ait bir kalıcı bağlantısı vardır. Örneğin, SQl sunucunuza kalıcı bağlantı açan betiğiniz 20 ayrı alt süreç çalıştırıyorsa alt süreç başına bir tane olmak 20 ayrı bağlantı var demektir. Ancak şuna dikkat edin, bağlantı sayısı sınırlı bir veritabanını bu sınırın üstünde kalıcı bağlantılarla kullanıyorsanız bunun bazı götürüleri olabilir. Eğer veritabanınız aynı anda 16 bağlantılık bir sınıra sahipse ve çok meşgul bir sunucu oturumunda 17 alt evre bağlantı açmaya çalışıyorsa biri bunu başaramayacaktır. Eğer betiğinizde (sonsuz döngü gibi durumlarda) bağlantıların kapatılmasına izin vermeyen hatalar varsa, veritabanı sadece 16 bağlantı ile hızla batağa saplanacaktır. Terkedilmiş ve boştaki bağlantıların devreye sokulması hakkında bilgi edinmek için veritabanınızın belgelerine bakınız. Uyarı Kalıcı bağlantıları kullanırken hesaba katmanız gereken bir çok yetersizlik vardır. Bunlardan biri, bir kalıcı bağlantı üzerinden tablo kilitlemesi yapıyorsanız ve betiğiniz herhangi bir şekilde kilidi serbest bırakamazsa aynı bağlantıyı kullanan sonraki betikler sonsuza kadar engellenebilir ve bunun sonucu olarak HTTP sunucunuzu veya veritabanı sunucunuzu yeniden başlatmak zorunda kalabilirsiniz. Bir diğer durumda, hareketleri (transaction) kullanırken, bir hareket bloğu tamamlanmadan betiğiniz çalışmasını bitirirse aynı bağlantıyı kullanan sonraki betiklerin işleri başlarından aşacaktır. Her durumda, tablolarınızın kilitlerini açmak ve hareketleri başa sarmak için register_shutdown_function() işlevini kullanarak bir temizlik işlevi tanımlayabilirsiniz. Daha da iyisi, tablo kilitleri veya hareket blokları kullanan betiklerde kalıcı bağlantıları kullanmayarak bu sorunlardan tamamiyle kurtulabilirsiniz. Özetle, kalıcı bağlantılar normal bağlantılarla bire bir eşleşecek şekilde tasarlanmışlardır. Yani, betiğinizin davranışını değiştirmeden kalıcı bağlantılar yerine her zaman kalıcı olmayan bağlantılar kullanabilirsiniz. Bu, muhtemelen betiğinizin verimliliğini etkileyecektir ama davranışında bir değişikliğe yol açmayacaktır! mysql_connect() ve mysql_pconnect() Analizi mysql_pconnect() is deprecated as of PHP 5.5.0, and will be removed in the future because it has several disadvantage. Major disadvantage is that mysql_close() didn't support connection created by mysql_pconnect(), connection remains open for future use. When we establish connection with mysql_pconnect() then it will search previous existing connection with same hostname, username and password.If old active connection found then it will not recreate new connection. In case of PHP most of the sites hosted with DB and PHP on same machine, so connection time is almost negligible, in that way persistant connection is useless. For Web-Request there is no need to make persistant connection, because HTTP is sateless protocol. Connection will automatically close when we refresh page, because it assumes every request as new request. Persistant connection need too much resource, that's why persistant connection is Highly Discouraged. Normally Temp Tables dropped when connection close, but persistant connection do not close so Temp tables are no more temporary.
Sql Komutları
Sql Komutları
Sql komutlarından DISTINCT, IN, NOT IN, IN(SELECT...), ANY, ALL, EXISTS, NOT EXISTS, UNION, EXCEPT, BETWEEN kullanımı DISTINCT Veritabanımızda oluşturduğumuz tablonun içinde birbirinin aynı veriler bulunabilir.Bu verilerden aynı olanların listeleme esnasında bir kez yazılması için Distinct sözcüğü kullanılır Örnek: 12 ATB sınıfında adı Burak olan öğrencilerden sıralamada ilk gelen gösterilir.  SELECT DISTINCT adFROM 12atb;   komutunu kullanınca aşağıdaki ekran gelir. IN “IN” İngilizce'de de olduğu gibi içinde anlamına gelmektedir.Veri tabanımızda sahip olduğumuz verilerden sadece istediklerimize IN sözcüğüyle ulaşabiliriz.ÖRNEK: 12 ATB sınıfında numarası 13,20,24 olan öğrenciler kimdir? SELECT *FROM 12atbWHERE no IN (13, 20, 24); NOT IN  NOT IN, IN deyiminin tam tersidir. Veri tabanımızda sahip olduğumuz verilerden istemediklerimizi NOT IN sözcüğüyle belirtiriz. ÖRNEK: 12 ATB sınıfında numarası 13,20,24 olmayan öğrenciler kimdir?  SELECT *FROM 12atbWHERE no NOT IN (13, 20, 24); BETWEEN İngilizde'de de olduğu gibi arasında anlamına gelir Veri tabanımızda belirttiğimiz aralıklarla ilişki kurulmasını sağlar.ÖRNEK: 12ATB sınıfında numarası 10 ile 25 arasında olan öğrencilerin soyadları?  SELECT *FROM 12atbWHERE no BETWEEN 10AND 25;  IN(SELECT...) IN SELECT komutunda içteki Select komutunun bulduğu sonuca IN komutunu uygulamamız için kullanılır.ÖRNEK: Kadıköyde’te oturan öğrencinin çalıştığı projelerin adlarını ve yerlerini listeleme.   SELECT proj_ad,yerFROM projeWHERE proj_no IN(SELECT proje_noFROM ogrenci,çalışmaWHERE sosy_g_no = per_s_g_noAND adres LIKE '%kadiköy%');   ANY İngilizce'de de herhangi biri anlamına gelen any komutu sql komutumuzda da herhangi biri anlamını taşır.ÖRNEK: Makine bölümünde çalışan ogrencinin her hangi birinden daha düşük not alan ve elektronik bölümündeki bulunan ogrencileri listele.Bu örnekte; makine bölümü kodu = 2 ve elektronik bölümü kodu = 1 alınmıştır.  SELECT * FROM ogrenciWHERE NOT < ANY(SELECT NOT FROM ogrenciWHERE böl_no = 2) AND böl_no =1;   ALL İngilizce'de de hepsi anlamına gelen ALL komutu sql komutumuzda da hepsi anlamını taşır.ÖRNEK: Elektronik bölümünde çalışan ve makine bölümündeki ogrencilerin hepsinden daha fazla not alan ogrencileri listele.Bu örnekte Makine bölümü kodu = 2 ve Elektronik bölümü kodu = 1 alınmıştır.  SELECT * FROM ogrenciWHERE NOT >ALL (SELECT NOTFROM ogrenciWHERE bolum_no = 1)AND bolum_no = 2; EXISTS Mevcut anlamına gelir. AND,OR,NOT operatörleri ile kullanılabilir.ÖRNEK: Mandalina satan pazarcılarla ilişkili tüm bilgileri listele.  SELECT *FROM pazarciWHERE EXISTS(SELECT *FROM mey_satWHERE sat_no = pazarci_nAND meyve =mandalina);   NOT EXISTS Mevcut değil anlamına gelir. AND,OR,NOT operatörleri ile kullanılabilir.  ÖRNEK: Mandalina satmayan pazarcılarla ilişkili tüm bilgileri listele.  SELECT *FROM pazarciWHERE NOT EXISTS(SELECT *FROM mey_satWHERE sat_no = pazarci_nAND meyve =mandalina); UNION İki ayrı SELECT komutunun sonucunda elde edilen tabloların birleşimi işlemini gerçekleştirir.ÖRNEK: Adı Sadullah ve Soyadı Abdurrahman olan kişi yada kişileri işletmenin yürüttüğü projelerde çalışan bir kişi (sıradan bir personel yada bölüm yöneticisi)olarak bulunduran projelerin isimlerini ve projelerin yürütüldüğü yerleri listele.  (SELECT proj_ad,yerFROM proj,bölüm,personelWHERE bl_no=bölüm_no ANDy_sos gno = sosy_g_noAND ad ='Sadullah' AND soyad ='Abdurrahman')UNION (SELECT proj_ad,yerFROM proje,çalışma,personelWHERE proj_no = proje_no ANDPer_s_g_no = sosy_g_no AND ad ='Sadullah'AND soyad ='Abdurrahman')   KOŞULLAR:UNION  ile birden fazla SELECT ’in sonucu olan tabloların küme birleşimi işlemine tabi tutulması için 2 koşul gereklidir.    1) SELECT komutları sonucunda elde edilecek tablolar aynı sayıda kolon içermelidirler.    2)Sonuç tabloları karşılıklı olarak kolonların aynı veri tipi ve aynı genişlikte olmalıdır. EXCEPT Birden fazla tabloda birinde olup diğerinde olmayan şeklindeki bağıntıları kurmamız için kullandığımız komuttur..ÖRNEK: Metal bölümündeki ogrenci adlarından,tesviye bölümünde bulunmayanları listele. SELECT * FROM(SELECT ad FROM ogrenciWHERE bol_no=1EXCEPTSELECT ad FROM ogrenciWHERE bol_no =2);
Sql Fonksıyonlar
Sql Fonksıyonlar
Sql fonksıyonlar, count, sum, avg, max, mın, lower, upper, length, round, mod, left, right, concat, if COUNT( ):Bir tabloda seçili olan alan içerisindeki değerleri saymak için COUNT deyimini kullanırız. Anket uygulamalarımızda, bir makale için yorum,hit sayısını belirtmede kullanabiliriz.  SELECT COUNT(evet)  AS bilgi FROM anket;  Uygulamamızda anket tablomuzda yer alan evet seçeneğini kullananların sayısını buluruz. Burada AS ifadesinide gördük. biraz açalım sorgumuzu. veritabanımızda yer alan anket tablosundan cevabı evet olanların değerini topladık ve AS komutu ile oluşturduğumuz bilgi değişkenine aktardık.   SUM( ) : Belirtilen kolondaki kayıtların değerlerinin Sayısal toplamını bulur.Örnek: SELECT SUM(basari) FROM notlar; Öğrencilerin başarı notlarının toplamını ekrana verecektir.   AVG :Belirlenen bir alan içerisindeki verilerin aritmetik ortalamasını alır.  SELECT AVG(kolon_adı) FROM tablo;  Örnek :Aylık ödenen ücret ortalamasını bulmak istersek ;  SELECT AVG(aylik_ucret) FROM ucretler;   MAX:Tabloda seçtiğimiz alanda en yüksek sayısal değeri almak için MAX komutunu kullanırız.  SELECT MAX(yas) FROM uyeler GROUP BY ad; sorgumuzda uyeler tablosunda yaşı en büyük olan üyelerimizi bulabiliriz.   GROUP BY Deyimini kullandık bu ise bulduğumuz değerleri adlarına göre grupladık.   MIN:MIN komutuda MAX komutunun tam tersi olarak seçtiğimiz alandaki en düşük sayısal değeri bulmamıza yarar.  SELECT MIN(yas) FROM uyeler GROUP BY kullanici_adi; sorgumuzda uyeler yablosunda yaşı en küçük olan üyelerimizi bulabiliriz. GROUP BY deyimi ile de değerlerimizi kullanıcı adına göre gruplarız.   LOWER( ):Belirli alan içindeki verileri küçük harfe çevirir.  SELECT LOWER('text');   UPPER( ): Text olarak belirtilen alanı büyük harfe çevirir. SELECT UPPER('text');   LENGTH: Yazıda boşluklar dahil, kaç karakter olduğunu verir.  lenght('ahmet mehmet veli') "Toplam Karakter"Toplam Karakter ... 17   ROUND:Belirlenen alandaki sayının virgülden sonraki kısmının yuvarlatılmasını sağlar.  ROUND(45.923,2) -->45.92   MOD: İki sayısal değerin bölümünden kalanı verir.  mod(13,5) 3
Veri Tabanlarında Anahtar Kavramı Birincil Ve Yabancı Anahtar (İkincil Anahtar) Kavramı
Veri Tabanlarında Anahtar Kavramı Birincil Ve Yabancı Anahtar (İkincil Anahtar) Kavramı
Veri tabanlarında anahtar kavramı birincil ve ikincil ve yabancı anahtar. Anahtarlar Bir anahtar bir tabloda özel bir sütundur. Bazı tuşları arama ve indeksleme için kullanılır, diğer ilgili tablolar veya benzersiz bir kayıt bağlantısı tanımlamak için kullanılır. Bir veritabanı tablosu bir birincil anahtar veya dizin olmadan kullanılamaz. Aşağıda veritabanlarında kullanılan anahtar türleri hakkında bilgiler bulabilirsininiz. Bu anahtarlar birincil anahtar, yabancı anahtar ve dizin olarak anlandırılırlar. Birincil Anahtar (Primary Key) Birincil anahtar amacı benzersiz bir tabloda her bir kayıtı ayrı ayrı belirlemektir. Genel olarak, birincil anahtar tek bir sütun üzerinde tanımlıdır ve iki sütun üzerinde tanımlı olması mümkün değildir. Üç temel kural birincil anahtarları tanımlayan özelliktir: *Her kayıtın birincil anahtarında bir değer olması gerekir. O boş olamaz.*Birincil anahtar değerleri benzersiz olmalıdır.*Birincil anahtar değerleri yenilenen olmamalıdır. Eğer yenileme olursa bir kayıt silindiğinde bu hata ve karışıklık yaratabilir, bu yüzden birincil anahtar başka bir kayıt yeniden atanınca yinelenen olmamalıdır. Yabancı (İkincil) Anahtar (Forein Key) Bir yabancı anahtar bir alanı (veya hedef olarak başvurulan bir tablodan) başka bir tabloda belirli bir anahtar yerine birincil anahtarı gösteren kolonlardır. Bu ilgili tabloları mantıklı bilgilerle ilişkilendiren bir yoludur. Örneğin, ürün tablosunda  başvuran birincil anahtar alanı üreticiler tablosunda bir yabancı anahtar içerir. Bu şekilde, her ürün - dış kilit noktaları ilişkili bir üreticisi var olur. Unutmayın ki yabancı anahtar genellikle benzersiz değidir ancak başvurulan alanı başvurulan tabloda (birincil anahtar) gösterir. Örneğin, CD çalar ve televizyon ACME şirketi tarafından üretilmektedir, bu nedenle her iki kayıtta aynı yabancı anahtar değeri ayarlanır. Yani üretici tablosundaki ACME değerine. Yukardaki şekilde tablolardaki primary ve forein keyler belirtilmişlerdir. PK ve FK olarak. Benzersiz anahtar (Uniquie Key) Benzersiz anahtar iki aynı değerleri sahip olmayan sütun olarak tanımlanır. Benzersiz anahtar sütunları boş değerler içeremez. Bir tablo içinde birden çok benzersiz anahtar veya benzersiz anahtarlar sütunu olabilir. Örneğin, üretici adı alanına önceki örnekten benzersiz bir anahtar tanımlamak isteyebilirsiniz. Bu şekilde, bu başvuru kullanıcıları ACME şirket için iki ayrı kayıt yaratmaz.
Veri Tabanlarında Anahtar Kavramı Birincil Ve İkincil Anahtar
Veri Tabanlarında Anahtar Kavramı Birincil Ve İkincil Anahtar
Veri tabanlarında anahtar kavramı birincil ve ikincil anahtar Anahtar (Key) Anahtar bir veya birden fazla alanın bir satır için niteleyici olarak girilmesi için tanımlanan özel bir çeşit zorlayıcıdır. Tekrarlamayacak bir anahtar alan tanımlandığında, bu anahtar alana birincil anahtar alan denir. Primary Key, Unique Key ve Foreign Key olmak üzere 3 çeşit anahtar vardır. Primary Key (Birincil Anahtar) : Bir tablodaki, her bir satırın yerine vekil olabilecek bir anahtar veridir. Tabloda bu alana ait bilginin tekrarlanmaması gerekir. Standart olarak bir tabloda verilerin, fiziksel hafıza üstünde de hangi alana göre dizileceğini de primary key belirler. Bu, bazen bir tek alan olabileceği gibi, bazen birden fazla alan da birleşerek bir birincil anahtar oluşturabilir. Örneğin programda personelin sicil numarası alanına göre aramalar yapılacaksa Primary key personelsicil numarası olmalıdır. Personelin ad ve soyadına göre aramalar yapılacaksa ad ve soyad alanları birleştirilerek iki alandan tek anahtar alan tanımlaması yapılır. Unique Key(Tekil Anahtar): Unique Key olarak tanımlanan alan için bir değer sadece bir kere girilebilir. Bir başka satıra daha aynı verinin girilmesine izin verilmez. Primary Key ’den farklı olarak Unique Key, NULL (boşluk) değerini alabilir. Örneğin programda her personele ait bir sicil numarası olacağı için bu alan Unique key olarak tanımlanabilir. Ama isim alanı birden fazla aynı isme sahip personel olabileceği için bir Unique key olarak tanımlanamaz. Ali isimli birden fazla personel olabileceği gibi. Foreign Key (Yabancı Anahtar) : İkincil anahtarın bir diğer adı yabancı anahtardır.  Bir tabloya girilebilecek değerleri başka bir tablonun belli bir alanında yer alabilecek veri grubu ile sınırlandırmaya ve en önemlisi de ilişkilendirmeye yarar. Yani hem veri tekrarının önüne geçmek, hem de daha sonradan yapılan güncellemelerde ilgili verilerin her yerde güncellenmesini sağlamaktır.  Örneğin, olmayan bir kitabın ödünç tablosuna eklenememesi ve ödünç tablosuna eklenen bir kitabın numarası aracılığıyla detay bilgilerine erişilmesi gibi. Burada Kitap.KitapNo birincil anahtar alan; Odunc.kitapNo ise yabancı anahtardır.
Veri Tabanında İlişki Türleri
Veri Tabanında İlişki Türleri
Veri Tabanı İlişki Türleri İlişkiler Nasıl Çalışır? İlişkiler  genellikle, her iki tablonun aynı adlı alanları olan, anahtar alanlardaki verilerin eşleştirilmesiyle çalışır.(Ortak alan isimleri farklıda olabilir.)  Çoğu durumda, bu eşleştirme alanları, bir tablodan her kayıt için benzersiz bir tanımlayıcı sunan Birincil Anahtar (PK) ve diğer tablodaki Yabancı Anahtar (FK) dır.  İlişki Türleri Bir-Çok İlişkisi Çok-Çok İlişkisi Bir-Bir İlişkisi 1)Bir-Çok İlişkisi (İlişkisel Veritabanı Tasarımı) İlişkisel Veri Tabanlarında en çok kullanılan ilişki türü, Bir–Çok İlişkisi’dir. Bir–Çok İlişkisinde, “A” Tablosundaki bir kayıt, “B” tablosunda pek ÇOK eşleşen kayda sahiptir. Ancak “B” Tablosundaki kayıt, “A” Tablosunda yalnızca BİR eşleşen kayda sahiptir. Örneğin; Bir Yazar, birden ÇOK kitap yazabilir. ancak her kitabın yalnızca BİR Yazarı vardır. Birden çoğa ilişkide bir tablodaki anahtar ilişkili olduğu tabloda birden çok kez olabilir. Şekille gösterelim:  Yukarıdaki şekilde bir karikatürcünün birden fazla karikatüre sahip olabileceğini çıkartabiliriz. Çünkü Karikatür tablosunda ilişkili olduğu tablonun anahtarı bulunuyor (Foreign Key). Bu ilişki türü en çok karşılaşılan ilişki türüdür. 2) Çok – Çok İlişkisi (İlişkisel Veritabanı Tasarımı) Çok–Çok İlişkisinde, “A” Tablosundaki bir kayıt, “B” tablosunda bulunan pek ÇOK kayıtla eşleşebilir. Ve “B” Tablosundaki bir kayıt, “A” Tablosunda bulunan pek ÇOK kayıtla eşleşebilir. Bu tür bir ilişki, birincil anahtarın birden fazla alanı içerdiği, birleşme tablosu olarak adlandırılan, A ve B Tablolarından gelen yabancı anahtarların yer aldığı üçüncü bir tablonun tanımlanması koşuluyla mümkündür. Çoktan çoğa ilişikiler karmaşıklığı nedeniyle veritabanında bir çok soruna neden oldur. Soruna neden temek olarak şudur Bir tablodaki anahtar ilişkili olduğu tabloda birden çok kez olabilirken karşıtı da doğrudur.Bu yüzden istenilen ilişkiselliği sağlamak için ilişkiyi birden çoğa indirgemek gerekir. Yani araya fazladan bir tablo koyarak karmaşıklıktan kurtulmuş oluruz. Örneğin; Bir futbolcu birden fazla takımda oynayabilirken aynı takım birden fazla oyuncu oynatabilir olduğunu varsayalım. Öncelikle Futbolcular ve Takımlar adında aşağıdaki şekildeki gibi iki tane tablo oluşturalım: Anahtarı ilişkisel olduğu tabloya Foreign Key ( Komşu Anahtar) ekleyerek çoktan çoğa ilişkiyi sağlamak düşünürseniz mümkün değil.Bu yüzden araya aşağıdaki gibi bir tablo ekleyelim:     Böylece hedefi tam 12'den vuracak şekilde ilişkisel veritabanı tasarımını yapmış olduk. Çoktan çoğa ilişkiyi birden çoğa indirgediğimiz için iki tane birden çoğa ilişki elde ettik yine bu sebepten iki tane FK (Foreign Key) ortaya çıktı. Dolayısıyla SQL sorgusu iki adet olacak. Birincisi bir futbolcunun oynadığı takımlar, ikicisi ise bir takımda oynayan futbolcular olacak. 3)Bir-Bir İlişkisi (İlişkisel Veritabanı Tasarımı) Bir-Bir İlişkisi'nde, Tablo A'da Tablo B'deki her kayıtla eşleşen yalnızca BİR kayıt ve Tablo B'de Tablo A'daki her kayıtla eşleşen sadece BİR kayıt olabilir. Bu şekilde ilişkili olan çoğu bilgi tek bir tabloda olacağından, bu tür ilişki yaygın değildir. Güvenlik nedenleriyle tablonun bir bölümünü yalıtmak veya ana tablonun yalnızca bir alt kümesiyle ilgili bilgileri saklamak üzere, birçok alan içeren bir tabloyu bölmek için Bir-Bir İlişkisi kullanabilirsiniz. Örneğin; Fon toplamak amacıyla oynanan bir futbol oyununa katılan Çalışanların bilgilerini izlemek için bir Tablo oluşturmak isteyebilirsiniz. Çalışanlar Tablosunda, Futbolcular Tablosundaki her futbolcuyla eşleşen bir kayıt vardır. Çalışanlar Tablosunda her Futbolcuyla eşleşen BİR kayıt vardır.  Bu değer kümesi, ÇalışanNo alanının ve Çalışanlar Tablosu-nun bir alt kümesidir. Kural basitir ; tablodaki anahtar ilişkili tabloda sadece bir tane olabilir. Yukarıdaki şekilde öğrenciler ve Liseler adında iki tablo var. Öğrencinin mezun olduğu lise bir tane olacağını düşünürsek şekildeki ilişki türü buna uygundur. Öğrenciler tablosundaki Mezun_Lise_Id alanı ile ilişkili tabloyla alakalı Lise_Id alanı eşleştirilerek ilişki sağlanmış olunuyor.
Sql Komutlarından View Oluşturma Ve Faydaları, Myadminde Gösterimi
Sql Komutlarından View Oluşturma Ve Faydaları, Myadminde Gösterimi
View Oluşturmanın YararlarıVeri güvenliği;Veri tabanı içinde bulunan tablolardaki bazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.Örneğin, personelin maaşlarının herkes tarafından listelenebilir olması mahsurlu olabilir. Bu durumda, Personel adlı temel (base) tablodan, persview adlı bir view oluşturulabilir.          CREATE VIEW persview          AS SELECT sicil,sos_g_no,ad,soyad,dog_tar,adres,cinsiyet,bol_no,yon_s_g_n          FROM Personel;   persview adlı view, herkesin kullanımına açık, Personel adlı temel (base) tablo ise, yetkili kişiler dışındakilere, erişilemez  hale getirilirse, maaşların herkes tarafından erişilebilir bilgi olması önlenmiş olur.      Bir view’den bilgi listelenmesi temel tablodan bilgi listelenmesinden farklı değildir.       SELECT *      FROM persview;   persview’den maaşlar hariç, tüm personel bilgileri listelenecektir. Bir temel tablodan bir view oluşturulurken, temel tablodaki aynı sütun (alan) isimlerini kullanmak zorunda değildir. Örneğin, Parça adlı ve par_no, par_ad, pr_no, fiyat ve ağırlık adlı sütun (alan) isimlerini içeren tablo kullanılarak oluşturulan parview içinde, par_no yerine parc_no, fiyat yerine fiy ve ağırlık yerine ağır isimleri kullanılmıştır:      CREATE VIEW      Parview(parc_no,fiy,ağır)      AS SELECT par_no,fiyat,ağırlık      FROM Parça;   Sorgulamanın daha basit hale gelmesiKarmaşık sorgulamalarda, bazı SELECT komutlarının sonuçları diğer SELECT komutlarınca kullanıldığında, sorgulamanın düzenlenmesinde yanlışlıklar yapma olasılığı artar.Karmaşık sorgulamalar, VIEW özelliği kullanılarak daha basit hale getirilebilir. Burada temel fikir şudur: Madem ki bir view, bir sorgulama sonucu elde edilen bilgiyi (tabloyu) isimlendirerek elde edilen bir virtüel tablodur; o halde karmaşık SELECT komutu içinde, sonucu kullanılacak başka bir SELECT komutu kullanmak yerine, bu sonucu bir view olarak isimlendirerek, view adını kullanmak. Bazı durumlarda ise, işletmenin veri tabanı uygulamasında çok sık olarak sorulan karmaşık soruları bir view yapısı içinde saklayarak, daha sonra aynı tip sorgulamalar için bu view yapısını kullanarak daha basit ifadeler kullanmakta olasıdır.Örnek: Satış bölümünde çalışan personelin herhangi birinden daha düşük maaş alan ve mühendislik bölümünde çalışan kişileri listelemek.            SELECT *            FROM Personel            WHERE maas<ANY(SELECT maas                             FROM Personel                              WHERE bol_no=2) AND            bol_no=1;         (Satış bölümü kodu 2 ve mühendislik bölümü kodu ise 1 kabul ediliyor.)Şimdi bu örneğin tablosu bir view olarak saklanırsa:      CREATE VIEW S1view      AS SELECT *      FROM Personel      WHERE maas<ANY(SELECT maas                        FROM Personel                         WHERE bol_no=2) AND      bol_no=1;   bundan sonra aynı tip sorgulama için sadece     SELECT *    FROM S1view;   yazmak yeterli olacaktır.Sadece view kullanılarak gerçekleşebilen sorgulamalarBir tablodan elde edilecek  bilgiler için, iki kademeli işlem gerektiren sorgulamalarda, ilk adımda bir view oluşturup ikinci adımda esas sorgulamayı bu view yardımı ile gerçekleştirmek, çoğu kez kaçınılmaz bir durumdur.Aşağıdaki örnek SQL ifadeleri bu konuda bir fikir verecektir:Örnek: Her bölümde, o bölümdeki ortalama maaştan daha yüksek maaş alanları listeleyiniz.Bu örnek için önce her bölümdeki ortalama maaşların bulunması gereklidir.      CREATE VIEW BOL_OR_VIEW(bol_no,ort,maas)      AS SELECT bol_no,AVG(maas)      FROM Personel      GROUP BY bol_no;  Daha sonra, yaratılan BOL_OR_VIEW yardımı ile (bu view, bölüm no’ları ve bölüm ortalama maaşlarını saklamaktadır) sorulan sorunun cevabı elde edilebilir:    SELECT *      FROM Personel      WHERE bol_no=BOL_OR_VIEW.bol_no      . AND.maas>ort_maas;    (Bu sorunun cevabını, şu ana kadar anlatılan diğer bilgilerle bulmaya çalışınız.)Veri bütünlüğünün sağlanmasıView oluşturma esnasında CHECK sözcüğünün kullanılması ile, o view’i oluştururken sağlanması gereken koşulların, daha sonra view içine veri ekleme ya da değişiklik işlemlerinde de ihmal edilmesi engellenmiş olur.      Örneğin aşağıdaki gibi bir VIEW oluşturulsun:       CREATE VIEW UST_PER_VIEW      AS SELECT FROM Personel      WHERE maas>25000000,      WITH CHECK OPTION;   Burada,maaşı 25000000’un üstünde olan personelden oluşan bir UST_PEVIEW adlı view oluşturulmuştur. Daha sonra bu view içine;      INSERT INTO UST_PER_VIEW      VALUES(27521,&#8217;27865427&#8217;,&#8217;Ayşe&#8217;     &#8216;Okan&#8217;,{01/05/62},&#8217;Cumh. Cad. 46-Taksim&#8217;,     .F.,13000000,1,&#8217;27651112&#8217;);  komutu ile maaşı 13000000 olan bir personel eklenmek istendiği zaman şu hata mesajı alınacaktır.     Error: not enough non-null values  Eğer CHECK opsiyonu kullanılmasaydı hata mesajı alınmadan bu veri view içine yüklenecekti. Bir tablo ya da view üzerinde veri ekleme, güncelleme ve silme işlemleri bir sonraki bölümde incelenecektir.