<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bilgisayar Kavramları &#187; Veri Tabanı (Database)</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/veri-tabani-database/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Normalleştirme (Normalisation, Normalizasyon)</title>
		<link>http://www.bilgisayarkavramlari.com/2012/01/17/normallestirme-normalisation-normalizasyon/</link>
		<comments>http://www.bilgisayarkavramlari.com/2012/01/17/normallestirme-normalisation-normalizasyon/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 17:15:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6142</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Bu yazının amacı, site üzerinde daha önceden anlatılmış olan birinci normal form (1NF), ikinci normal form (2NF) ve üçüncü normal form (3NF) konularını kapsayan bir örnek çözmektir. Genel olarak çok sayıda sınav sorusunda normalleştirme için hayali bazı tablolar sunulur ve bu tabloların normalleştirilmesi (normalizasyonu) istenir. Örnek olarak aşağıdaki tabloyu ele alalım. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, site üzerinde daha önceden anlatılmış olan <a href="http://www.bilgisayarkavramlari.com/2009/01/16/ilk-normal-sekil-first-normal-form-1nf/">birinci normal form (1NF),</a><br />
<a href="http://www.bilgisayarkavramlari.com/2009/01/16/ikinci-normal-sekil-second-normal-form-2nf/">ikinci normal form (2NF)</a> ve <a href="http://www.bilgisayarkavramlari.com/2009/03/05/ucuncu-normal-sekil-third-normal-form-3nf/">üçüncü normal form (3NF)</a> konularını kapsayan bir örnek çözmektir.</p>
<p>Genel olarak çok sayıda sınav sorusunda normalleştirme için hayali bazı tablolar sunulur ve bu tabloların normalleştirilmesi (normalizasyonu) istenir.</p>
<p>Örnek olarak aşağıdaki tabloyu ele alalım.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/011712_1716_Normalletir1.png" alt="" /></p>
<p>Yukarıdaki tabloda görüldüğü üzere 4 adet kolon ve her kolonda çeşitli sayılar ile gösterilmiş değerler bulunmaktadır. Bu tablonun üzerinde normalleştirme yapmaya başlamadan önce bazı konuları açıklayalım.</p>
<p>Örneğin yukarıdaki tabloda bir <a href="http://www.bilgisayarkavramlari.com/2009/01/16/aday-anahtar-candidate-key/">aday anahtar (candidate key)</a> bulmamız istense ne yaparız?</p>
<p>Bir aday anahtar bulma işlemi için en kolay yol, tablonun birincil anahtarını (primary key) bulmaktan geçer. O halde sorumuzu öncelikle tablonun birincil anahtarını (primary key) bulmak üzere değiştirelim:</p>
<p>Yukarıdaki tabloda, satır bazlı olarak tekrar etmeyen bir kolon var mıdır?</p>
<p>Cevap : D kolonudur. Dikkat edilirse D kolonu, her satırda farklı bir değer almıştır. Demek ki tek bir kolonun birincil anahtar (primary key) olmasını istersek, D kolonunu seçmemiz yerinde olur.</p>
<p>Peki birden fazla kolon alınması durumunda hangi kolonları seçebiliriz?</p>
<p>Cevap: D kolonunun zaten her satırda tekrarsız olduğunu (unique) biliyoruz. Dolayısıyla D kolonu ile birlikte hangi kolon alınırsa alınsın bu kolonlar da tekrarsız (unique) olacaktır.</p>
<p>Ancak acaba D kolonunu almadan bir asil anahtar ( primary key) bulunabilir mi?</p>
<p>Cevap: Evet vardır. Örneğin (A,B) ikilisi de tablodaki her satırda tek başına tekrarsız (unique) olma özelliğindedir. Bir önceki cevabımızdan çıkardığımız üzere, (A,B) ikilisi ile birlikte alınacak diğer bir kolon da (örneğin C ) bu durumda birincil anahtar (primary key) olma özelliğini taşıyacaktır.</p>
<p>Yukarıdaki cevapların doğru olmasına karşılık, birincil anahtar (primary key) seçimi yapılırken en az sayıda kolonu içeren alternatifin seçilmesi yerinde olur. Bu anlamda, yukarıdaki anahtar ihtimallerinin hepsi birer <a href="http://www.bilgisayarkavramlari.com/2009/01/16/aday-anahtar-candidate-key/">aday anahtar (candidate key</a>) olarak değerlendirilebilir ancak birincil anahtar olarak D kolonun tek başına seçilmesi yerinde olur.</p>
<p>Gelelim bir diğer soruya:</p>
<p>Yukarıdaki tabloya, aşağıdaki şekilde ilave bir kolon eklediğimizi düşünelim:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>D</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yeni tablomuzda bulunan fonksiyonel bağlılıkları (functional dependency) çıkarmaya çalışalım:</p>
<p>Öncelikle, biliyoruz ki D kolonu birincil anahtardır (primary key) dolayısıyla zaten D kolonu bütün kolonların fonksiyonel olarak bağımlı olduğu bir kolondur ve aşağıdaki satırların tamamı doğrudur:</p>
<p>D <span style="font-family: Wingdings;">à</span> A , D <span style="font-family: Wingdings;">à</span>B , D<span style="font-family: Wingdings;">à</span> C , D<span style="font-family: Wingdings;">à</span> E</p>
<p>Ayrıca bir dipnot olarak, her kolonun kendisine fonksiyonel bağlı olduğunu söyleyebiliriz (self functional dependency), dolayısıyla D<span style="font-family: Wingdings;">à</span>D ifadesi de doğrudur ancak bu ifade, genelde veritabanı normalleştirmesinde bir anlam ifade etmediğinden göz ardı edilir.</p>
<p>Gelelim diğer fonksiyonel bağımlılıklara. Tabloda ikili üçlü ve dörtlü fonksiyonel bağlılıklar bulunabilir. Örneğin yukarıdaki sorularda (A,B) çiftinin de bir aday anahtar olduğundan bahsetmiştik. Bu durumda (A,B) <span style="font-family: Wingdings;">à</span> C, (A,B) <span style="font-family: Wingdings;">à</span> D , (A,B) <span style="font-family: Wingdings;">à</span> E ifadeleri de doğru olacaktır. Hatta D ile birlikte herhangi bir kolonun alınması da doğrudur. Örneğin (C,D) <span style="font-family: Wingdings;">à</span> A, (C,D) <span style="font-family: Wingdings;">à</span> B , (C,D) <span style="font-family: Wingdings;">à</span> E ifadeleri de doğrudur. Benzer şekilde D bir aday anahtar, birden fazla kolon birleşimini de fonksiyonel olarak ifade eder. Örneğin D <span style="font-family: Wingdings;">à</span> (A,B,C) veya D<span style="font-family: Wingdings;">à</span> (B,C,E) veya (A,B) <span style="font-family: Wingdings;">à</span> (C,D,E) ifadelerinin tamamı da doğru kabul edilebilir.</p>
<p>Ancak acaba tek kolon seviyesinde başka fonksiyonel bağımlılık bulunabilir mi? Bu sorunun cevabı aslında bir kolon değişirken diğer bir kolonun değerlerinin bu değişimi yansıtıp yansıtmadığıdır.</p>
<p>Örneğin yukarıdaki tabloda, B ve E kolonları birlikte değişmektedir. Diğer bir deyişle B(1) <span style="font-family: Wingdings;">à</span> E(X) ve B(2)<span style="font-family: Wingdings;">à</span> E(Y) bağlantısı bulunmaktadır. Yani B tablosundaki 1 ile E tablosundaki X ve B tablosundaki 2 ile E tablosundaki Y arasında bir birliktelik söz konusudur.</p>
<p>Bu anlamda, B<span style="font-family: Wingdings;">à</span>E ve E<span style="font-family: Wingdings;">à</span>B ifadeleri doğrudur. Ancak konunun daha iyi anlaşılması için tabloda ufak bir oynama yapalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>D</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki yeni tabloda, B kolonunun son satırı 3 olarak değiştirilmiştir. Bu durumda acaba B<span style="font-family: Wingdings;">à</span>E ve E<span style="font-family: Wingdings;">à</span>B ifadelerinden bahsedilebilir mi?</p>
<p>Tablonun yeni halinde E&#8217;deki her değişim, B&#8217;de bir değişimle karşılandığı için B<span style="font-family: Wingdings;">à</span>E ibaresi doğrudur ancak ne yazık ki E<span style="font-family: Wingdings;">à</span>B ibaresi kullanılamaz çünkü E, B&#8217;deki değişimleri göstermek için yetersizdir.</p>
<p>Ayrıca yukarıdaki tabloda, C kolonu, bütün diğer kolonlara fonksiyonel olarak bağımlıdır. Bunun sebebi C kolonunun sabit olması ve dolayısıyla bütün kolonlar tarafından doğası gereği fonksiyonel bağımlılığının ifade edilmesinin mümkün olmasıdır.</p>
<p>Gelelim tablomuzu normalleştirmeye. Tablomuzda bulunan fonksiyonel bağımlılıkları normalleştirme aşamasında kullanacağız. Normalleştirme işleminin amacını kısaca tabloda tekrar eden veri bırakmamak (veya en aza indirmek) olduğunu söyleyebiliriz.</p>
<p>Yukarıdaki son halini almış tablomuzda, B<span style="font-family: Wingdings;">à</span>E bağımlılığının bulunması bize aşağıdaki durumu oluşturma imkanı sağlar:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 318px;" />
<col style="width: 318px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Görüldüğü üzere, B kolonu ve E kolonu ayrı bir tabloda tutularak, E kolonunun B kolonuna fonksiyonel bağımlılığından yararlanılmıştır. Bu durumda E kolonunun orjinal tabloda yer almasına gerek yoktur. A,B,C veya D kolonları ile birlikte karşılığı olan E kolonunu bir kişinin sorgulamak istemesi halinde, iki tablo arasında bir <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">birleştirme (join)</a> işlemi uygulanacak ve istenen veriye kolaylıkla ulaşılabilecektir. Bu durumda K tablosundaki B kolonu bir yabancı anahtar (foreign key) olmuş ve M tablosundaki B kolonu ise birincil anahtar (primary key) olmuştur denilebilir.</p>
<p>Gelelim C kolonuna. Bu kolon da herhangi bir kolona fonksiyonel bağımlı kabul edilebilir demiştik. O halde aşağıdaki şekilde bölünebilir:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 318px;" />
<col style="width: 318px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>C</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki gösterim doğru olmasına karşılık, aşağıdaki gösterim de doğrudur:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 198px;" />
<col style="width: 198px;" />
<col style="width: 198px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 56px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>C</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Tablo N</strong></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Veya diğer bir çözüm olarak aşağıdaki çözüm de doğrudur:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 198px;" />
<col style="width: 198px;" />
<col style="width: 198px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 47px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>E</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">Y</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">X</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo M</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 56px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>E</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>C</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">X</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">Y</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">1</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Tablo P</strong></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki bütün çözümler doğrudur. Görüldüğü üzere, normalleştirme işleminde, tekrar eden satırlar elenmiş ve mümkün olduğunca tekrarsız satırların bırakılması amaçlanmıştır.</p>
<p>Burada bir soru, D<span style="font-family: Wingdings;">à</span>A özelliğini neden kullanmadık şeklinde sorulabilir. Yani D kolonu zaten A kolonunu veya B kolonunu belirlemektedir, o halde bu özelliği de kullanarak bir bölme işlemine daha gidilebilir mi?</p>
<p>Cevabı hem evet hem de hayırdır. Teorik olarak bahsedildiği gibi bir bölme olabilir. Ancak bu bölmenin hiçbir faydası olmaz. Aşağıda göstermeye çalışalım:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 198px;" />
<col style="width: 198px;" /></colgroup>
<tbody valign="top">
<tr style="height: 136px;">
<td style="padding-left: 7px; padding-right: 7px;">&nbsp;</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 56px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>A</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo K</td>
<td style="padding-left: 7px; padding-right: 7px;">
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 57px;" />
<col style="width: 57px;" /></colgroup>
<tbody valign="top">
<tr style="background: #8064a2;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;"><span style="color: white;"><strong>B</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid #9f8ab9 1.0pt; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;"><span style="color: white;"><strong>D</strong></span></td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">3</td>
</tr>
<tr style="background: #dfd8e8;">
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">4</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid #9f8ab9 1.0pt; border-bottom: solid #9f8ab9 1.0pt; border-right: none;">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid #9f8ab9 1.0pt; border-right: solid #9f8ab9 1.0pt;">5</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Tablo Q</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Bir önceki şekilde bulunan tablo K&#8217;yı tablo K ve tablo Q olarak bölmeye çalıştım. Görüldüğü üzere herhangi bir satır sayısında azalma olmamıştır. Bu tip birincil anahtar kullanarak bölme işlemleri mümkün olmakla birlikte genelde normalleştirme anlamında bir fayda sağlamaz. Bu şekilde böldükten sonra, iki tablo arasında (örneğimizdeki tablo K ve Q ) <a href="http://www.bilgisayarkavramlari.com/2008/11/25/sayisallik-cardinality/">sayısallık açısından (cardinality)</a> birebir (one-to-one) ilişki kurulmaktadır ki teorik olarak iki tablo arasında birebir ilişki varsa aslında bu iki tablo, bir tablonun ikiye bölünmüş halidir denilebilir. Genelde birebir ilişki, veritabanında hız amacıyla kullanlan (bazı kolonlara istatistiksel olarak çok nadir erişim yapıldığı biliniyorsa) veya veritabanı kısıtlarından dolayı kullanılan (örneğin veri tabanımızın tablo başına sadece 10 kolon tutmaya izin verdiği durumda 15 kolonlu bir tablo oluşturmak için) bir özelliktir.</p>
<p>&nbsp;</p>

<p class="sayac_bilgi">99 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2012/01/17/normallestirme-normalisation-normalizasyon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Büyük Tablo (Big Table)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/20/buyuk-tablo-big-table/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/20/buyuk-tablo-big-table/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 19:40:13 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Tabanı (Database)]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6072</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Google tarafından geliştirilen ve arama motoru tasarımında kullanılan yaklaşımdır. Kısaca amaç, web sayfalarının daha başarılı bir şekilde depolanması (storing), bulunması (finding) ve güncellenmesidir (updating) . Google&#8217;ın konuya yaklaşımı, ucuz bilgisayarlar tarafından yüksek miktarda verinin tutulması ve işlenmesi yönündedir. Bu yaklaşımın genel bir görüntüsü aşağıdaki şekilde çizilebilir: Yukarıdaki şekilde görüldüğü üzere, bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>Google tarafından geliştirilen ve arama motoru tasarımında kullanılan yaklaşımdır. Kısaca amaç, web sayfalarının daha başarılı bir şekilde depolanması (storing), bulunması (finding) ve güncellenmesidir (updating) .</p>
<p>Google&#8217;ın konuya yaklaşımı, ucuz bilgisayarlar tarafından yüksek miktarda verinin tutulması ve işlenmesi yönündedir. Bu yaklaşımın genel bir görüntüsü aşağıdaki şekilde çizilebilir:</p>
<p><img title="buyuktablo.png" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/buyuktablo.png" alt="Buyuktablo" width="350" height="324" border="0" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere, bir büyük mantıksal tablo, çok sayıda küçük tabletlere bölünmüştür. Diğer bir deyişle, aslında tek bir bilgisayarda işlenecek olan mantıksal tablo, çok sayıda ufak ve nispeten daha ucuz bilgisayar tarafından işlenebilmekte / tutulabilmektedir.</p>
<p>Büyük tablo yaklaşımında, veriler aşağıdaki şekilde tutulmaktadır:</p>
<table border="1">
<tbody>
<tr>
<td>Örnek Site</td>
<td>Site Metni</td>
<td>çıpa (anchor) 1</td>
<td>çıpa (anchor)2</td>
<td>Başlık (title)</td>
</tr>
<tr>
<td>www.bilgisayarkavramlari.com</td>
<td>Sitedeki metin</td>
<td>www.sadievrenseker.com</td>
<td>www.shedai.net</td>
<td>bilgisayar mühendisliği</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki tabloda gösterildiği üzere, herhangi bir büyük tablo kayıdında, sitenin adresi, sitenin metin kısmı, sitede bulunan bağlantılar (link, anchor, çıpa) vey sitenin başlığı tutulmaktadır.</p>
<p>Büyük tablo (big table) yaklaşımında, herhangi bir veriye erişmek için, erişilecek olan hücrenin, zaman bilgisi, satır bilgisi ve kolon bilgisine ihtiyaç duyulur. Örneğin yukarıdaki örnek sitenin fihristlendiği (indexing) zaman, sitenin adresi ve hangi bilgisine erişileceği (örneğin sitenin içeriği olan metin) bilgileri birleştirilerek bir erişim sağlanabilir.</p>
<p>Büyük tablo kullanımının avantajları aşağıdaki şekilde sıralanabilir.</p>
<ul>
<li>Özel bir sorgulama diline (query language) ihtiyaç duyulmaz ve dolayısıyla sorgulama dilinin iyileştirilmesi (query optimisation) gibi özel adımlara gerek yoktur.</li>
<li>Sadece satır seviyesinde işlemler gerçekleştirilir. Yani ilişkisel veritabanı (relational database) tasarımında olduğu üzere, <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">tablolar arasında birleştirme (join)</a>gibi işlemlere gerek yoktur.</li>
<li>Tabletler, bütün büyük tablo (big table) sisteminde bulunan sunucular tarafından erişilebilir durumda tutulurlar.</li>
<li>Ayrıca yapılan her işlem ilave bir işlem kütüğünde (transaction log) tutulur ve bu kütüğe bütün sunucular erişebilir.</li>
<li>Sunuculardan birisinin bozulması durumunda, diğer sunuculardan birisi bu işlem kütüğüne erişerek bozulan sunucunun görevini üstlenebilir.</li>
</ul>
<p>Büyük tablonun en önemli avantajlarından birisi, satır bazında bir limitinin olmamasıdır. Yani her kayıt için sınırsız sayıda bağlantı tutulması gerekebilir. Önceden bir sayı belirlenmesi, iki yönlü olarak probleme sebep olabilirdi. Örneğin her sayfa başına 100 bağlantı tutma limiti gelmiş olsaydı, daha az olan sayfalar için gereksiz yere hafızada yer işgal edilecek, daha fazla olan sayfalar için de bağlantıların sadece ilk 100 tanesinin tutulup, geri kalanının tutulamaması gibi bir durum ortaya çıkacaktı.</p>
<p>Bu yaklaşımla, ayrıca disk erişimi de azaltılmış olur çünkü bir erişimde, site ile ilgili bütün bilgilerin okunması mümkündür. Alternatif olarak ilişkisel bir veritabanı kullanılması durumunda, site ile ilgili bilgilerin okunması ancak bütün tablolara erişildikten sonra mümkün olacaktı.</p>
<p>Elbette büyük tablo yaklaşımının karşılaştığı problemler de bulunur. Örneğin, aynı kaydın birden fazla kere geçmesi bir risktir. Örneğin aynı içeriğin internet üzerinde içerik hırsızları tarafından kopyalanması, aynı içeriğin bir kısmının aynı kaldığı yeni sürümlerinin çıkması, intihal olarak çalıntı içeriğin bulunması, çoklu gönderiler (spam, mass message) ile aynı içeriğin birden fazla divan (forum ) ve tartışma sitelerinde bulunması veya kopya siteler bu tip içerik tekrarlarının başlıca sebepleridir. Yapılan çalışmalarda, geniş kapsamlı bir <a href="http://www.bilgisayarkavramlari.com/2008/12/09/web-emeklemesi-web-crawling/">web emeklemesi (web crawling)</a> sonucu, dolaşılan sayfaların %30&#8242;luk bir bölümü, geri kalan %70&#8242;lik bölüm içerisinde tam veya benzer içerikte kopyalar bulundurmaktadır (diğer bir deyişle sadece %40&#8242;lık bir kesimin benzeri veya tam kopyası bulunmamakta %60&#8242;lık kesim ise benzer veya tam kopya olarak internette bulunmaktadır. Bu problemin çözümü için tekrarların bulunması gerekir (duplicate detection).</p>
<p>Tekrar bulma işlemi iki seviyede yapılabilir. Birincisi tam tekrarın bulunmasıdır ki buradaki amaç, birebir kopyalanan içerikleri eşleştirmektir. Diğer bir yaklaşım ise benzerliklerin bulunması ve belirli bir benzerlik seviyesinin üzerinde olan içeriklerin eşleştirilmesidir. Örneğin şu anda yazmakta olduğum yazıyı, kopyalayarak, yazar kısmına kendi ismini yazan birisi ile bu sayfadaki içeriğin eşleşmesi gerekir. Sonuçta birebir aynı değildir ama çok yakın içeriktedirler ve iki sayfa için ayrı ayrı sunucuda kaynak kullanılması problem oluşturabilir.</p>
<p>Tam benzerliğin bulunması için toplam kontrolü (checksum) yöntemleri kullanılır. Örneğin <a href="http://www.bilgisayarkavramlari.com/2008/01/12/crc-cyclic-redundancy-check-cevrimsel-fazlalik-sinamasi/">CRC (cyclic redundancy check)</a> ve benzer algoritmalar ile sayfaların toplam kontrolü yapılır ve eşleştirilir.</p>
<p>Benzer sitelerin bulunması için de geliştirilmiş algoritmalar vardır. Örneğin <a href="http://www.bilgisayarkavramlari.com/2011/11/19/simhash-benzerlik-ozeti/">SimHash algoritması (benzerlik özeti)</a> bu algoritmalara bir örnektir ve google tarafından da kullanılmaktadır.</p>

<p class="sayac_bilgi">269 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/20/buyuk-tablo-big-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İç / Dış Birleştirme (Inner / Outer Anti Semi Join)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/11/24/ic-dis-birlestirme-inner-outer-join/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/11/24/ic-dis-birlestirme-inner-outer-join/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 12:53:24 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/11/24/ic-dis-birlestirme-inner-outer-join/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde özellikle veri tabanı (databases) konusunda geçen bu kavramlar, iki tablonun birleşmesi sırasında bir tabloda bulunmayan kayıtlar için nasıl bir yol izleneceğini anlatırlar. Bilindiği üzere iki tablonun birleşmesi (join) aslında iki tabloda bulunan kayıtlar için bir kartezyen çarpım (cartesian product) alınması işlemidir. Bir işlemin sadece Kartezyen çarpımının alınması ile [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde özellikle veri tabanı (databases) konusunda geçen bu kavramlar, iki tablonun birleşmesi sırasında bir tabloda bulunmayan kayıtlar için nasıl bir yol izleneceğini anlatırlar.</p>
<p>Bilindiği üzere <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">iki tablonun birleşmesi (join)</a> aslında iki tabloda bulunan kayıtlar için bir <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">kartezyen çarpım (cartesian product)</a> alınması işlemidir. Bir işlemin sadece Kartezyen çarpımının alınması ile birleşmesine çapraz birleştirme (cross join) ismi verilir. Bu işlem sırasında herhangi bir koşul bulunursa bu tip birleştirmelere de şartlı birleştirme (koşullu birleştirme, conditional join) ismi verilir. Şayet iki tabloda da bulunan ve tercihen bir tabloda birincil anahtar (primary key) olup diğer tabloda yabancı anahtar (foreign key) olan bir kolonun eşitliği birleşme sırasında koşul olarak veriliyorsa bu tip birleşmelere de eşit birleşme (equijoin veya doğal birleşme, natural join) ismi verilir.</p>
<p>İç birleştirme (inner join) veya dış birleştirme (outer join) işlemi ise bu birleştirme koşulunun üzerinde, iki taraf için taşıyıp taşımamasına göre belirlenir.</p>
<p>Şayet iki tabloda da aynı koşulun sağlanması isteniyorsa bu <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">tip birleştirmelere (join)</a> iç birleştirme (inner join) ismi verilir.</p>
<p>Şayet iki tablodan birisinin koşulu sağlanması isteniyorsa bu tip birleştirmelere de dış birleştirme (outer join) ismi verilir.</p>
<p>Birleştirme işlemi sırasında, işlemin (operator) sol veya sağ tarafının koşulu sağlamasına göre, birleştirme işlemine sol dış birleştirme (left outer join) veya sağ dış birleştirme (right outer join) ismi verilebilir.</p>
<p>Yukarıdaki bu tanımları örnekler üzerinden anlamaya çalışalım.</p>
<p>Örneğin birleştirme (join) yapmak istediğimiz iki tablo aşağıdaki şekilde verilmiş olsun:</p>
<p>Çalışanlar Tablosu:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 66px;"></col>
<col style="width: 65px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><strong>Çalışan</strong></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><strong>KısımNo</strong></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ali</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veli</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ahmet</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ayşe</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Fatma</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ömer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
</tr>
</tbody>
</table>
</div>
<p>İki kolonlu bu tabloda her çalışanın hangi kısımda çalıştığını kısım tablosunun birincil anahtarı olarak tutuyor olsun. Dolayısıyla yukarıdaki çalışan tablosunda bulunan kısım kolonu bir yabancı anahtar (foreign key) olmuş olur.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 66px;"></col>
<col style="width: 88px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><strong>KısımNo</strong></td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt"><strong>Kısım</strong></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Müdüriyet</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Finans</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki iki tablonun iç birleştirmesinin sonucu (iner join) aşağıda verilmiştir:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 118px;"></col>
<col style="width: 125px;"></col>
<col style="width: 110px;"></col>
<col style="width: 97px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.Çalışan</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.KısımNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.KısınNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.Kısım</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ali</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Müdüriyet</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veli</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ahmet</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ayşe</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Fatma</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki birleşim sonucunda örneğin finans kısmı ile ilgili veya Ömer için bir satır bulunmamaktadır, çünkü ancak iki tabloda ortak olan satırlar alınmıştır.</p>
<p>İç birleştirme genelde SQL dillerinde herhangi bir şey belirtilmediğinde yapılan birleştirme şeklidir. Örneğin yukarıdaki tablolar için aşağıdaki SQL satırı yazıldığında iç birleştirme kastedilmiş olur:</p>
<pre>Select * from çalışanlar , kısımlar</pre>
<pre>		<span style="color:red">where</span> çalışanlar.KısımNo <span style="color:red">=</span> kısımlar.KısımNo;</pre>
<p>Yukarıdaki satırı bazı SQL dillerinde özel olarak inner join ibaresi ile belirlemek gerekebilir. Bu durumda yukarıdaki SQL cümlesini aşağıdaki şekilde değiştirebiliriz:</p>
<pre>Select * from çalışanlar , kısımlar</pre>
<pre>		<span style="color:red">inner join</span> ksımlar</pre>
<pre>		<span style="color:#17365d">on</span>  çalışanlar.KısımNo<span style="color:red">=</span> kısımlar.KısımNo;</pre>
<p>Yukarıdaki birleştirme işlemi ayrıca yabancı /birincil (foreign / primary key) anahtar eşitliği olduğu için bir eşit birleştirme (equi join) olarak da kabul edilebilir. Eşit birleştirmelere özel olarak SQL dilinde &#8220;using&#8221; komutu kullanılabilir. Yukarıdaki SQL cümlesini &#8220;using&#8221; komutu ile yazacak olursak:</p>
<pre>Select * from çalışanlar , kısımlar</pre>
<pre>		<span style="color:red">INNER JOIN</span> ksımlar</pre>
<pre>		<span style="color:#17365d">using</span> (KısımNo);</pre>
<p>Eşit birleştirmenin özel bir hali olan doğal birleştirmede (natural join) ise, eşitliği aranan kolonların isimlerinin birebir aynı olması gerekir. Yukarıdaki örnekte iki tabloda da KısımNo isimli kolonlar eşit olacağı ve iki tabloda da aynı isme sahip olduğu için doğal birleştirme yapılabilir. Şayet tablolardaki kolonlar aynı amaçla aynı bilgileri tutan fakat farklı isimlere sahip olsaydı doğal birleştirme işlemi yapılamazdı.</p>
<pre>Select * from çalışanlar</pre>
<pre>		<span style="color:red">natural join</span> ksımlar</pre>
<p>Doğal birleştirme sırasında, yukarıda görüldüğü üzere &#8220;natural join&#8221; kelimesi kullanılabilir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Buraya kadar olan birleştirme şekilleri sonuçta birer iç birleştirmedir ve sonuçların hepsinde yukarıdaki örnek tablo gösterilecektir. Dış birleştirme durumunda ise aşağıdaki sonuç çıkacaktır:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 118px;"></col>
<col style="width: 125px;"></col>
<col style="width: 110px;"></col>
<col style="width: 97px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.Çalışan</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.KısımNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.KısınNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.Kısım</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ali</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Müdüriyet</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veli</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ahmet</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ayşe</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Fatma</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ömer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Finans</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki tabloda dikkat edilirse, karşılığı olmayan değerler de alınmıştır. Yani Ömer isimli çalışanın, hangi kısımda çalıştığı bilinmemektedir veya Finans kısmında çalışan kimse yoktur ama yine de bu bilgiler karşılığı null (boş) da olsa alınmıştır. Bu birleştirme tipine tam dış birleştirme anlamına gelen full outer join ismi de verilir ve bazı SQL dillerinde bu komut olarak kullanılır.</p>
<p>Sol dış birleştirme (left outer join) için birleştirme sırasındaki tablolardan solda olanı esas kabul edilerek, bu tablodaki bütün değerler karşılığı olsun olmasın yazılır. Buna karşılık soldaki tabloda karşılığı bulunmayan satırlar yazılmaz. Örneğin aşağıdaki SQL cümlesini ele alalım:</p>
<pre>Select * from çalışanlar , kısımlar</pre>
<pre>		<span style="color:red">Left OUTER join</span> ksımlar</pre>
<pre>		<span style="color:#17365d">on</span>  çalışanlar.KısımNo<span style="color:red">=</span> kısımlar.KısımNo;</pre>
<p>Yukarıdaki cümlenin çıktısı aşağıdaki şekildedir:</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 118px;"></col>
<col style="width: 125px;"></col>
<col style="width: 110px;"></col>
<col style="width: 97px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.Çalışan</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.KısımNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.KısınNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.Kısım</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ali</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Müdüriyet</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veli</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ahmet</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ayşe</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Fatma</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ömer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">5</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
</tr>
</tbody>
</table>
</div>
<p>Görüldüğü üzere normal bir dış birleştirmede olması beklenen finans departmanı, sol dış birleştirme sonucunda çıkmamıştır. Şayet cümlemizi aşağıdaki şekilde değiştirecek olursak:</p>
<pre>Select * from çalışanlar , kısımlar</pre>
<pre>		<span style="color:red">LEFT outer join</span> ksımlar</pre>
<pre>		<span style="color:#17365d">on</span> kısımlar.KısımNo <span style="color:red">=</span> çalışanlar.KısımNo;</pre>
<p>Bu durumda da finans kısmı solda olan tabloda olduğu için yazılacak ancak Ömer isimli çalışan sağdaki tabloda olduğu için sonuçta görülmeyecektir.</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width: 118px;"></col>
<col style="width: 125px;"></col>
<col style="width: 110px;"></col>
<col style="width: 97px;"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.Çalışan</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Çalışanlar.KısımNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.KısınNo</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Kısımlar.Kısım</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ali</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">1</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Müdüriyet</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Veli</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ahmet</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">2</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Mühendislik</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Ayşe</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Fatma</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">3</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Satış</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Null</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">4</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt">Finans</td>
</tr>
</tbody>
</table>
</div>
<p>Yukarıdaki şekilde sol dış birleştirmede, tabloların yerini değiştirmek yerine, sağ dış bağlantı (right outer join) yapılması da mümkündür. Yani şayet tabloların yerini değiştirmek yerine aradaki birleştirme tipini aşağıdaki şekilde değiştirirsek:</p>
<pre>Select * from çalışanlar , kısımlar</pre>
<pre>		<span style="color:red">Right outer join</span> ksımlar</pre>
<pre>		<span style="color:#17365d">on</span>  çalışanlar.KısımNo<span style="color:red">=</span> kısımlar.KısımNo;</pre>
<p>Sonuç yine yukarıda görülen son tablo şeklinde olacaktır.</p>
<p><strong>Anti Join (Zıt Birleştirme)</strong></p>
<p>SQL dilinde kullanılan bir birleştirme tipi de zıt birleştirme&#8217;dir (antijoin). Bu tip birleştirmelerde amaç iki küme arasında zıtlık (anti) ilişkisi kurmaktır. SQL dilinde bulunan NOT IN ve NOT EXISTS kelimeleri ile, sorgulanan bilginin, verilen bir kümede olmaması şartı aranır.</p>
<pre><code>SELECT   k.kısım
    FROM kısımlar k
   WHERE <span style="color: #ff0000;">NOT EXISTS</span> <span style="color: #0000ff;">(SELECT NULL
                       FROM çalışanlar ç
                      WHERE ç.kısımNo = k.kısımNo)</span>
</code></pre>
<p>Yukarıdaki sorgu cümlesindeki amaç, çalışanı olmayan departmanları bulmaktır.  Görüldüğü üzere iç içe iki sorgu bulunmaktadır.  Mavi renkle gösterilen iç sorguda, dıştaki sorgu ile bağlantı kurulmaya çalışılmıştır. Burada önemli olan iki küme arasında içermeme ilişkisi kurulmasıdır. Yukarıdaki sorgunun çıktısı aşağıdaki şekildedir.</p>
<table style="border-collapse: collapse;" border="0">
<tbody>
<tr>
<td style="border: 0.5pt solid black; padding-left: 7px; padding-right: 7px;">k.kısım</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: medium 0.5pt 0.5pt none solid solid -moz-use-text-color black black;">Finans</td>
</tr>
</tbody>
</table>
<p>Görüldüğü üzere çalışanı bulunmayan tek kısım olan Finans, sonuç kümesinde görülmektedir.</p>
<p>Zıt birleştirme (anti join) işlemleri aslında iki küme arasında <a href="http://www.bilgisayarkavramlari.com/2009/06/24/kume-teorisi-set-theory/">fark almaya (set difference) </a>benzetilebilir. Örneğin yukarıdaki sorgu cümlesi, aşağıdaki şekilde de yazılabilir:</p>
<pre><code>SELECT  k.kısım
    FROM kısımlar k
<span style="color: #ff0000;">MINUS</span>
<span style="color: #0000ff;">SELECT   k.kısım
    FROM kısımlar k, çalışanlar ç
   WHERE k.kısımNo = ç.kısımNo</span>
</code></pre>
<p>Yukarıdaki yeni sorgunun, bir önceki sorgudan anlam olarak bir farkı yoktur. Mavi renkle gösterilen sorgunun sonucu, ilk sorgudan çıkarılmıştır (minus). İlk sorguda (siyah renkli olan) bütün kısımlar sorgulanmakta ve sonuç kümesinden, çalışanı olan kısımlar çıkarılmaktadır ( mavi sorgu). Bu işlemi, <a href="http://www.bilgisayarkavramlari.com/2009/01/14/ilikisel-cebir-relational-algebra/">ilişkisel cebirdeki (Relational Algebra)</a> , <a href="http://www.bilgisayarkavramlari.com/2009/01/14/fark-islemi-difference-operator/">fark işlemi (difference)</a> olarak düşünebiliriz.</p>
<p><strong>Semi Joins (Yarı Birleştirmeler)</strong></p>
<p>SQL cümleleri hazırlanırken kullanılan bir birleştirm türü de yarı birleştirmelerdir (semijoins). Bu birleştirme tipleri, bir önceki bölümde anlattığımız zıt birleştirmelerin tersi olarak düşünülebilir. Yani zıt birleştirmelerde kullanılan NOT IN veya NOT EXISTS kelimelerinin tam tersi anlamdaki IN veya EXISTS kelimeleri, yarı birleştirmelerin (semi joins) yazılmasını sağlar.</p>
<p>Örneğin, yukarıdaki zıt birleştirme (ters birleştirme) işleminin tersi anlama gelen ve çalışanı bulunan kısımları görmeyi amaçlayan aşağıdaki sorguyu ele alalım:</p>
<pre><code>SELECT   k.kısım
    FROM kısım k
   WHERE <span style="color: #ff0000;">EXISTS</span> (<span style="color: #0000ff;">SELECT NULL
                   FROM çalışanlar ç
                  WHERE ç.kısımNo = k.kısımNo)</span>
</code></pre>
<p>Yukarıdaki sorguda, mavi renkle gösterilen ikinci sorgu, çalışanlar ile kısımlar arasında bağlantı kurmakta, dışarıdaki sorgu ise bütün kısımları sorgulamaktadır. Bütün kısımlardan çalışanları olan kısımları sorgulamak için &#8220;exists&#8221; kelimesi kullanılmıştır.</p>

<p class="sayac_bilgi">295 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/11/24/ic-dis-birlestirme-inner-outer-join/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLEDB</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/07/oledb/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/07/oledb/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 17:47:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3443</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER İngilizce olarak object linking and embedding database kelimelerinin baş harflerinden oluşan bir veritabanı terimidir. Aslında OLE terimi (object linking and embedding) Microsoft firması tarafından kazandırılan ve uygulama geliştirme sırasında bir varlığı programa bağlamaya yarayan mantıktır. Örneğin bir prograda bulunan bir resim, programın içerisine dahil edilip çalıştırılabilir kodun (executable code) bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>İngilizce olarak object linking and embedding database kelimelerinin baş harflerinden oluşan bir veritabanı terimidir. Aslında OLE terimi (object linking and embedding) Microsoft firması tarafından kazandırılan ve uygulama geliştirme sırasında bir varlığı programa bağlamaya yarayan mantıktır.</p>
<p>Örneğin bir prograda bulunan bir resim, programın içerisine dahil edilip çalıştırılabilir kodun (executable code) bir parçası olabileceği gibi, bir resim dosyası olarak hariçte tutulup programın çalışması sırasında bu harici dosyadan okunabilir. Bir varlığın bu şekilde programa dahil edilmesine microsoft terminolojisinde COM (component object model) ismi verilirken hariçte tutulmasına ole ismi verilir.</p>
<p>OLEDB terimi ise bu açıklamadan anlaşılacağı üzere program ile veri tabanı arasındaki bağlantının hariçte tutulması anlamındadır. Aslında MDAC ismi verilen ve microsoft tarafından geliştirilen microsoft data access components (microsoft veri erişim bileşenleri) ailesinin bir üyesi olan OLEDB, kısaca microsoft ortamlarında <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veritabanına (DB database)</a> erişmek için kullanılan çeşitli yöntemlerden birisidir. Yapı olarak ODBC bağlantısına benzetilebilir.</p>
<p>OLEDB kullanımını daha net anlayabilmek için C# dilinde yazılmış aşağıdaki kodu anlamaya çalışalım:</p>
<pre>using System;
using System.Data.OleDb;

public class ReadFromOleDb
{
  [STAThread]
  static void Main(string[] args)
  {
    String sConn = "provider=sqloledb;server=(local)\\SQLEXPRESS;database=veritabani;Integrated Security=SSPI";

    String sSQL = "select id, firstname, lastname from Employee";

    OleDbConnection oConn = new OleDbConnection(sConn);
    oConn.Open();

    OleDbCommand oCmd = new OleDbCommand(sSQL, oConn);
    OleDbDataReader oReader = oCmd.ExecuteReader();

    int idxID = oReader.GetOrdinal("id");
    int idxFirstName = oReader.GetOrdinal("firstname");
    int idxLastName = oReader.GetOrdinal("lastname");

    while(oReader.Read()) {
      Console.WriteLine("{0} {1} {2}",
        oReader.GetValue(idxID),
        oReader.GetValue(idxFirstName),
        oReader.GetValue(idxLastName));
    }
  }
}</pre>
<p>Yukarıdaki kodda dikkat edileceği üzere System.Data.OleDb kütüphanesi kullanılmıştır. OleDb ile veritabanı işlemini 3 adımda inceleyebiliriz:</p>
<p>1. Veritabanı bağlantısının kurulması</p>
<p>2. Bağlantı üzerinde bir sorgunun (query) çalıştırılması</p>
<p>3. Sorgu sonucunda (şayet sorgu bir sonuç kümesi döndürüyorsa (result set) ) sonuç kümesi üzerinde işlem yapılması</p>
<p>Bu sıralanan adımları yukarıdaki kodda belirleyecek olursak ilk adım olan veritabanı bağlantısı</p>
<pre>String sConn = "provider=sqloledb;server=(local)\\SQLEXPRESS;database=veritabani;Integrated Security=SSPI";</pre>
<pre>OleDbConnection oConn = new OleDbConnection(sConn);
oConn.Open();</pre>
<p>Şeklinde 3 ayrı satırda kurulmuştur.  Buradaki provider terimi sqlodedb olarak belirlenmiştir. Bunun anlamı bilgisayarımızda bu bağlantıyı sağlamaya yarayan bir sürücü (driver) bulunması gerektiği ve bağlantının isminin tam olarak sqloledb olmasıdır.</p>
<p>Ardından server= ile başlayan kısımda (local) yazılmıştır. Burada da aynı bilgisayar üzerinde bulunan veri tabanına bağlanılacağı anlaşılıyor. Şayet farklı bir sunucudaki bir veritabanına bağlanılması istenirse bu durumda sunucunun internet addresi ( IP address ) veya ağ kurulumuna göre  ismi yazılmalıdır.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>database= ile başlayan kısma ise <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veri tabanı sunucumuzda</a> bulunan ve bağlanılmak istenen veritabanının ismi yazılır.</p>
<p>Integrated Security ile SSPI ayarlanmıştır. SSPI aslında detaylıca anlatılabilecek bir güvenlik modülü olmasına karşılık bu yazıda sadece Security Support Provider Interface kelimelerinin baş harfinden oluştuğunu ve bağlantı sırasında gidip gelen verinin güvenli bir şekilde saklanmasının hedeflendiğini söylemek ile yetinelim.</p>
<p>Yukarıdaki bağlantıyı gösteren ikinci satırda OleDbConnection <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfından (class)</a> bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> oluşturuyoruz ve ismi de oConn olarak veriliyor. Burada OleDbConnection <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcısına (constructor) </a>parametre olarak bir önceki saıtrda tanımladığımız dizgiyi (string) veriyoruz.</p>
<p>Son olarak oConn.open() metodunu çağırarak bağlantıyı açıyoruz.</p>
<p>Bağlantı açıldıktan sonra, bu bağlantı üzerinden artık sorgu (query) çalıştırılabilir. Sorgu çalıştıran satırlarımız aşağıda verilmiştir:</p>
<pre>String sSQL = "select id, firstname, lastname from Employee";</pre>
<pre>OleDbCommand oCmd = new OleDbCommand(sSQL, oConn);
OleDbDataReader oReader = oCmd.ExecuteReader();</pre>
<p>Yukarıdaki 3 satırda sırasıyla bir sorgu cümlesi (query string) girilmiş, bu cümle daha önceden açılmış olan bağlantı üzerinde çalıştırılmış ve son olarak sorgunun sonucunu okumak üzere OleDbDataReader <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfından (class)</a> bir nesne üretilmiştir.</p>
<p>Üçüncü kısımda bu sorgunun sonucu işlenmektedir.</p>
<p>oReader nesnesinden getOrdinal fonksiyonu ile veritabanımızda bulunan Employee tablosundaki ilgili kolonları (column) bağlayabiliyoruz:</p>
<pre>oReader.GetOrdinal("id");</pre>
<p>Örneğin yukarıdaki kodda &#8220;id&#8221; isimli kolon alınmıştır. Daha sonra bu bağlantılar üzerinden satır satır okuma yaparak verileri çekmemiz mümkün. while döngüsünün (loop) içindeki satırlarda da bu şekilde veri çekilerek Console.write komutu ile ekrana basılmaktadır.</p>

<p class="sayac_bilgi">91 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/07/oledb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mesaj Özetleri (Message Digests)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 11:31:10 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Özellikle veri güvenliği ve veri bütünlüğü (data integrity) konularında kullanılan mesaj özetleri aslında birer özetleme fonksiyonudurlar (hashing functions). Buna göre büyük bir veriden nispeten daha küçük bir özet üretilir ve bu özetten orijinal veriye geri dönülemeyeceği varsayılır. Mesaj özetlerinden en meşhurları MD5 ve SHA-1 algoritmalarıdır. MD5 : Message digest (mesaj [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Özellikle veri güvenliği <a href="http://www.bilgisayarkavramlari.com/2009/07/15/veri-butunlugu-data-integrity/">ve veri bütünlüğü (data integrity)</a> konularında kullanılan mesaj özetleri aslında birer <a href="http://www.bilgisayarkavramlari.com/2008/05/26/ozetleme-fonksiyonlari-hash-function/">özetleme fonksiyonudurlar (hashing functions).</a> Buna göre büyük bir veriden nispeten daha küçük bir özet üretilir ve bu özetten orijinal veriye geri dönülemeyeceği varsayılır.</p>
<p>Mesaj özetlerinden en meşhurları <a href="http://www.bilgisayarkavramlari.com/2008/04/30/md5-message-digest-mesaj-ozet/">MD5</a> ve SHA-1 algoritmalarıdır.</p>
<p>MD5 : Message digest (mesaj özeti) kelimelerinin kısaltmasıdır ve 5. Versiyonunu ifade etmektedir.</p>
<p>SHA-1 : Secure Hashing Algorithm (güvenli özetleme algoritması) ise 1. Versiyonudur ve daha önceki 0. Versiyonuna göre daha güvenlidir. Çoğu kaynakta sadece SHA olarak da geçmektedir.</p>

<p class="sayac_bilgi">76 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/16/mesaj-ozetleri-message-digests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Veri Bütünlüğü (Data Integrity)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/07/15/veri-butunlugu-data-integrity/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/07/15/veri-butunlugu-data-integrity/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 10:08:49 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2809</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinin birinci derece uğraştığı varlık veridir. Yani bilgisayar bilimlerinde yapılan her işi bir bakışa göre veriyi işlemek olarak görmek mümkündür. İşlenen bu verinin bütünlüğü ise ayrı bir problemdir. Veri bütünlüğü ile genelde verinin birden fazla parçaya bölünmesi durumunda bu parçaların bütün olarak tutulması kastedilir. Veri&#8217;nin bölünmesi ne zaman gerekir [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinin birinci derece uğraştığı varlık <a href="http://www.bilgisayarkavramlari.com/2008/03/26/bilgiverimalumatirfanknowledgedatainformationwisdom/">veridir</a>. Yani bilgisayar bilimlerinde yapılan her işi bir bakışa göre veriyi işlemek olarak görmek mümkündür. İşlenen bu verinin bütünlüğü ise ayrı bir problemdir. Veri bütünlüğü ile genelde verinin birden fazla parçaya bölünmesi durumunda bu parçaların bütün olarak tutulması kastedilir.</p>
<p><strong>Veri&#8217;nin bölünmesi ne zaman gerekir</strong></p>
<p>Günümüzde kullanılan ilişkisel veri tabanlarında veya nesne yönelimli programlama yaklaşımlarında bir <a href="http://www.bilgisayarkavramlari.com/2008/03/26/bilgiverimalumatirfanknowledgedatainformationwisdom/">bilgi</a> birden fazla parçaya bölünmektedir. Örneğin gerçek hayattaki bir müşteri sipariş formunu (kağıt ile tutulan) ele alalım. Mu formun üzerinde muhtemelen müşterinin iletişim bilgilerini (adres, telefon gibi) istediği ürün bilgilerini (örneğin kitap alacaksa, kitabın ismi fiyatı gibi) ve sipariş bilgilerini (örneğin sipariş tarihi toplam ücreti gibi) görebiliriz.</p>
<p>Ancak <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">ilişkisel veri tabanında (relational database) </a>bu bilgilerin tek bir yerde tutulması teorik olarak doğru kabul edilmez. <a href="http://www.bilgisayarkavramlari.com/2009/03/05/ucuncu-normal-sekil-third-normal-form-3nf/">Normalleştirme (normalisation)</a> teorilerine gore verinin parçalanması (docomposition) gerekmektedir.</p>
<p>Görüldüğü üzere bir veri tabanı modellemesi sırasında veri parçalara bölünmektedir.</p>
<p>Benzer durum nesne yönelimli yaklaşımda da yaşanabilir. Yani veriyi nesneler ile modellemek isteyelim. Her nesne kendisi ile ilgili bilgiyi tutacaktır. Örneğin yukarıdaki örnek için, müşteri ve kitap gibi iki farklı nesne bulunacak ve veri bu nesneler arasında dağıtılacaktır.</p>
<p><strong>Veri bütünlüğünü tehdit eden durumlar</strong></p>
<p>Veri bütünlüğünü tehdit eden birinci durum silme işlemleridir. Yani veriyi modelimiz içinde parçalara böldüğümüzü ve her parçayı başarılı bir şekilde tuttuğumuz düşünelim. Bu bütünün bir parçasını müstakil olarak silersek veri bütünlüğünu tehdit ederiz.</p>
<p>Örneğin yukarıdaki misale devam edelim ve sipariş formundaki bilgileri veri tabanımızdaki üç ayrı tabloya:</p>
<ul>
<li>müşteri</li>
<li>sipariş</li>
<li>kitap</li>
</ul>
<p>tablolarına dağıtalım.</p>
<p>Şimdi gidip bir müşteriyi sildiğimizde artık elimizdeki bazı siparişlerin kime ait olduğunu bilmiyoruz. Ya da bir kitabı sildiğimizde bazı müşterilerin hangi kitabı aldığını bilmiyoruz.  İşte bu durum veri bütünlüğünün bozulmasıdır.</p>
<p>Veri bütünlüğü silme işlemi dışında yanlış tasarımdan da bozulabilir. Tasarım hataları verinin tutulması ve işlenmesi sırasında ortaya çıkabilir ancak sonuçta anlatılmak istenen verinin bir kısmına ulaşılamaz olmasıdır.</p>

<p class="sayac_bilgi">526 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/07/15/veri-butunlugu-data-integrity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAVA ile Veritabanı bağlantısı</title>
		<link>http://www.bilgisayarkavramlari.com/2009/07/09/java-ile-veritabani-baglantisi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/07/09/java-ile-veritabani-baglantisi/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 09:55:22 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2757</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı JAVA programlama dilinden bir veri tabanına nasıl bağlanılacağını adım adım örnek kod üzerinden açıklamaktır. Uygulamada veri tabanı olarak JavaDB kullanacağız. Bu veritabanı netbeans ile birlikte gelmenin yanında Sun microsystems&#8217;in web sitesinden de indirilebilir. Temel olarak bir programlama dilinden (JAVA veya farklı bir dil) bir veritabanına (database) bağlanmak [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı<a href="http://www.bilgisayarkavramlari.com/2007/04/14/java-programlama-dili/"> JAVA programlama dilinden</a> bir veri tabanına nasıl bağlanılacağını adım adım örnek kod üzerinden açıklamaktır. Uygulamada veri tabanı olarak JavaDB kullanacağız. Bu <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veritabanı</a> netbeans ile birlikte gelmenin yanında Sun microsystems&#8217;in web sitesinden de indirilebilir.</p>
<p>Temel olarak bir programlama dilinden (<a href="http://www.bilgisayarkavramlari.com/2007/04/14/java-programlama-dili/">JAVA</a> veya farklı bir dil) bir <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veritabanına (database)</a> bağlanmak ve veri almak için aşağıdaki üç adım izlenmelidir:</p>
<ul>
<li>Veri tabanına bir bağlantı oluşturmak (connection)</li>
<li>Bağlantı üzerinden bir sorgunun çalıştırılması</li>
<li>Sorgunun sonucunun bir veri yapısı (Datastructure) içerisine alınması</li>
</ul>
<p>Yukarıdaki bu adımları sırasıyla <a href="http://www.bilgisayarkavramlari.com/2007/04/14/java-programlama-dili/">JAVA dilinde</a> ve JavaDB <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veritabanında</a> gerçekleştirmeye çalışalım.</p>
<p><strong>Veritabanına bağlantı oluşturulması</strong></p>
<p>Bu aşamada ve bundan sonraki <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veritabanı</a> işlemlerinde <a href="http://www.bilgisayarkavramlari.com/2007/04/14/java-programlama-dili/">JAVA dilinde </a>bulunna java.sql.* paketini kullanıyoruz. Bu paket için</p>
<pre><span style="color: #00ff00;">import</span> java.sql.*;</pre>
<p>satırını kodumuzun başına ekliyoruz.</p>
<p>Bağlantıyı oluşturmak için java.sql.Connection <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfından (class)</a> bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> oluşturuyoruz. Bu işlem için aşağıdaki satırı kullanabiliriz:</p>
<pre> Connection <span style="color: #ff0000;">con</span> = DriverManager.getConnection(
"<span style="color: #0000ff;">jdbc:derby://localhost:1527/xyz;user=sadi;password=evren;</span>");</pre>
<p>Yukarıdaki satırda con ismi verilen <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> oluşturulmuş ve yerel bilgisayarda (localhost) bulunan &#8220;xyz&#8221; isimli <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">veritabanına</a> &#8220;sadi&#8221; kullanıcısı ve &#8220;evren&#8221; şifresi ile bağlanmaya çalışmıştır.  1527 bilgisayarımızda kurulu olan JavaDB&#8217;nin port numarasıdır.</p>
<p><strong>Veritabanında sorgunun çalıştırılması</strong></p>
<p>Veri tabanına yukarıdaki şekilde bağlandıktan sonra istenilen bir sorgu çalıştırılabilir. Bu işlem için de yine java.sql paketinde bulunan Statement sınıfını kullanacağız.</p>
<p>Statement <span style="color: #ff0000;">sta </span>=<span style="color: #ff0000;"> con</span>.createStatement();<br />
ResultSet <span style="color: #ff0000;">res</span> = <span style="color: #ff0000;">sta</span>.executeQuery(<br />
&#8220;<span style="color: #0000ff;">SELECT * FROM USERTABLE</span>&#8220;);</p>
<p>Yukarıda verilen kod parçasındaki sorgu bir sonuç kümesine (ResultSet) toplanmıştır. Yani yukarıdaki ilk satır ile bağlantımız üzerinde (con <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesnesinin </a>bağlantı olduğunu hatırlayalım) bir sorgu çalıştıracak imkan açılmıştır. İkinci satır ile de bu bağlantı üzerinde verilen sorgu çalıştırılarak res ismindeki nesnenin içersine sonuç bilgileri alınmıştır.</p>
<p><strong>Sorgudan alınan sonuç kümesinin (Result Set) işlenmesi</strong></p>
<p>Sorgudan dönen bilgi bir önceki adımda bir ResultSet <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesnesinin</a> içerisine atıldı. Bu sınıfın çok farklı fonksiyonları olmakla beraber aşağıdaki örnekte gösterilen kodu çalıştırabiliriz:</p>
<pre> while (<span style="color: #ff0000;">res</span>.next()) {
           System.out.println(
           "  "+<span style="color: #ff0000;">res</span>.getString("<span style="color: #0000ff;">USERNAME</span>")
           + ", "+<span style="color: #ff0000;">res</span>.getString("<span style="color: #0000ff;">PASSWORD</span>"</pre>
<pre>           );
}</pre>
<p>Yukarıdaki kod örneğinde veri tabanından dönen kümeden &#8220;USERNAME&#8221; ve &#8220;PASSWORD&#8221; isimli kolonlar (Veritabanındanki USERTABLE tablosunun kolonları) alınarak ekrana basılmaktadır. Dikkat edilirse bu basma işlemi bir while döngüsü (loop) içerisinde gerçekleşmektedir ve her adımda res.next() fonksiyonu ile kümedeki bir sonraki satır (Tuple) alınmaktadır.</p>
<p><strong>Bağlantının kapatılması</strong></p>
<p>Son olarak JAVA ile veritabanı arasındaki bağlantının kapatılması gerekir. Bu işlem için</p>
<pre><span style="color: #ff0000;">con</span>.close();</pre>
<p>satırı kullanılabilir.</p>
<p><strong>Tam çalışır kod</strong></p>
<p>Yukarıdaki verilen parçalı ve açıklamalı kodun tamamı aşağıda tek adımda verilmiştir. Yukarıdaki koda ilave olarak çeşitli satırlarda try / catch blokları ile SQLException yakalandığına dikkat ediniz. Bunun sebebi beklenmedik bir durumda <a href="http://www.bilgisayarkavramlari.com/2007/04/14/java-programlama-dili/">JAVA</a>&#8216;nın SQLException catch edilmesini zorunlu tutmasıdır.</p>
<pre>import java.sql.*;
/**
 *
 * @author shedai
 */
public class dbAbstract {
    Connection con;
    public void close() {
         try{
              con.close();
         }
         catch(Exception e){}
 }
 public dbAbstract(){
     try{
     con = DriverManager.getConnection(
        "jdbc:derby://localhost:1527/xyz;user=sadi;password=evren;");
     }
     catch(SQLException exp){
        exp.printStackTrace();
     }
 }
 public boolean Authenticate(String User,String Pass){
     try{
          Statement sta = con.createStatement();
          ResultSet res = sta.executeQuery(
          "SELECT * FROM USERTABLE where USERNAME='"+User+"';");
          while (res.next()) {
             if(Pass.equals(res.getString("PASSWORD")))
              return true;
      }
      res.close();
      sta.close();
      return false;
     }catch(SQLException exp){
         exp.printStackTrace();
         return false;
     }
 }
}

<strong>Veri Tabanı bağlantısından bilgileri JTAble'a çekerek görsel olarak gösteren kod</strong>
Betül Hanımın sorusu üzerine aşağıdaki kodu yazdım ve basitçe veri tabanından veri çekip JFrame içerisindeki bir JTable bileşenine (component) ekliyoruz.

import java.sql.*;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JTable;
/**
 *
 * @author shedai
 */
public class NewClass {
    Connection con;
    public void close() {
         try{
              con.close();
         }
         catch(Exception e){}
 }

 public NewClass(){
     try{
    con = DriverManager.getConnection( "jdbc:mysql://localhost/deneme", "root", "" );  
     }
     catch(SQLException exp){
        exp.printStackTrace();
     }
 }
 JTable jt;
 public void tablo(){
     try{
          Statement sta = con.createStatement();
          ResultSet res = sta.executeQuery(
          "SELECT * FROM persons");
          Vector satirlar = new Vector();
          Vector satir[] = new Vector[2];
          satir[0] = new Vector();
          satir[1] = new Vector();
          int s = 0;
          while (res.next()) {

              for(int i = 1;i&lt;6;i++){
               satir[s].add(res.getString(i));
                System.out.println(res.getString(i));
              }
              s++;

          }
          satirlar.add(satir[0]);
          satirlar.add(satir[1]);
          Vector basliklar = new Vector();
          basliklar.add("id");
          basliklar.add("soyisim");
          basliklar.add("isim");
          basliklar.add("adres");
          basliklar.add("şehir");
          jt = new JTable(satirlar,basliklar);

      res.close();
      sta.close();

     }catch(SQLException exp){
         exp.printStackTrace();

     }
 }
 public static void main(String args[]){
     NewClass nc = new NewClass();
     nc.tablo();
     JFrame jf = new JFrame();
    jf.add(nc.jt);
    jf.setVisible(true);

 }
 }</pre>
<p>Öncelikle, hazır yeni bir kod yazıyorken, MySQL bağlantısını da örneklendirmiş olmak için kodu, MySQL sunucusna bağlanan şekilde yazdım. MySQL sunucunda öncelikle deneme isminde bir tablo oluşturduk:</p>
<pre>CREATE TABLE IF NOT EXISTS `persons` (
`P_Id` int(11) NOT NULL,
`LastName` varchar(255) NOT NULL,
`FirstName` varchar(255) DEFAULT NULL,
`Address` varchar(255) DEFAULT NULL,
`City` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</pre>
<p>Ayrıca tabloya iki adet basit veri ekledim:</p>
<pre>INSERT INTO `persons` (`P_Id`, `LastName`, `FirstName`, `Address`, `City`) VALUES
(1, 'seker', 'sadi', 'fasfa af af a', 'ist'),
(2, 'demir', 'ali', 'fasdf af af afa', 'adana');</pre>
<p>Yukarıda verdiğim kodda, inşa sınıfında bulunan (constructor) veri tabanı bağlantısı, MySQL bağlantısı olduğu için, ilgili kütüphanenin öncelikle classpath içerisinde tanımlı olması gerekir. Bu kütüphane JDBC üzerinden MySQL bağlantısı kurmaya yarayan sürücü (driver) bilgisini içerir.</p>
<p>Ardından bağlantı kurulduktan sonra yukarıdaki kodda bulunan tablo() fonksiyonumuz veri tabanından ilgili tablonun içeriğini çekerek hem ekrana hem de JTable içerisine basmaktadır. Bu işlem yazının başında verilen ilk örnek koda benzer şekilde bir while döngüsü üzerinden yapılmaktadır.</p>
<p>JTable sınıfının çok sayıdaki <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">inşa fonksiyonlarından (constructor)</a> birisi de, iki adet <a href="http://www.bilgisayarkavramlari.com/2011/03/31/java-dilinde-vektorler/">vektör (vector) </a>almaktadır.</p>
<p>Bu vectorlerden ilki, verileri tutan ve &#8220;vector of vector&#8221;, yani vektörler vektörü olan veri yapısıyken, ikinci vektör sadece tablo başlıklarını tutmaktadır.</p>
<p>İşlemi kolaylaştırmak ve ileride çok sayıdak satır ile ilgilenmek ihtimalinden dolayı, bir dizi tanımlayıp (satir) her satırı bu dizininin bir elemanına çekiyoruz. Ardından çekilen bu satırları daha üstte tek bir vektörde (satirlar) topluyoruz ve bunu JTable&#8217;ın ilk elemanı yapıyoruz.</p>
<p>Son olarak, koddaki, ilk çalışan main fonksiyonuna bakalım. Main fonksiyonunda bir JFrame oluşturulmakta, bu JFrame içerisine de jt isimli, daha önceden tanımlanmış ve tablo() fonksiyonu ile içerisine veri tabanından veri çekilmiş olan JTable yerleştirilmektedir.</p>
<p>Kodun çalışmasının ardından ekran çıktısı aşağıdaki şekildedir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/jtable.png"><img class="alignnone size-full wp-image-5914" title="jtable" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/jtable.png" alt="" width="407" height="84" /></a></p>

<p class="sayac_bilgi">1,967 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/07/09/java-ile-veritabani-baglantisi/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>CSharp ve SQL</title>
		<link>http://www.bilgisayarkavramlari.com/2009/07/08/csharp-ve-sql/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/07/08/csharp-ve-sql/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 01:23:54 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2753</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Gelen bir soru üzerine C# ile MS SQL server&#8217;dan veri çekmeyi adım adım kod üzerinden inceleyelim. Öncelikle veri çekmek için gereken adımları sıralayalım: Veri tabanına C# dilinde kullanıcı ve şifre ile bir bağlantı oluşturulur. Açılan bağlantı üzerinde bir sorgu (Query) çalıştırılır. Sorgu (query) sonucu bir veri yapısında (data structures) saklanır. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Gelen bir soru üzerine C# ile MS SQL server&#8217;dan veri çekmeyi adım adım kod üzerinden inceleyelim. Öncelikle veri çekmek için gereken adımları sıralayalım:</p>
<ul>
<li>Veri tabanına C# dilinde kullanıcı ve şifre ile bir bağlantı oluşturulur.</li>
<li>Açılan bağlantı üzerinde bir <a href="http://www.bilgisayarkavramlari.com/2008/12/05/sql-structured-query-language-yapisal-sorgulama-dili/">sorgu (Query)</a> çalıştırılır.</li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/12/05/sql-structured-query-language-yapisal-sorgulama-dili/">Sorgu (query)</a> sonucu bir veri yapısında (data structures) saklanır. (C# için tercihen datatable)</li>
</ul>
<p>Şimdi yukarıdaki adımları sırasıyla inceleyelim ve kod üzerinde yazmaya çalışalım.</p>
<p><strong>Veri tabanına CSharp ile bağlantı</strong></p>
<p>Temel olarak bir veri tabanından bir dil vasıtasıyla bilgi çekmek için öncelikle bu veri tabanına dilden bir bağlantı oluşturmak gerekir. Bu bağlantı ODBC (Open Database Connectivity) ismi verilen ve bütün veri tabanlarının desteklediği genel bir bağlantı olabilir veya dile özgü bağlantı (native connection) kullanılabilir. Kısaca dile özgü bağlantı, ODBC&#8217;ye göre daha başarılıdır. Bunun sebebi o dil ve o veritabanı arasında özel olarak yazılmış ve iyileştirilmiş olmasıdır.</p>
<p>Bilindiği üzere C# ve MS SQL Server birbirleriyle iyi anlaşan teknolojiler olduğu için aralarında bir dile özgü bağlantı şansı bulunmaktadır. Bu bağlantı bizden sadece veritabanının ismini, IP adresini, kullanıcı ve şifre bilgilerini ister.</p>
<p>Bu bilgileri ilerde değiştirilebilir diye değişkenlerde tanımlıyoruz:</p>
<div id="source_code" class="box_content">
<pre class="csharp">
<span style="color: #ff0000;">string</span> Server = <span style="color: #808080;">"localhost"</span>;
<span style="color: #ff0000;">string</span> Username = <span style="color: #808080;">"kullanici"</span>;
<span style="color: #ff0000;">string</span> Password = <span style="color: #808080;">"sifre"</span>;
<span style="color: #ff0000;">string</span> Database = <span style="color: #808080;">"veritabani"</span>;</pre>
<p>Yukarıdaki 4 değişkenin her birisine kurulumumuzdaki bilgileri giriyoruz. Yukarıdaki bu tanımdan sonra bağlantımızı oluşturabiliriz:</p>
<pre class="csharp"><span style="color: #ff0000;">string</span> ConnectionString = <span style="color: #808080;">"Data Source="</span> + Server + <span style="color: #808080;">";"</span>;
ConnectionString += <span style="color: #808080;">"User ID="</span> + Username + <span style="color: #808080;">";"</span>;
ConnectionString += <span style="color: #808080;">"Password="</span> + Password + <span style="color: #808080;">";"</span>;
ConnectionString += <span style="color: #808080;">"Initial Catalog="</span> + Database;</pre>
<p>Görüldüğü üzere henüz hala değişken tanımlıyoruz. ConnectionString ismini verdiğimiz bu bağlantı değişkenini, değişkenlerden okumak yerine aşağıdaki şekilde de tanımlayabilirdik:</p>
<pre class="csharp"><span style="color: #ff0000;">string</span> ConnectionString = <span style="color: #808080;">"Data Source=localhost</span><span style="color: #808080;">;</span><span style="color: #808080;">User ID=</span><span style="color: #808080;">kullanici;</span><span style="color: #808080;">Password=</span><span style="color: #808080;">sifre;</span><span style="color: #808080;">Initial Catalog=</span>Veritabaniismi";</pre>
<p>Bütün bu tanımlardan sonra artık bağlantıyı oluşturabiliriz. Bu işlem için C$ içerisinde hazır olarak gelen SqlConnection<a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/"> sınıfını (class)</a> kullanacağız. Önce bu sınıftan bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> tanımlıyrouz:</p>
<pre class="csharp">SqlConnection SQLConnection = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> SqlConnection<span style="color: #000000;">(</span><span style="color: #000000;">)</span>;</pre>
<p>Tanımlanan bu SQLConnection ismli nesneyi kullanarak bağlantımızı aşağıdaki şekilde açabiliriz.</p>
<pre class="csharp"><span style="color: #0600ff;">try</span>
<span style="color: #000000;">{</span>
    SQLConnection.<span style="color: #0000ff;">ConnectionString</span> = ConnectionString;
    SQLConnection.<span style="color: #0000ff;">Open</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span>;
<span style="color: #000000;">}</span>
<span style="color: #0600ff;">catch</span> <span style="color: #000000;">(</span>Exception Ex<span style="color: #000000;">)</span>
<span style="color: #000000;">{</span>
    <span style="color: #008080; font-style: italic;">// hata oldu kapatiyoruz</span>
    <span style="color: #0600ff;">if</span> <span style="color: #000000;">(</span>SQLConnection != <span style="color: #0600ff;">null</span><span style="color: #000000;">)</span>
        SQLConnection.<span style="color: #0000ff;">Dispose</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span>;
    <span style="color: #0600ff;">return</span>;
<span style="color: #000000;">}</span></pre>
<p>Yukarıdaki kodda bağlantı satırları try bloğu içine alınmış ve <a href="http://www.bilgisayarkavramlari.com/2008/11/22/istisna-yakalama-kabz-i-istisna-exception-handling/">beklenmedik bir hata (exception) </a>oluşması durumunda catch bloğu yazılmıştır. Aslında SqlConnection <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfının</a> Open fonksiyonu sadece InvalidOperationException ve SqlException sınıflarını atar (throw) ancak tek bir Exception sınıfı ile de yakalanabilir (catch).</p>
<p><strong>Veri Tabanında Sorgu</strong></p>
<p>Bağlantıyı açtıktan sonra 2. ve 3. adımlar olan bağlantı üzerinden bir <a href="http://www.bilgisayarkavramlari.com/2008/12/05/sql-structured-query-language-yapisal-sorgulama-dili/">sorgu (query)</a> çalıştırma ve sonucu bir veri yapısına alma aşamasına geçebiliriz.</p>
<p>Önce sorgumuzu bir değişkende tanımlayalım:</p>
<pre class="csharp"><span style="color: #ff0000;">string</span> SQLStatement = <span style="color: #808080;">"SELECT * FROM Tablo"</span>;</pre>
<p>Tanımın ardından dönen bilginin alınacağı veri yapımızı hazırlayalım. Bu örnekte C# içinde bulunan DataTable kullanacağız. Bu veriyapısına bilgi çekmek için yine C# içerisinde bulunan SqlDataAdapter sınıfından faydalanacağız.</p>
<pre class="csharp">SqlDataAdapter SQLDataAdapter = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> SqlDataAdapter<span style="color: #000000;">(</span>SQLStatement, SQLConnection<span style="color: #000000;">)</span>;</pre>
<p>Yukarıdaki satırda tanımladığımız bağlantı üzerinden yine tanımladığımız sorgu çalıştırılarak SQLDataAdapter isimli <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesneye </a>sonuç atanmış ve işlenmeye hazır halde beklemektedir.</p>
<pre class="csharp">DataTable dtResult = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> DataTable<span style="color: #000000;">(</span><span style="color: #000000;">)</span>;</pre>
<p>Hazırladığımız bu SQLDataAdapter nesnesinden veri okumak için bir veri tablosu dtResult tanımlıyoruz ve aşağıdaki satır ile içine veriyi dolduruyoruz.</p>
<pre class="csharp">SQLDataAdapter.<span style="color: #0000ff;">Fill</span><span style="color: #000000;">(</span>dtResult<span style="color: #000000;">)</span>;</pre>
<p>Doldurulan veriyi kullanmak için (örneğin ekrandaki bir mesaj kutusunda göstermek için satır satır işleyen aşağıdaki döngüden faydalanılabilir:</p>
<pre class="csharp"><span style="color: #0600ff;">foreach</span> <span style="color: #000000;">(</span>DataRow drRow <span style="color: #0600ff;">in</span> dtResult.<span style="color: #0000ff;">Rows</span><span style="color: #000000;">)</span>
<span style="color: #000000;">{</span>
    MessageBox.<span style="color: #0000ff;">Show</span><span style="color: #000000;">(</span>drRow<span style="color: #000000;">[</span><span style="color: #808080;">"KolonAdi"</span><span style="color: #000000;">]</span>.<span style="color: #0000ff;">ToString</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span><span style="color: #000000;">)</span>;
<span style="color: #000000;">}</span></pre>
<p><strong>Bağlantının Kapatılması</strong></p>
<p>Son olarak açık olan dataadapter ve bağlantıyı kapatıyoruz:</p>
<pre class="csharp">SQLDataAdapter.<span style="color: #0000ff;">Dispose</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span>;
SQLConnection.<span style="color: #0000ff;">Close</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span>;
SQLConnection.<span style="color: #0000ff;">Dispose</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span>;</pre>
</div>
<p>Yukarıda adım adım anlatılan kodun çalışması için System.Data.* paketinin projeye dahil edilmesi (using) gerekmektedir.</p>

<p class="sayac_bilgi">487 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/07/08/csharp-ve-sql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Atomluluk (Atomicity)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 13:03:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Automata (otomatlar, özdevinirler)]]></category>
		<category><![CDATA[bilgisayar felsefesi]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Donanım ( Hardware )]]></category>
		<category><![CDATA[Dosya Organizasyonu (File Organisation)]]></category>
		<category><![CDATA[işletim sistemleri]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Mantık Devreleri (Logic Circuits)]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Sistem Programlama (System Programming)]]></category>
		<category><![CDATA[Temel Bilimler]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>
		<category><![CDATA[Veri Tabanı (Database)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Latince bölünemez anlamına gelen atom kökünden üretilen bu kelime, bilgisayar bilimlerinde çeşitli alanlarda bir bilginin veya bir varlığın bölünemediğini ifade eder. Örneğin programlama dillerinde bir dilin atomic (bölünemez) en küçük üyesi bu anlama gelmektedir. Mesela C dilinde her satır (statement) atomic (bölünemez) bir varlıktır. Benzer şekilde bir verinin bölünemezliğini ifade etmek [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>TR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Latince bölünemez anlamına gelen atom kökünden üretilen bu kelime, bilgisayar bilimlerinde çeşitli alanlarda bir bilginin veya bir varlığın bölünemediğini ifade eder.</p>
<p class="MsoNormal">Örneğin programlama dillerinde bir dilin atomic (bölünemez) en küçük üyesi bu anlama gelmektedir. Mesela C dilinde her satır (statement) atomic (bölünemez) bir varlıktır.</p>
<p class="MsoNormal">Benzer şekilde bir verinin bölünemezliğini ifade etmek için de veri tabanı, veri güvenliği veya veri iletimi konularında kullanılabilir.</p>
<p class="MsoNormal">Örneğin veri tabanında bir işlemin (transaction) tamamlanmasının bölünemez olması gerekir. Yani basit bir örnekle bir para transferi bir hesabın değerinin artması ve diğer hesabın değerinin azalmasıdır (havale yapılan kaynak hesaptan havale yapılan hedef hesaba doğru paranın yer değiştirmesi) bu sıradaki işlemlerin bölünmeden tamamlanması (atomic olması) gerekir ve bir hesaptan para eksildikten sonra, diğer hesapa para eklenmeden araya başka işlem giremez.</p>
<p class="MsoNormal">Benzer şekilde işletim sistemi tasarımı, paralel programlama gibi konularda da bir işlemin atomic olması araya başka işlemlerin girmemesi anlamına gelir.</p>
<p class="MsoNormal">Örneğin sistem tasarımında kullanılan check and set fonksiyonu önce bir değişkeni kontrol edip sonra değerini değiştirmektedir. Bir değişkenin değeri kontrol edildikten sonra içerisine değer atanmadan farklı işlemler araya girerse bu sırada problem yaşanması mümkündür. Pekçok işlemci tasarımında buna benzer fonksiyonlar sunulmaktadır.</p>
<p class="MsoNormal">Genel olarak bölünemezlik (atomicity) geliştirilen ortamda daha düşük seviyeli kontroller ile sağlanır. Örneğin işletim sistemlerinde kullanılan<a href="http://www.bilgisayarkavramlari.com/2009/03/30/semafor-semaphore-flama-isaret/"> semafor’lar (semaphores)</a>, kilitler (locks), koşullu değişkenler (conditional variables) ve monitörler (monitors) bunlar örnektir ve işletim sisteminde bir işlemin yapılması öncesinde bölünmezlik sağlayabilirler.</p>
<p class="MsoNormal">Kullanılan ortama göre farklı yöntemlerle benzer bölünmezlikler geliştirilebilir. Örneğin veritabanı programlama sırasında koşul (condition) veya kilit (lock) kullanımı bölünmezliği sağlayabilir.</p>

<p class="sayac_bilgi">174 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/03/30/atomluluk-atomicity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BCNF (Boyce Codd Normal Form)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/03/05/bcnf-boyce-codd-normal-form/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/03/05/bcnf-boyce-codd-normal-form/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 10:06:06 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Tabanı (Database)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/03/05/bcnf-boyce-codd-normal-form/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Veritabanı tasarım şekillerinden birisi olan BCNF, üçüncü normal şekil ile (third normal form, 3NF) karşılaştıırlabilir. Yapı olarak normal şekillerde üst sayıdaki normal şekiller, alt normal şekilleri kapsar. Yani 2. normal şekilde olan bütün veri tabanı tasarımları 1. normal şekilde ve benzer şekilde 3. normal şekilde olan bütün veri tabanı tasarımları [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Veritabanı tasarım şekillerinden birisi olan BCNF, <a href="http://www.bilgisayarkavramlari.com/2009/03/05/ucuncu-normal-sekil-third-normal-form-3nf/">üçüncü normal şekil ile (third normal form, 3NF) </a>karşılaştıırlabilir. Yapı olarak normal şekillerde üst sayıdaki normal şekiller, alt normal şekilleri kapsar. Yani 2. normal şekilde olan bütün veri tabanı tasarımları <a href="http://www.bilgisayarkavramlari.com/2009/01/16/ilk-normal-sekil-first-normal-form-1nf/">1. normal şekilde</a> ve benzer şekilde 3. normal şekilde olan bütün veri tabanı tasarımları <a href="http://www.bilgisayarkavramlari.com/2009/01/16/ikinci-normal-sekil-second-normal-form-2nf/">2. normal şekilde</a> kabul edilebilir.</p>
<p>Bu durumda BCNF şeklinde olan veritabanı tasarımları da 1. , 2. ve 3. normal şekillerin şartlarını sağlamak zorundadır.</p>
<p>BCNF ile3NF arasındaki farkı şu şekilde açıklayabiliriz:</p>
<p>Veri tabanı tasarımında A → B şeklinde bir functional bağlılık bulunuyorsa (functional dependency), bu bağımlılıktaki B birincil anahtar olmak zorundadır. 3NF tasarımında A anahtarı bir <a href="http://www.bilgisayarkavramlari.com/2009/01/16/aday-anahtar-candidate-key/">aday anahtar (candidate key)</a> olmak zorunda değildir ancak BCNF şeklinde bunun tersine A →  B şeklindeki bir fonksiyonel bağımlılık durumunda A bir aday anahtar olmalıdır.</p>
<p>Bu durumu aşağıdaki örnek üzerinden anlamaya çalışalım. Örneğin 3. normal şekilde olan aşağıdaki tabloyu ele alalım:</p>
<table style="width: 411px;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="76"><strong>Müşteri No</strong><strong> </strong></td>
<td width="106"><strong>Görüşme   Tarihi</strong><strong> </strong></td>
<td width="75"><strong>Görüşme   saati </strong></td>
<td width="76"><strong>Personel No</strong></td>
<td width="78"><strong>Oda No</strong></td>
</tr>
<tr>
<td width="76">CR76</td>
<td width="106">13-May-09</td>
<td width="75">10.30</td>
<td width="76">SG5</td>
<td width="78">B301</td>
</tr>
<tr>
<td width="76">CR76</td>
<td width="106">13-May-09</td>
<td width="75">12.00</td>
<td width="76">SG5</td>
<td width="78">B301</td>
</tr>
<tr>
<td width="76">CR74</td>
<td width="106">13-May-09</td>
<td width="75">12.00</td>
<td width="76">SG37</td>
<td width="78">B302</td>
</tr>
<tr>
<td width="76">CR56</td>
<td width="106">1-Haz-09</td>
<td width="75">10.30</td>
<td width="76">SG5</td>
<td width="78">B302</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki tablodaki fonksiyonel bağımlılıklar aşağıdaki şekilde sıralanabilir:</p>
<ol>
<li>FD1   &#8220;Müşteri No&#8221;, &#8220;Görüşme Tarihi&#8221; → &#8220;Görüşme Saati&#8221;, &#8220;Personel No&#8221;, &#8220;Oda No&#8221;      (Birincil Anahtar, Primary Key)</li>
<li>FD2   &#8220;Personel No&#8221;, &#8220;Görüşme Tarihi&#8221;, &#8220;Görüşme Saati&#8221; →  &#8220;Müşteri No&#8221;         (Adah Anahtar, Candidate key)</li>
<li>FD3   &#8220;Oda No&#8221;, &#8220;Görüşme Tarihi&#8221;, &#8220;Görüşme Saati&#8221; → &#8220;Müşteri No&#8221;, &#8220;Personel No&#8221;     (Aday Anahtar, Candidate key)</li>
<li>FD4   &#8220;Personel No&#8221;, &#8220;Görüşme Tarihi&#8221; → &#8220;Oda No&#8221;     (Aday anahtar DEĞILDIR)</li>
</ol>
<p>Yukarıdaki fonksiyonel bağımlılıklardan 4.&#8217;sü bir aday anahtar değildir. Dolayısıyla <a href="http://www.bilgisayarkavramlari.com/2009/07/15/veri-butunlugu-data-integrity/">veri bütünlüğü (data integrity)</a> açısından sorun olabilir. Örneğin herhangi bir personel için oda değişikliği veri tabanından birden fazla değişikliğin kontrolünü gerektirir.</p>
<p>Örneğin SG5 personeli, B301 odasındadır, bu personelin odasının değişmesi durumunda veri tabanında ya veri bütünlüğü sorunu olur ya da birden fazla erişim gerekir.</p>
<p>Bu sorunun çözümü olarak BCNF şeklinde olan aşağıdaki iki tabloya bölünmesi gerekir:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>Müşteri No</strong></td>
<td><strong>Görüşme   Tarihi</strong></td>
<td><strong>Görüşme   saati</strong></td>
<td><strong>Personel No</strong></td>
</tr>
<tr>
<td>CR76</td>
<td>13-May-09</td>
<td>10.30</td>
<td>SG5</td>
</tr>
<tr>
<td>CR76</td>
<td>13-May-09</td>
<td>12.00</td>
<td>SG5</td>
</tr>
<tr>
<td>CR74</td>
<td>13-May-09</td>
<td>12.00</td>
<td>SG37</td>
</tr>
<tr>
<td>CR56</td>
<td>1-Haz-09</td>
<td>10.30</td>
<td>SG5</td>
</tr>
</tbody>
</table>
<p>ikinci bir tablo ile de toplantılar tutulabilir:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>Personel No</strong></td>
<td><strong>Görüşme   Tarihi</strong></td>
<td><strong>Oda No</strong></td>
</tr>
<tr>
<td>SG5</td>
<td>13-May-09</td>
<td>B301</td>
</tr>
<tr>
<td>SG37</td>
<td>13-May-09</td>
<td>B302</td>
</tr>
<tr>
<td>SG5</td>
<td>1-Haz-09</td>
<td>B302</td>
</tr>
</tbody>
</table>

<p class="sayac_bilgi">1,129 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/03/05/bcnf-boyce-codd-normal-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

