{"id":31003,"date":"2025-10-04T14:31:56","date_gmt":"2025-10-04T11:31:56","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/"},"modified":"2025-10-04T14:31:56","modified_gmt":"2025-10-04T11:31:56","slug":"veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/","title":{"rendered":"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri"},"content":{"rendered":"<p><body><\/p>\n<p>\n        Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.\n    <\/p>\n<p>\n        G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla b\u00fcy\u00fcyen dijital d\u00fcnyas\u0131nda, i\u015fletmelerin ve uygulamalar\u0131n veriye eri\u015fim, depolama ve i\u015fleme \u015fekli her zamankinden daha kritik. Ancak, \u00e7o\u011fu zaman g\u00f6z ard\u0131 edilen veya yeterince \u00f6nemsenmeyen bir konu var: veritaban\u0131 tasar\u0131m\u0131 ve bunun temelini olu\u015fturan normalizasyon. Bir veritaban\u0131n\u0131n k\u00f6t\u00fc tasarlanmas\u0131, zamanla b\u00fcy\u00fck sorunlara yol a\u00e7abilir. Kar\u015f\u0131m\u0131za \u00e7\u0131kan en yayg\u0131n sorunlar aras\u0131nda veri tekrar\u0131 (redundancy), veri tutars\u0131zl\u0131\u011f\u0131 (inconsistency) ve g\u00fcncelleme anomalileri (update anomalies) yer al\u0131r.\n    <\/p>\n<p>\n        Hayal edin ki, bir m\u00fc\u015fteri bilgilerini birden fazla tabloda, farkl\u0131 formatlarda veya eksik bilgilerle depoluyorsunuz. Bu durum, veri g\u00fcncellemesi gerekti\u011finde her tabloyu tek tek kontrol etmenizi ve e\u015fitlemenizi gerektirecek, bu da hem zaman al\u0131c\u0131 hem de hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olacakt\u0131r. \u00d6rne\u011fin, bir m\u00fc\u015fterinin adresini de\u011fi\u015ftirmek istedi\u011finizde, bu bilginin ge\u00e7ti\u011fi her yerde g\u00fcncelleme yapman\u0131z gerekir. E\u011fer birini atlarsan\u0131z, veritaban\u0131n\u0131zda tutars\u0131zl\u0131k olu\u015fur ve hangi bilginin do\u011fru oldu\u011funa karar vermek zorla\u015f\u0131r. \u0130\u015fte tam bu noktada normalizasyon devreye girer.\n    <\/p>\n<p>\n        Normalizasyon, veritaban\u0131 tasar\u0131m\u0131nda veri tekrar\u0131n\u0131 azaltmak ve veri ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 mant\u0131ksal bir d\u00fczene sokmak i\u00e7in kullan\u0131lan sistematik bir s\u00fcre\u00e7tir. Bu s\u00fcre\u00e7 sayesinde, veritaban\u0131 daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir ve ili\u015fkili tablolara ayr\u0131l\u0131r. B\u00f6ylece, veriler sadece bir yerde depolan\u0131r, bu da depolama alan\u0131ndan tasarruf etmenizi ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flaman\u0131z\u0131 kolayla\u015ft\u0131r\u0131r. Ayr\u0131ca, anormal durumlar\u0131, yani ekleme, silme ve g\u00fcncelleme i\u015flemlerinden kaynaklanan tutars\u0131zl\u0131klar\u0131 en aza indirir. Normalizasyon, sadece mevcut verilerinizi d\u00fczenlemekle kalmaz, ayn\u0131 zamanda gelecekteki b\u00fcy\u00fcme ve de\u011fi\u015fikliklere kar\u015f\u0131 veritaban\u0131n\u0131z\u0131 daha esnek ve uyarlanabilir hale getirir. Bu y\u00fczden, do\u011fru ve sa\u011fl\u0131kl\u0131 bir veritaban\u0131 altyap\u0131s\u0131 kurmak isteyen herkes i\u00e7in normalizasyonun temel prensiplerini anlamak hayati \u00f6neme sahiptir. Veritabanlar\u0131n\u0131z\u0131n temelden sa\u011flam olmas\u0131n\u0131 sa\u011flamak i\u00e7in bu s\u00fcreci kavramak, uzun vadede size b\u00fcy\u00fck faydalar sa\u011flayacakt\u0131r.\n    <\/p>\n<h2>Normalizasyon Nedir ve Temel Terimleri Nelerdir?<\/h2>\n<p>\n        Veritaban\u0131 normalizasyonu, veri tekrar\u0131n\u0131 en aza indirerek ve veri tutarl\u0131l\u0131\u011f\u0131n\u0131 art\u0131rarak veritaban\u0131 tablolar\u0131n\u0131 daha verimli bir \u015fekilde d\u00fczenleme i\u015flemidir. Bu s\u00fcre\u00e7, veritaban\u0131 tablolar\u0131n\u0131 ve s\u00fctunlar\u0131n\u0131 belirli kurallara (Normal Formlar) g\u00f6re yap\u0131land\u0131rarak, verilerin do\u011fru ve mant\u0131kl\u0131 bir \u015fekilde depolanmas\u0131n\u0131 hedefler. Temel ama\u00e7, veritaban\u0131n\u0131n depolama verimlili\u011fini, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve esnekli\u011fini art\u0131rmakt\u0131r. Bir bina in\u015fa etmeden \u00f6nce sa\u011flam bir temel atman\u0131z gerekti\u011fi gibi, bir veritaban\u0131 tasarlarken de normalizasyon, o sa\u011flam temeli olu\u015fturman\u0131n anahtar\u0131d\u0131r.\n    <\/p>\n<p>\n        Normalizasyon s\u00fcrecine dalmadan \u00f6nce, baz\u0131 temel terimleri anlamak b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r:\n    <\/p>\n<ul>\n<li>\n            <strong>Atomik Veri:<\/strong> Bir h\u00fccredeki verinin daha k\u00fc\u00e7\u00fck, anlaml\u0131 par\u00e7alara b\u00f6l\u00fcnemeyecek kadar tekil ve b\u00f6l\u00fcnemez olmas\u0131 durumudur. \u00d6rne\u011fin, &#8216;Tam Ad\u0131&#8217; yerine &#8216;Ad&#8217; ve &#8216;Soyad&#8217; ayr\u0131 ayr\u0131 atomik verilerdir. Bu, verilerin daha net ve tutarl\u0131 bir \u015fekilde y\u00f6netilmesini sa\u011flar.\n        <\/li>\n<li>\n            <strong>Anahtar (Key):<\/strong> Bir tabloda bir veya daha fazla s\u00fctunun birle\u015fimidir ve bir kayd\u0131 benzersiz \u015fekilde tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<ul>\n<li>\n                    <strong>Birincil Anahtar (Primary Key):<\/strong> Bir tablodaki her sat\u0131r\u0131 benzersiz bir \u015fekilde tan\u0131mlayan bir veya daha fazla s\u00fctun k\u00fcmesidir. Bo\u015f de\u011fer (NULL) i\u00e7eremez ve de\u011feri tekrar edemez.\n                <\/li>\n<li>\n                    <strong>Bile\u015fik Anahtar (Composite Key):<\/strong> \u0130ki veya daha fazla s\u00fctunun birincil anahtar olarak bir araya gelmesiyle olu\u015fur. Tek bir s\u00fctun yeterli benzersizli\u011fi sa\u011flamad\u0131\u011f\u0131nda kullan\u0131l\u0131r.\n                <\/li>\n<li>\n                    <strong>Yabanc\u0131 Anahtar (Foreign Key):<\/strong> Bir tablodaki birincil anahtar\u0131 ba\u015fka bir tabloda referans alan s\u00fctun veya s\u00fctun k\u00fcmesidir. Tablolar aras\u0131ndaki ili\u015fkiyi kurar ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flar. \u00d6rne\u011fin, &#8216;Sipari\u015fler&#8217; tablosundaki &#8216;M\u00fc\u015fteri ID&#8217;si&#8217; s\u00fctunu, &#8216;M\u00fc\u015fteriler&#8217; tablosunun &#8216;M\u00fc\u015fteri ID&#8217;si&#8217; birincil anahtar\u0131na bir yabanc\u0131 anahtar olabilir.\n                <\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong>Fonksiyonel Ba\u011f\u0131ml\u0131l\u0131k (Functional Dependency):<\/strong> Bir tablodaki bir s\u00fctunun (veya s\u00fctun k\u00fcmesinin) de\u011feri, ba\u015fka bir s\u00fctunun (veya s\u00fctun k\u00fcmesinin) de\u011ferini benzersiz bir \u015fekilde belirlemesi durumudur. A -> B \u015feklinde g\u00f6sterilir, yani A, B&#8217;yi fonksiyonel olarak belirler. \u00d6rne\u011fin, &#8216;TC Kimlik Numaras\u0131&#8217; -> &#8216;Ad Soyad&#8217;.\n        <\/li>\n<li>\n            <strong>Ge\u00e7i\u015fken Ba\u011f\u0131ml\u0131l\u0131k (Transitive Dependency):<\/strong> Birincil anahtar d\u0131\u015f\u0131ndaki bir s\u00fctunun, yine birincil anahtar d\u0131\u015f\u0131ndaki ba\u015fka bir s\u00fctuna ba\u011f\u0131ml\u0131 olmas\u0131 durumudur. Yani, A -> B ve B -> C ili\u015fkisi varsa, A -> C bir ge\u00e7i\u015fken ba\u011f\u0131ml\u0131l\u0131kt\u0131r. Bu t\u00fcr ba\u011f\u0131ml\u0131l\u0131klar genellikle 3. Normal Form&#8217;da ele al\u0131n\u0131r.\n        <\/li>\n<\/ul>\n<p>\n        Bu terimler, normalizasyonun farkl\u0131 seviyelerini (Normal Formlar) anlarken s\u00fcrekli kar\u015f\u0131m\u0131za \u00e7\u0131kacak yap\u0131 ta\u015flar\u0131d\u0131r. Normal formlar (1NF, 2NF, 3NF ve daha fazlas\u0131), veritaban\u0131 tasar\u0131mc\u0131lar\u0131na veritabanlar\u0131n\u0131 ad\u0131m ad\u0131m daha d\u00fczenli ve verimli hale getirme konusunda rehberlik eder. Her bir normal form, bir \u00f6nceki formun gerekliliklerini yerine getirir ve ek k\u0131s\u0131tlamalar getirerek veritaban\u0131n\u0131n kalitesini art\u0131r\u0131r. Bu kavramlar\u0131 sindirmek, sa\u011fl\u0131kl\u0131 bir veritaban\u0131 altyap\u0131s\u0131 kurman\u0131n ilk ve en \u00f6nemli ad\u0131m\u0131d\u0131r.\n    <\/p>\n<h2>Veri B\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fcn \u0130lk Ad\u0131m\u0131: 1NF Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>\n        Birinci Normal Form (1NF), veritaban\u0131 normalizasyonunun ilk ve en temel ad\u0131m\u0131d\u0131r. Bu seviye, tablolar\u0131n\u0131z\u0131n temel yap\u0131sal gerekliliklerini kar\u015f\u0131lad\u0131\u011f\u0131ndan emin olman\u0131z\u0131 sa\u011flar. Bir tablonun 1NF&#8217;de olabilmesi i\u00e7in kar\u015f\u0131lamas\u0131 gereken iki ana kural vard\u0131r:\n    <\/p>\n<ol>\n<li>\n            <strong>Her h\u00fccre atomik (b\u00f6l\u00fcnemez) de\u011ferler i\u00e7ermelidir:<\/strong> Yani, bir h\u00fccrede birden fazla de\u011fer (\u00f6rne\u011fin, bir h\u00fccrede birden fazla telefon numaras\u0131 veya bir \u00fcr\u00fcn listesi) veya virg\u00fclle ayr\u0131lm\u0131\u015f listeler olmamal\u0131d\u0131r. Her s\u00fctun tek bir bilgi par\u00e7as\u0131 i\u00e7ermelidir.\n        <\/li>\n<li>\n            <strong>Tekrarlayan gruplar olmamal\u0131d\u0131r:<\/strong> Tabloda ayn\u0131 t\u00fcrden verileri i\u00e7eren birden fazla s\u00fctun (\u00f6rne\u011fin, \u00dcr\u00fcn1, \u00dcr\u00fcn2, \u00dcr\u00fcn3) veya ayr\u0131 bir tabloya ta\u015f\u0131nmas\u0131 gereken ili\u015fkili veri gruplar\u0131 bulunmamal\u0131d\u0131r.\n        <\/li>\n<\/ol>\n<p>\n        \u015eimdi bu kurallar\u0131, ger\u00e7ek d\u00fcnya senaryolar\u0131ndan bir \u00f6rnekle daha iyi anlayal\u0131m. Diyelim ki, bir e-ticaret siteniz var ve m\u00fc\u015fterilerin sipari\u015flerini takip etmek istiyorsunuz. \u0130lk tasla\u011f\u0131n\u0131z a\u015fa\u011f\u0131daki gibi &#8220;Sipari\u015fler&#8221; tablosu olabilir:\n    <\/p>\n<h3>1NF \u00d6ncesi Durum (Unnormalized Table)<\/h3>\n<pre><code class=\"language-sql\">\nCREATE TABLE Siparisler_Unnormalized (\n    SiparisID INT PRIMARY KEY,\n    MusteriAdi VARCHAR(100),\n    MusteriAdresi VARCHAR(255),\n    SiparisTarihi DATE,\n    Urunler VARCHAR(500), -- Virg\u00fclle ayr\u0131lm\u0131\u015f \u00fcr\u00fcnler ve adetleri (\u00f6rn: \"Laptop (1), Mouse (2)\")\n    ToplamTutar DECIMAL(10, 2)\n);\n\nINSERT INTO Siparisler_Unnormalized (SiparisID, MusteriAdi, MusteriAdresi, SiparisTarihi, Urunler, ToplamTutar) VALUES\n(101, 'Ay\u015fe Y\u0131lmaz', '\u0130stanbul, T\u00fcrkiye', '2023-10-26', 'Kitap (2), Defter (1)', 75.00),\n(102, 'Can Demir', 'Ankara, T\u00fcrkiye', '2023-10-27', 'Kalem (5), Silgi (3), \u00c7anta (1)', 250.00),\n(103, 'Ay\u015fe Y\u0131lmaz', '\u0130stanbul, T\u00fcrkiye', '2023-10-28', 'Kitap (1)', 50.00);\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu tabloda, \"Urunler\" s\u00fctunu atomik de\u011fil \u00e7\u00fcnk\u00fc birden fazla \u00fcr\u00fcn ve adet bilgisini birle\u015ftirilmi\u015f bir metin olarak tutuyor. Ayr\u0131ca, \"Ay\u015fe Y\u0131lmaz\"\u0131n iki farkl\u0131 sipari\u015fi oldu\u011fu i\u00e7in m\u00fc\u015fteri bilgileri (MusteriAdi, MusteriAdresi) tekrar ediyor. Bu, 1NF kurallar\u0131n\u0131 ihlal eden bir durumdur. Bu yap\u0131da, belirli bir \u00fcr\u00fcn\u00fc i\u00e7eren t\u00fcm sipari\u015fleri bulmak veya bir \u00fcr\u00fcn\u00fcn ortalama sat\u0131\u015f fiyat\u0131n\u0131 hesaplamak gibi i\u015flemler olduk\u00e7a zor ve hataya a\u00e7\u0131k olacakt\u0131r. Veri g\u00fcncellemesi de problematik hale gelir; \u00f6rne\u011fin, bir \u00fcr\u00fcn\u00fcn ad\u0131n\u0131 de\u011fi\u015ftirmek istedi\u011finizde t\u00fcm \"Urunler\" alanlar\u0131n\u0131 manuel olarak taraman\u0131z ve de\u011fi\u015ftirmeniz gerekir ki bu s\u00fcrd\u00fcr\u00fclebilir bir yakla\u015f\u0131m de\u011fildir.\n    <\/p>\n<h3>1NF'ye Ge\u00e7i\u015f: Tablolar\u0131 Atomik Hale Getirme ve Tekrarlayan Gruplar\u0131 Ay\u0131rma<\/h3>\n<p>\n        1NF'yi sa\u011flamak i\u00e7in, \"Urunler\" s\u00fctununu atomik hale getirmeli ve m\u00fc\u015fteri bilgilerini ayr\u0131 bir tabloya ta\u015f\u0131mal\u0131y\u0131z. Bu, her bir \u00fcr\u00fcn\u00fcn ayr\u0131 bir sat\u0131rda yer ald\u0131\u011f\u0131 yeni bir tablo olu\u015fturarak ve m\u00fc\u015fteri bilgilerini de kendi tablosunda tutarak ger\u00e7ekle\u015fir.\n    <\/p>\n<pre><code class=\"language-sql\">\n-- Ad\u0131m 1: M\u00fc\u015fteri bilgilerini ayr\u0131 bir tabloya ta\u015f\u0131y\u0131n\nCREATE TABLE Musteriler (\n    MusteriID INT PRIMARY KEY IDENTITY(1,1), -- Otomatik artan ID\n    MusteriAdi VARCHAR(100),\n    MusteriAdresi VARCHAR(255)\n);\n\n-- Ad\u0131m 2: Sipari\u015fler tablosunu g\u00fcncelleyin ve m\u00fc\u015fteri ili\u015fkisini kurun\nCREATE TABLE Siparisler_1NF (\n    SiparisID INT PRIMARY KEY,\n    MusteriID INT, -- Yabanc\u0131 anahtar\n    SiparisTarihi DATE,\n    ToplamTutar DECIMAL(10, 2),\n    FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID)\n);\n\n-- Ad\u0131m 3: Sipari\u015f detaylar\u0131n\u0131 ayr\u0131 bir tabloya ta\u015f\u0131y\u0131n\nCREATE TABLE SiparisDetaylari_1NF (\n    SiparisDetayID INT PRIMARY KEY IDENTITY(1,1),\n    SiparisID INT, -- Yabanc\u0131 anahtar\n    UrunAdi VARCHAR(100),\n    Adet INT,\n    BirimFiyat DECIMAL(10, 2), -- Her \u00fcr\u00fcn\u00fcn birim fiyat\u0131n\u0131 tutmak i\u00e7in eklendi\n    FOREIGN KEY (SiparisID) REFERENCES Siparisler_1NF(SiparisID)\n);\n\n-- \u00d6rnek veri ekleme (ger\u00e7ekle\u015ftirilirken mant\u0131ksal olarak ayr\u0131\u015ft\u0131rma yap\u0131l\u0131r)\n-- Musteriler tablosuna veri ekleme\nINSERT INTO Musteriler (MusteriAdi, MusteriAdresi) VALUES\n('Ay\u015fe Y\u0131lmaz', '\u0130stanbul, T\u00fcrkiye'),\n('Can Demir', 'Ankara, T\u00fcrkiye');\n\n-- Sipari\u015fler_1NF tablosuna veri ekleme (M\u00fc\u015fteri ID'lerini kullanarak)\nINSERT INTO Siparisler_1NF (SiparisID, MusteriID, SiparisTarihi, ToplamTutar) VALUES\n(101, (SELECT MusteriID FROM Musteriler WHERE MusteriAdi = 'Ay\u015fe Y\u0131lmaz'), '2023-10-26', 75.00),\n(102, (SELECT MusteriID FROM Musteriler WHERE MusteriAdi = 'Can Demir'), '2023-10-27', 250.00),\n(103, (SELECT MusteriID FROM Musteriler WHERE MusteriAdi = 'Ay\u015fe Y\u0131lmaz'), '2023-10-28', 50.00);\n\n-- SiparisDetaylari_1NF tablosuna veri ekleme\nINSERT INTO SiparisDetaylari_1NF (SiparisID, UrunAdi, Adet, BirimFiyat) VALUES\n(101, 'Kitap', 2, 25.00),\n(101, 'Defter', 1, 25.00),\n(102, 'Kalem', 5, 10.00),\n(102, 'Silgi', 3, 5.00),\n(102, '\u00c7anta', 1, 150.00),\n(103, 'Kitap', 1, 50.00);\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu yeni tasar\u0131mda:\n    <\/p>\n<ul>\n<li>\n            <strong>Musteriler<\/strong> tablosu, her m\u00fc\u015fterinin bilgilerini benzersiz bir <code>MusteriID<\/code> ile tutar.\n        <\/li>\n<li>\n            <strong>Siparisler_1NF<\/strong> tablosu, her sipari\u015fin ana bilgilerini ve ilgili <code>MusteriID<\/code>'sini i\u00e7erir.\n        <\/li>\n<li>\n            <strong>SiparisDetaylari_1NF<\/strong> tablosu, her sipari\u015fin i\u00e7erdi\u011fi \u00fcr\u00fcnlerin atomik bilgilerini (<code>UrunAdi<\/code>, <code>Adet<\/code>, <code>BirimFiyat<\/code>) ayr\u0131 ayr\u0131 tutar. Her sat\u0131r, bir sipari\u015fteki tek bir \u00fcr\u00fcn\u00fc temsil eder. Bu, \"Urunler\" s\u00fctunundaki tekrarlayan gruplar\u0131 ortadan kald\u0131r\u0131r ve her h\u00fccrenin atomik bir de\u011fer i\u00e7ermesini sa\u011flar.\n        <\/li>\n<\/ul>\n<p>\n        Art\u0131k her bir h\u00fccre tek bir bilgi i\u00e7eriyor ve tekrar eden gruplar yok. Bu, 1NF'nin temel gerekliliklerini kar\u015f\u0131lamaktad\u0131r. Veritaban\u0131m\u0131z, ilk ad\u0131mdan ba\u015flayarak daha d\u00fczenli ve y\u00f6netilebilir bir yap\u0131ya kavu\u015fmu\u015ftur. Bu, hem veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc art\u0131r\u0131r hem de sorgu yazmay\u0131 ve veri analizini kolayla\u015ft\u0131r\u0131r.\n    <\/p>\n<h2>Tam Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n S\u0131rr\u0131: 2NF'ye Ge\u00e7i\u015f Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>\n        \u0130kinci Normal Form (2NF), veritaban\u0131 normalizasyonunda bir ad\u0131m daha ileri gitmeyi temsil eder. Bir tablonun 2NF'de olabilmesi i\u00e7in \u00f6ncelikle 1NF'de olmas\u0131 gerekir. 1NF'nin gerekliliklerini kar\u015f\u0131lad\u0131ktan sonra, 2NF'nin ana kural\u0131 devreye girer:\n    <\/p>\n<ul>\n<li>\n            <strong>Birincil anahtar\u0131n par\u00e7as\u0131na k\u0131smi fonksiyonel ba\u011f\u0131ml\u0131l\u0131k olmamal\u0131d\u0131r:<\/strong> Bu, tablonun birincil anahtar\u0131 birden fazla s\u00fctundan (bile\u015fik anahtar) olu\u015fuyorsa, birincil anahtar olmayan herhangi bir s\u00fctunun, anahtar\u0131n tamam\u0131na ba\u011fl\u0131 olmas\u0131 gerekti\u011fi anlam\u0131na gelir. Anahtar\u0131n sadece bir par\u00e7as\u0131na ba\u011fl\u0131 olmamal\u0131d\u0131r.\n        <\/li>\n<\/ul>\n<p>\n        Bu kural\u0131 anlamak i\u00e7in, 1NF seviyesindeki \"SiparisDetaylari_1NF\" tablomuzu tekrar inceleyelim.\n    <\/p>\n<h3>2NF \u00d6ncesi Durum (1NF'de Ama 2NF'de De\u011fil)<\/h3>\n<pre><code class=\"language-sql\">\nCREATE TABLE SiparisDetaylari_1NF (\n    SiparisDetayID INT PRIMARY KEY IDENTITY(1,1), -- Bu tek bir birincil anahtar, bu y\u00fczden k\u0131smi ba\u011f\u0131ml\u0131l\u0131k i\u00e7in yetersiz\n    SiparisID INT,\n    UrunAdi VARCHAR(100),\n    Adet INT,\n    BirimFiyat DECIMAL(10, 2),\n    FOREIGN KEY (SiparisID) REFERENCES Siparisler_1NF(SiparisID)\n);\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Yukar\u0131daki \"SiparisDetaylari_1NF\" tablosunda <code>SiparisDetayID<\/code> tek birincil anahtard\u0131r. Bu durumda, herhangi bir k\u0131smi ba\u011f\u0131ml\u0131l\u0131k testi yapmak do\u011frudan m\u00fcmk\u00fcn de\u011fildir \u00e7\u00fcnk\u00fc tan\u0131m gere\u011fi k\u0131smi ba\u011f\u0131ml\u0131l\u0131k, <em>bile\u015fik birincil anahtar\u0131n<\/em> bir par\u00e7as\u0131na olan ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ifade eder. Ancak, bu tablo asl\u0131nda dolayl\u0131 olarak 2NF ihlali potansiyeli ta\u015f\u0131maktad\u0131r, \u00e7\u00fcnk\u00fc <code>UrunAdi<\/code> ve <code>BirimFiyat<\/code> gibi bilgiler asl\u0131nda do\u011frudan <code>UrunID<\/code>'ye ba\u011fl\u0131 olmal\u0131d\u0131r, <code>SiparisDetayID<\/code>'ye de\u011fil. E\u011fer <code>SiparisDetayID<\/code> yerine <code>(SiparisID, UrunAdi)<\/code> veya <code>(SiparisID, UrunID)<\/code> bile\u015fik birincil anahtar olsayd\u0131, sorun daha belirgin olurdu. \u00d6rne\u011fin, <code>UrunAdi<\/code> ve <code>BirimFiyat<\/code>, sadece <code>UrunID<\/code>'ye (ve dolay\u0131s\u0131yla <code>SiparisID<\/code>'ye de\u011fil) ba\u011fl\u0131d\u0131r.\n    <\/p>\n<p>\n        Bu senaryoyu daha net hale getirmek i\u00e7in, bir an i\u00e7in <code>SiparisDetayID<\/code>'nin olmad\u0131\u011f\u0131n\u0131 ve birincil anahtar\u0131n <code>(SiparisID, UrunAdi)<\/code> oldu\u011funu varsayal\u0131m. Bu durumda, <code>BirimFiyat<\/code> s\u00fctunu sadece <code>UrunAdi<\/code>'na (birincil anahtar\u0131n bir par\u00e7as\u0131) ba\u011fl\u0131d\u0131r, <code>SiparisID<\/code>'ye de\u011fil. Bu bir k\u0131smi ba\u011f\u0131ml\u0131l\u0131kt\u0131r ve 2NF ihlalidir. Her \u00fcr\u00fcn\u00fcn kendi ad\u0131 ve fiyat\u0131 vard\u0131r ve bu bilgi bir sipari\u015fin veya sipari\u015f detay\u0131n\u0131n bir par\u00e7as\u0131 olmak zorunda de\u011fildir; bu, \u00fcr\u00fcn\u00fcn kendi \u00f6zelli\u011fidir.\n    <\/p>\n<h3>2NF'ye Ge\u00e7i\u015f: K\u0131smi Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Ortadan Kald\u0131rma<\/h3>\n<p>\n        2NF'ye ula\u015fmak i\u00e7in, birincil anahtar\u0131n sadece bir k\u0131sm\u0131na ba\u011fl\u0131 olan s\u00fctunlar\u0131 ayr\u0131 bir tabloya ta\u015f\u0131mam\u0131z gerekir. \u00d6rne\u011fimizde, <code>UrunAdi<\/code> ve <code>BirimFiyat<\/code> asl\u0131nda bir \u00fcr\u00fcn\u00fcn \u00f6zellikleridir. Bu nedenle, bunlar\u0131 ayr\u0131 bir \"Urunler\" tablosuna ta\u015f\u0131mal\u0131y\u0131z.\n    <\/p>\n<pre><code class=\"language-sql\">\n-- Ad\u0131m 1: Urunler tablosunu olu\u015fturun\nCREATE TABLE Urunler (\n    UrunID INT PRIMARY KEY IDENTITY(1,1), -- Otomatik artan ID\n    UrunAdi VARCHAR(100) UNIQUE, -- Her \u00fcr\u00fcn ad\u0131n\u0131n benzersiz olmas\u0131n\u0131 sa\u011flay\u0131n\n    BirimFiyat DECIMAL(10, 2)\n);\n\n-- Ad\u0131m 2: SiparisDetaylari tablosunu g\u00fcncelleyin, UrunAdi ve BirimFiyat'\u0131 \u00e7\u0131kar\u0131n\n-- ve Urunler tablosuyla ili\u015fki kurun\nCREATE TABLE SiparisDetaylari_2NF (\n    SiparisDetayID INT PRIMARY KEY IDENTITY(1,1),\n    SiparisID INT, -- Yabanc\u0131 anahtar (Siparisler_1NF tablosuna)\n    UrunID INT, -- Yabanc\u0131 anahtar (Urunler tablosuna)\n    Adet INT,\n    FOREIGN KEY (SiparisID) REFERENCES Siparisler_1NF(SiparisID),\n    FOREIGN KEY (UrunID) REFERENCES Urunler(UrunID)\n    -- Alternatif olarak, (SiparisID, UrunID) bile\u015fik birincil anahtar olabilir\n    -- CONSTRAINT PK_SiparisDetaylari PRIMARY KEY (SiparisID, UrunID)\n);\n\n-- \u00d6rnek veri ekleme (eskiden olan verileri yeni yap\u0131ya uygun hale getirelim)\n-- Urunler tablosuna veri ekleme\nINSERT INTO Urunler (UrunAdi, BirimFiyat) VALUES\n('Kitap', 25.00),\n('Defter', 25.00),\n('Kalem', 10.00),\n('Silgi', 5.00),\n('\u00c7anta', 150.00);\n\n-- SiparisDetaylari_2NF tablosuna veri ekleme\nINSERT INTO SiparisDetaylari_2NF (SiparisID, UrunID, Adet) VALUES\n(101, (SELECT UrunID FROM Urunler WHERE UrunAdi = 'Kitap'), 2),\n(101, (SELECT UrunID FROM Urunler WHERE UrunAdi = 'Defter'), 1),\n(102, (SELECT UrunID FROM Urunler WHERE UrunAdi = 'Kalem'), 5),\n(102, (SELECT UrunID FROM Urunler WHERE UrunAdi = 'Silgi'), 3),\n(102, (SELECT UrunID FROM Urunler WHERE UrunAdi = '\u00c7anta'), 1),\n(103, (SELECT UrunID FROM Urunler WHERE UrunAdi = 'Kitap'), 1);\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu yeni tasar\u0131mda:\n    <\/p>\n<ul>\n<li>\n            Yeni <strong>Urunler<\/strong> tablosu, her \u00fcr\u00fcn\u00fcn benzersiz kimli\u011fini (<code>UrunID<\/code>), ad\u0131n\u0131 ve birim fiyat\u0131n\u0131 tutar. Bu tablo, \u00fcr\u00fcn bilgilerinin tekrar\u0131n\u0131 \u00f6nler.\n        <\/li>\n<li>\n            <strong>SiparisDetaylari_2NF<\/strong> tablosu art\u0131k <code>UrunAdi<\/code> ve <code>BirimFiyat<\/code> s\u00fctunlar\u0131n\u0131 i\u00e7ermez. Bunun yerine, <code>Urunler<\/code> tablosundaki ilgili \u00fcr\u00fcne bir <code>UrunID<\/code> yabanc\u0131 anahtar\u0131 ile referans verir. Bu, <code>SiparisDetaylari_2NF<\/code> tablosundaki her s\u00fctunun (<code>SiparisID<\/code> ve <code>UrunID<\/code>'den olu\u015fan bile\u015fik anahtar\u0131n bir par\u00e7as\u0131 olsa bile) art\u0131k birincil anahtar\u0131n tamam\u0131na ba\u011fl\u0131 olmas\u0131n\u0131 sa\u011flar.\n        <\/li>\n<\/ul>\n<p>\n        B\u00f6ylece, herhangi bir \u00fcr\u00fcn\u00fcn ad\u0131 veya fiyat\u0131 de\u011fi\u015fti\u011finde, sadece \"Urunler\" tablosundaki ilgili sat\u0131r\u0131 g\u00fcncellemek yeterli olur. Bu de\u011fi\u015fiklik, o \u00fcr\u00fcn\u00fc i\u00e7eren t\u00fcm sipari\u015f detaylar\u0131na otomatik olarak yans\u0131r, veri tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti alt\u0131na al\u0131r ve olas\u0131 hatalar\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. 2NF'ye ge\u00e7i\u015f, veritaban\u0131n\u0131z\u0131 daha d\u00fczenli, tutarl\u0131 ve y\u00f6netilebilir hale getirme yolunda g\u00fc\u00e7l\u00fc bir ad\u0131md\u0131r.\n    <\/p>\n<h2>Ge\u00e7i\u015fken Ba\u011f\u0131ml\u0131l\u0131klara Son: 3NF'nin \u00d6nemi ve Uygulamas\u0131<\/h2>\n<p>\n        \u00dc\u00e7\u00fcnc\u00fc Normal Form (3NF), veritaban\u0131 normalizasyonunun en yayg\u0131n ve \u00e7o\u011fu zaman yeterli kabul edilen seviyesidir. Bir tablonun 3NF'de olabilmesi i\u00e7in \u00f6ncelikle 2NF'de olmas\u0131 gerekir. 2NF'nin gerekliliklerini kar\u015f\u0131lad\u0131ktan sonra, 3NF'nin ana kural\u0131 devreye girer:\n    <\/p>\n<ul>\n<li>\n            <strong>Birincil anahtar olmayan herhangi bir s\u00fctun, birincil anahtar olmayan ba\u015fka bir s\u00fctuna ge\u00e7i\u015fken (transitive) ba\u011f\u0131ml\u0131 olmamal\u0131d\u0131r.<\/strong> Yani, A -> B ve B -> C \u015feklinde bir ili\u015fki varsa, A -> C (burada A birincil anahtar ve B, C birincil anahtar olmayan s\u00fctunlard\u0131r) bir ge\u00e7i\u015fken ba\u011f\u0131ml\u0131l\u0131kt\u0131r ve 3NF'yi ihlal eder. K\u0131sacas\u0131, birincil anahtar olmayan bir s\u00fctun, birincil anahtar olmayan ba\u015fka bir s\u00fctunu belirlememelidir.\n        <\/li>\n<\/ul>\n<p>\n        Bu kural\u0131 anlamak i\u00e7in, 1NF ve 2NF ad\u0131mlar\u0131n\u0131 tamamlad\u0131\u011f\u0131m\u0131z \"Siparisler_1NF\" ve \"Musteriler\" tablolar\u0131m\u0131z\u0131 ele alal\u0131m. \u00d6rne\u011fin, \"Musteriler\" tablomuzda bir ge\u00e7i\u015fken ba\u011f\u0131ml\u0131l\u0131k olup olmad\u0131\u011f\u0131n\u0131 kontrol edelim. Mevcut \"Musteriler\" tablomuz zaten 3NF'ye uygun gibi g\u00f6r\u00fcn\u00fcyor, \u00e7\u00fcnk\u00fc her s\u00fctun (<code>MusteriAdi<\/code>, <code>MusteriAdresi<\/code>) do\u011frudan <code>MusteriID<\/code>'ye ba\u011fl\u0131d\u0131r. Ancak, bu kavram\u0131 daha iyi anlatmak ad\u0131na yeni bir senaryo olu\u015ftural\u0131m.\n    <\/p>\n<h3>3NF \u00d6ncesi Durum (2NF'de Ama 3NF'de De\u011fil)<\/h3>\n<p>\n        Diyelim ki, m\u00fc\u015fterilerle ilgili verileri tutarken, ayn\u0131 zamanda hangi m\u00fc\u015fterinin hangi \u015fehirde ya\u015fad\u0131\u011f\u0131n\u0131 ve o \u015fehrin \u00fclke bilgisini de tutmak istiyoruz. Ba\u015flang\u0131\u00e7ta <code>Musteriler<\/code> tablomuz \u015f\u00f6yle g\u00f6r\u00fcnebilir:\n    <\/p>\n<pre><code class=\"language-sql\">\nCREATE TABLE Musteriler_2NF (\n    MusteriID INT PRIMARY KEY IDENTITY(1,1),\n    MusteriAdi VARCHAR(100),\n    MusteriAdres VARCHAR(255),\n    Sehir VARCHAR(50),\n    PostaKodu VARCHAR(10),\n    Ulke VARCHAR(50)\n);\n\nINSERT INTO Musteriler_2NF (MusteriAdi, MusteriAdres, Sehir, PostaKodu, Ulke) VALUES\n('Ay\u015fe Y\u0131lmaz', 'Ana Cad. No:1', '\u0130stanbul', '34000', 'T\u00fcrkiye'),\n('Can Demir', 'G\u00fcl Sok. No:5', 'Ankara', '06000', 'T\u00fcrkiye'),\n('Zeynep Kara', 'Meydan Cad. No:10', '\u0130zmir', '35000', 'T\u00fcrkiye');\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu \"Musteriler_2NF\" tablosunda, <code>MusteriID<\/code> birincil anahtard\u0131r.\n    <\/p>\n<ul>\n<li><code>MusteriID<\/code> -> <code>MusteriAdi<\/code> (Do\u011frudan ba\u011f\u0131ml\u0131l\u0131k)<\/li>\n<li><code>MusteriID<\/code> -> <code>MusteriAdres<\/code> (Do\u011frudan ba\u011f\u0131ml\u0131l\u0131k)<\/li>\n<li><code>MusteriID<\/code> -> <code>Sehir<\/code> (Do\u011frudan ba\u011f\u0131ml\u0131l\u0131k)<\/li>\n<li><code>MusteriID<\/code> -> <code>PostaKodu<\/code> (Do\u011frudan ba\u011f\u0131ml\u0131l\u0131k)<\/li>\n<li><code>MusteriID<\/code> -> <code>Ulke<\/code> (Do\u011frudan ba\u011f\u0131ml\u0131l\u0131k)<\/li>\n<\/ul>\n<p>\n        Ancak, burada bir ge\u00e7i\u015fken ba\u011f\u0131ml\u0131l\u0131k var: <code>Sehir<\/code> s\u00fctunu <code>Ulke<\/code> s\u00fctununu belirleyebilir (yani, <code>Sehir<\/code> -> <code>Ulke<\/code>). Ba\u015fka bir deyi\u015fle, bir \u015fehir genellikle tek bir \u00fclkeye aittir (\u00f6rne\u011fin, '\u0130stanbul' her zaman 'T\u00fcrkiye'dedir). Bu durumda, <code>Ulke<\/code> bilgisi do\u011frudan <code>MusteriID<\/code>'ye de\u011fil, <code>Sehir<\/code>'e (birincil anahtar olmayan bir s\u00fctun) ba\u011fl\u0131d\u0131r. Bu, 3NF ihlalidir. E\u011fer \"\u0130stanbul\" \u015fehrinin \u00fclke bilgisi de\u011fi\u015firse (teorik olarak), bu bilgiyi i\u00e7eren t\u00fcm m\u00fc\u015fteri kay\u0131tlar\u0131nda g\u00fcncelleme yapmam\u0131z gerekir ki bu da veri tekrar\u0131 ve tutars\u0131zl\u0131k potansiyeli yarat\u0131r.\n    <\/p>\n<h3>3NF'ye Ge\u00e7i\u015f: Ge\u00e7i\u015fken Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Ortadan Kald\u0131rma<\/h3>\n<p>\n        3NF'ye ula\u015fmak i\u00e7in, ge\u00e7i\u015fken ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ortadan kald\u0131rmal\u0131y\u0131z. Bunun i\u00e7in, <code>Sehir<\/code> ve <code>Ulke<\/code> gibi birbirini belirleyen s\u00fctunlar\u0131 ayr\u0131 bir tabloya ta\u015f\u0131mam\u0131z gerekir.\n    <\/p>\n<pre><code class=\"language-sql\">\n-- Ad\u0131m 1: Sehirler tablosunu olu\u015fturun\nCREATE TABLE Sehirler (\n    SehirID INT PRIMARY KEY IDENTITY(1,1),\n    SehirAdi VARCHAR(50) UNIQUE,\n    Ulke VARCHAR(50)\n);\n\n-- Ad\u0131m 2: Musteriler tablosunu g\u00fcncelleyin, Sehir ve Ulke s\u00fctunlar\u0131n\u0131 \u00e7\u0131kar\u0131n\n-- ve Sehirler tablosuyla ili\u015fki kurun\nCREATE TABLE Musteriler_3NF (\n    MusteriID INT PRIMARY KEY IDENTITY(1,1),\n    MusteriAdi VARCHAR(100),\n    MusteriAdres VARCHAR(255),\n    PostaKodu VARCHAR(10),\n    SehirID INT, -- Yabanc\u0131 anahtar (Sehirler tablosuna)\n    FOREIGN KEY (SehirID) REFERENCES Sehirler(SehirID)\n);\n\n-- \u00d6rnek veri ekleme\n-- Sehirler tablosuna veri ekleme\nINSERT INTO Sehirler (SehirAdi, Ulke) VALUES\n('\u0130stanbul', 'T\u00fcrkiye'),\n('Ankara', 'T\u00fcrkiye'),\n('\u0130zmir', 'T\u00fcrkiye');\n\n-- Musteriler_3NF tablosuna veri ekleme\nINSERT INTO Musteriler_3NF (MusteriAdi, MusteriAdres, PostaKodu, SehirID) VALUES\n('Ay\u015fe Y\u0131lmaz', 'Ana Cad. No:1', '34000', (SELECT SehirID FROM Sehirler WHERE SehirAdi = '\u0130stanbul')),\n('Can Demir', 'G\u00fcl Sok. No:5', '06000', (SELECT SehirID FROM Sehirler WHERE SehirAdi = 'Ankara')),\n('Zeynep Kara', 'Meydan Cad. No:10', '35000', (SELECT SehirID FROM Sehirler WHERE SehirAdi = '\u0130zmir'));\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu yeni tasar\u0131mda:\n    <\/p>\n<ul>\n<li>\n            Yeni <strong>Sehirler<\/strong> tablosu, her \u015fehrin benzersiz kimli\u011fini (<code>SehirID<\/code>), ad\u0131n\u0131 ve ilgili \u00fclkesini tutar. Bu, \"T\u00fcrkiye\" gibi \u00fclke isimlerinin tekrar etmesini engeller.\n        <\/li>\n<li>\n            <strong>Musteriler_3NF<\/strong> tablosu art\u0131k <code>Sehir<\/code> ve <code>Ulke<\/code> s\u00fctunlar\u0131n\u0131 i\u00e7ermez. Bunun yerine, <code>Sehirler<\/code> tablosundaki ilgili \u015fehre bir <code>SehirID<\/code> yabanc\u0131 anahtar\u0131 ile referans verir. B\u00f6ylece, <code>Musteriler_3NF<\/code> tablosundaki birincil anahtar olmayan t\u00fcm s\u00fctunlar (<code>MusteriAdi<\/code>, <code>MusteriAdres<\/code>, <code>PostaKodu<\/code>, <code>SehirID<\/code>) do\u011frudan <code>MusteriID<\/code>'ye ba\u011fl\u0131d\u0131r ve birincil anahtar olmayan ba\u015fka bir s\u00fctun taraf\u0131ndan belirlenmez.\n        <\/li>\n<\/ul>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: 3NF'ye ula\u015fmak, genellikle veritaban\u0131 tasar\u0131m\u0131nda \"tatl\u0131 nokta\" olarak kabul edilir. \u00c7o\u011fu i\u015f uygulamas\u0131 i\u00e7in 3NF, veri tekrar\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131rken kabul edilebilir bir performans seviyesi sunar. Daha y\u00fcksek normal formlara gitmek, baz\u0131 durumlarda gereksiz karma\u015f\u0131kl\u0131k ve performans d\u00fc\u015f\u00fc\u015f\u00fcne yol a\u00e7abilir.\n    <\/div>\n<p>\n        Bu normalizasyon ad\u0131m\u0131 sayesinde, bir \u015fehrin \u00fclke bilgisi de\u011fi\u015fti\u011finde sadece \"Sehirler\" tablosundaki tek bir sat\u0131r\u0131 g\u00fcncellemek yeterli olur. Bu, veri tutarl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r, depolama alan\u0131ndan tasarruf sa\u011flar ve bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr. 3NF, veritaban\u0131 tasar\u0131m\u0131nda sa\u011flaml\u0131k ve verimlilik i\u00e7in kritik bir ad\u0131md\u0131r.\n    <\/p>\n<h2>Normalizasyonun \u00d6tesi: BCNF ve Denormalizasyon Ne Zaman Gerekir?<\/h2>\n<p>\n        1NF, 2NF ve 3NF, veritaban\u0131 normalizasyonunun temel ta\u015flar\u0131d\u0131r ve \u00e7o\u011fu uygulama i\u00e7in yeterli bir denge sunar. Ancak, daha karma\u015f\u0131k senaryolarda veya belirli performans ihtiya\u00e7lar\u0131nda, BCNF (Boyce-Codd Normal Form) gibi daha kat\u0131 normal formlar veya tam tersi bir yakla\u015f\u0131m olan denormalizasyon g\u00fcndeme gelebilir.\n    <\/p>\n<h3>Boyce-Codd Normal Form (BCNF): Daha S\u0131k\u0131 Bir Kural<\/h3>\n<p>\n        BCNF, 3NF'nin daha s\u0131k\u0131 bir versiyonudur ve baz\u0131 \u00f6zel durumlarda 3NF'nin yetersiz kald\u0131\u011f\u0131 durumlar\u0131 ele al\u0131r. Bir tablonun BCNF'de olmas\u0131 i\u00e7in 3NF'de olmas\u0131 gerekir ve ek olarak, her fonksiyonel ba\u011f\u0131ml\u0131l\u0131k A -> B i\u00e7in, A'n\u0131n bir s\u00fcper anahtar (super key) olmas\u0131 gerekir. S\u00fcper anahtar, bir tablodaki sat\u0131rlar\u0131 benzersiz \u015fekilde tan\u0131mlayabilen herhangi bir s\u00fctun veya s\u00fctun k\u00fcmesidir.\n    <\/p>\n<p>\n        BCNF, \u00f6zellikle birden fazla \u00e7ak\u0131\u015fan ve birincil olmayan anahtara sahip karma\u015f\u0131k tablolar i\u00e7in \u00f6nemlidir. Ancak, \u00e7o\u011fu pratik senaryoda, 3NF'ye ula\u015fmak zaten veri tekrar\u0131n\u0131 ve anomalileri b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ortadan kald\u0131r\u0131r. BCNF, genellikle akademik \u00f6rneklerde veya \u00e7ok \u00f6zel, y\u00fcksek b\u00fct\u00fcnl\u00fck gerektiren veritaban\u0131 tasar\u0131mlar\u0131nda kar\u015f\u0131m\u0131za \u00e7\u0131kar. BCNF'ye zorlamak, baz\u0131 durumlarda tablo say\u0131s\u0131n\u0131 art\u0131rarak sorgu karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 y\u00fckseltebilir.\n    <\/p>\n<h3>Denormalizasyon: Performans \u0130\u00e7in Bilin\u00e7li Tavizler<\/h3>\n<p>\n        Normalizasyon, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve depolama verimlili\u011fini art\u0131r\u0131rken, bazen a\u015f\u0131r\u0131 normalizasyon, sorgu performans\u0131n\u0131 olumsuz etkileyebilir. \u00d6zellikle raporlama, veri analizi (BI) veya y\u00fcksek okuma trafi\u011fine sahip uygulamalarda, birden fazla tablo aras\u0131nda yap\u0131lan JOIN i\u015flemleri, sorgu s\u00fcrelerini uzatabilir. \u0130\u015fte bu noktada denormalizasyon devreye girer.\n    <\/p>\n<p>\n        Denormalizasyon, bilerek veri tekrar\u0131 olu\u015fturarak ve normalizasyon kurallar\u0131ndan k\u0131smen saparak okuma performans\u0131n\u0131 art\u0131rma stratejisidir. Bu, genellikle karma\u015f\u0131k JOIN i\u015flemlerinden ka\u00e7\u0131nmak ve verileri tek bir tabloda daha h\u0131zl\u0131 eri\u015filebilir hale getirmek i\u00e7in yap\u0131l\u0131r.\n    <\/p>\n<h4>Denormalizasyon Ne Zaman Tercih Edilir?<\/h4>\n<ul>\n<li>\n            <strong>Raporlama Veritabanlar\u0131:<\/strong> B\u00fcy\u00fck veri setleri \u00fczerinde s\u0131k\u00e7a karma\u015f\u0131k raporlar olu\u015fturuluyorsa, denormalize edilmi\u015f bir yap\u0131 sorgular\u0131 h\u0131zland\u0131rabilir.\n        <\/li>\n<li>\n            <strong>Veri Ambarlar\u0131 (Data Warehouses):<\/strong> OLAP (Online Analytical Processing) ortamlar\u0131nda, denormalize edilmi\u015f y\u0131ld\u0131z \u015femalar\u0131 veya kar tanesi \u015femalar\u0131 yayg\u0131n olarak kullan\u0131l\u0131r.\n        <\/li>\n<li>\n            <strong>Y\u00fcksek Okuma Oran\u0131, D\u00fc\u015f\u00fck Yazma Oran\u0131:<\/strong> Verilerin nadiren g\u00fcncellendi\u011fi ancak \u00e7ok s\u0131k okundu\u011fu durumlarda denormalizasyon mant\u0131kl\u0131 olabilir.\n        <\/li>\n<li>\n            <strong>Performans Kritik Uygulamalar:<\/strong> Mili saniyelerin bile \u00f6nemli oldu\u011fu, h\u0131zl\u0131 yan\u0131t s\u00fcreleri gerektiren uygulamalarda, JOIN maliyetlerinden ka\u00e7\u0131nmak i\u00e7in kullan\u0131labilir.\n        <\/li>\n<\/ul>\n<p>\n        <strong>Vaka Analizi: E-Ticaret Sepeti<\/strong><br \/>\n        <br \/>\n        Normalde, bir al\u0131\u015fveri\u015f sepeti uygulamas\u0131nda \u00fcr\u00fcn ad\u0131, fiyat\u0131 gibi bilgiler <code>Urunler<\/code> tablosundan JOIN ile \u00e7ekilir. Ancak, her sipari\u015f detay\u0131na \u00fcr\u00fcn ad\u0131 ve birim fiyat\u0131n\u0131 do\u011frudan kaydetmek (denormalizasyon), sipari\u015f ge\u00e7mi\u015fini g\u00f6r\u00fcnt\u00fclerken ek JOIN'leri ortadan kald\u0131r\u0131r ve sipari\u015f an\u0131ndaki \u00fcr\u00fcn bilgilerini dondurarak daha sonraki \u00fcr\u00fcn de\u011fi\u015fikliklerinden etkilenmemesini sa\u011flar. Bu, tarihsel veri b\u00fct\u00fcnl\u00fc\u011f\u00fc a\u00e7\u0131s\u0131ndan da faydal\u0131d\u0131r. Elbette, bu durum \u00fcr\u00fcn bilgilerinin tekrar etmesine neden olur, ancak okunabilirlik ve performans kazanc\u0131 i\u00e7in kabul edilebilir bir tavizdir.\n    <\/p>\n<p>\n        Unutulmamal\u0131d\u0131r ki denormalizasyon, veri tekrar\u0131n\u0131 art\u0131rd\u0131\u011f\u0131 i\u00e7in g\u00fcncelleme anomalileri ve veri tutars\u0131zl\u0131\u011f\u0131 riskini de beraberinde getirir. Bu nedenle, denormalizasyon karar\u0131 dikkatli bir analiz ve performans testleri sonucunda verilmelidir. Normalizasyon ve denormalizasyon aras\u0131nda do\u011fru dengeyi bulmak, veritaban\u0131 tasar\u0131m\u0131n\u0131n en kritik y\u00f6nlerinden biridir.\n    <\/p>\n<h3>Mobil Uyumlu Veritaban\u0131 Tasar\u0131m\u0131 ve Responsive \u0130\u00e7erik \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h3>\n<p>\n        Modern uygulamalar genellikle mobil cihazlar \u00fczerinden eri\u015fildi\u011fi i\u00e7in, veritaban\u0131 tasar\u0131m\u0131n\u0131n dolayl\u0131 olarak mobil uyumlulu\u011fu desteklemesi \u00f6nemlidir. \u0130yi normalize edilmi\u015f bir veritaban\u0131, mobil uygulamalar\u0131n ihtiya\u00e7 duydu\u011fu veriyi daha h\u0131zl\u0131 ve daha az veri transferiyle almas\u0131na olanak tan\u0131r. \u00c7\u00fcnk\u00fc veritaban\u0131 sorgular\u0131 daha verimli \u00e7al\u0131\u015f\u0131r ve sadece gerekli olan atomik veri par\u00e7alar\u0131 \u00e7ekilir. Bu, mobil cihazlar\u0131n s\u0131n\u0131rl\u0131 bant geni\u015fli\u011fi ve i\u015flem g\u00fcc\u00fc g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda kritik bir avantajd\u0131r.\n    <\/p>\n<p>\n        Ayr\u0131ca, bu makale gibi web i\u00e7eri\u011fi olu\u015ftururken, sunulan bilginin mobil cihazlarda da kolayca okunabilir ve eri\u015filebilir olmas\u0131 \u00f6nemlidir. \u00d6rne\u011fin, kod bloklar\u0131 veya tablolar gibi teknik i\u00e7eriklerin k\u00fc\u00e7\u00fck ekranlarda dahi d\u00fczg\u00fcn g\u00f6r\u00fcnmesi i\u00e7in HTML ve CSS'i responsive olarak tasarlamak gerekir.\n    <\/p>\n<pre><code class=\"language-css\">\n\/* Genel d\u00fczen i\u00e7in responsive ayarlar *\/\nbody {\n    font-family: Arial, sans-serif;\n    line-height: 1.6;\n    margin: 0 auto;\n    max-width: 900px; \/* Geni\u015f ekranlarda i\u00e7eri\u011fi merkezler *\/\n    padding: 15px;\n}\n\n\/* Tablolar\u0131n mobil uyumlu olmas\u0131 i\u00e7in *\/\ntable {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 1em;\n    display: block; \/* K\u00fc\u00e7\u00fck ekranlarda kayd\u0131r\u0131labilir yapar *\/\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n}\n\nth, td {\n    padding: 8px;\n    border: 1px solid #ddd;\n    text-align: left;\n    white-space: nowrap; \/* \u0130\u00e7eri\u011fin sar\u0131lmas\u0131n\u0131 engeller, yatay kayd\u0131rma sa\u011flar *\/\n}\n\n\/* Kod bloklar\u0131 i\u00e7in mobil uyumlu ayarlar *\/\npre {\n    background-color: #f4f4f4;\n    padding: 10px;\n    border-radius: 5px;\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu ekler *\/\n    -webkit-overflow-scrolling: touch;\n}\n\n\/* Mobil cihazlar i\u00e7in \u00f6zel stiller (\u00f6rnek media query) *\/\n@media (max-width: 768px) {\n    h2 {\n        font-size: 1.5em;\n    }\n    h3 {\n        font-size: 1.2em;\n    }\n    \/* Tablo h\u00fccrelerini daha k\u00fc\u00e7\u00fck cihazlarda dikey istiflemek i\u00e7in *\/\n    \/* td:before {\n        content: attr(data-label);\n        float: left;\n        font-weight: bold;\n        text-transform: uppercase;\n        margin-right: 10px;\n    } *\/\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu t\u00fcr <code>@media<\/code> kurallar\u0131, taray\u0131c\u0131n\u0131n pencere boyutuna g\u00f6re farkl\u0131 CSS stilleri uygulamas\u0131n\u0131 sa\u011flar, b\u00f6ylece i\u00e7eri\u011finiz her cihazda optimal \u015fekilde g\u00f6r\u00fcnt\u00fclenir. Veritaban\u0131 normalizasyonu, arka plandaki veri mimarisini g\u00fc\u00e7lendirirken, bu t\u00fcr front-end responsive teknikler de kullan\u0131c\u0131 deneyimini do\u011frudan etkiler.\n    <\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>\n        Veritaban\u0131 normalizasyonu, veri tekrar\u0131n\u0131 en aza indirmek, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak ve potansiyel anomalileri gidermek i\u00e7in hayati bir s\u00fcre\u00e7tir. Bu rehberde, 1NF, 2NF ve 3NF'nin temel prensiplerini ve SQL \u00f6rnekleriyle nas\u0131l uygulanaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceledik. Normalizasyon sayesinde, veritabanlar\u0131n\u0131z daha sa\u011flam, tutarl\u0131 ve y\u00f6netilebilir hale gelir. Ancak, normalizasyonun her zaman mutlak bir kural olmad\u0131\u011f\u0131n\u0131, bazen performans gereksinimleri do\u011frultusunda denormalizasyon gibi bilin\u00e7li tavizler verilmesi gerekti\u011fini de vurgulad\u0131k. \u00d6nemli olan, projenizin \u00f6zel ihtiya\u00e7lar\u0131n\u0131 ve hedeflerini g\u00f6z \u00f6n\u00fcnde bulundurarak do\u011fru dengeyi bulmakt\u0131r. Sa\u011fl\u0131kl\u0131 bir veritaban\u0131, uygulaman\u0131z\u0131n uzun vadeli ba\u015far\u0131s\u0131n\u0131n temelini olu\u015fturur.\n    <\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>Normalizasyon her zaman gerekli midir?<\/strong><\/p>\n<p>\n                Hay\u0131r, her zaman gerekli de\u011fildir. \u00d6zellikle k\u00fc\u00e7\u00fck, basit veritabanlar\u0131 veya sadece bir kez yaz\u0131l\u0131p binlerce kez okunacak veri depolar\u0131 i\u00e7in a\u015f\u0131r\u0131 normalizasyon gereksiz karma\u015f\u0131kl\u0131k ve performans d\u00fc\u015f\u00fc\u015f\u00fcne neden olabilir. Ancak, \u00e7o\u011fu i\u015f uygulamas\u0131 i\u00e7in veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve tutarl\u0131l\u0131k a\u00e7\u0131s\u0131ndan normalizasyon \u015fiddetle tavsiye edilir.\n            <\/p>\n<\/li>\n<li>\n            <strong>Denormalizasyon ne zaman tercih edilmeli?<\/strong><\/p>\n<p>\n                Denormalizasyon, genellikle raporlama, veri analizi veya y\u00fcksek okuma trafi\u011fine sahip sistemlerde, sorgu performans\u0131n\u0131 art\u0131rmak amac\u0131yla tercih edilir. JOIN i\u015flemlerinin maliyetini azaltmak ve veriye daha h\u0131zl\u0131 eri\u015fmek istendi\u011finde, veri tekrar\u0131 pahas\u0131na denormalizasyona gidilebilir. Ancak, bu durum veri tutars\u0131zl\u0131\u011f\u0131 riskini art\u0131r\u0131r ve dikkatli y\u00f6netim gerektirir.\n            <\/p>\n<\/li>\n<li>\n            <strong>Hangi normal form seviyesi idealdir?<\/strong><\/p>\n<p>\n                \u00c7o\u011fu durumda, \u00dc\u00e7\u00fcnc\u00fc Normal Form (3NF) ideal kabul edilir. 3NF, veri tekrar\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131rken, genellikle kabul edilebilir bir performans seviyesi sunar. Daha y\u00fcksek normal formlar (BCNF gibi) daha az yayg\u0131n olarak gerekli olup, ek karma\u015f\u0131kl\u0131k getirebilir. Projenizin \u00f6zel gereksinimleri ideal seviyeyi belirleyecektir.\n            <\/p>\n<\/li>\n<li>\n            <strong>Normalizasyonun performansa etkisi nedir?<\/strong><\/p>\n<p>\n                Normalizasyon, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc art\u0131r\u0131rken, bazen daha fazla tabloya b\u00f6l\u00fcnm\u00fc\u015f veriler nedeniyle sorgular i\u00e7in birden fazla JOIN i\u015flemi gerektirebilir. Bu durum, \u00f6zellikle karma\u015f\u0131k sorgularda performans\u0131 d\u00fc\u015f\u00fcrebilir. Ancak, iyi tasarlanm\u0131\u015f indeksler ve optimize edilmi\u015f sorgularla bu etki minimize edilebilir. Di\u011fer yandan, azalan veri tekrar\u0131, daha k\u00fc\u00e7\u00fck tablolar ve daha az disk G\/\u00c7 ile genel olarak daha iyi performans sa\u011flayabilir.\n            <\/p>\n<\/li>\n<li>\n            <strong>BCNF ne anlama gelir ve 3NF'den fark\u0131 nedir?<\/strong><\/p>\n<p>\n                BCNF (Boyce-Codd Normal Form), 3NF'nin daha s\u0131k\u0131 bir versiyonudur. 3NF, birincil anahtar olmayan s\u00fctunlar\u0131n, birincil anahtar olmayan ba\u015fka bir s\u00fctuna ba\u011f\u0131ml\u0131 olmamas\u0131n\u0131 isterken, BCNF, her fonksiyonel ba\u011f\u0131ml\u0131l\u0131k X -> Y i\u00e7in X'in bir s\u00fcper anahtar olmas\u0131n\u0131 gerektirir. Bu, 3NF'de olabilen ancak BCNF'de olmayan tablolar\u0131n, birden fazla \u00e7ak\u0131\u015fan aday anahtara sahip oldu\u011fu nadir durumlar\u0131 ele al\u0131r. BCNF, daha g\u00fc\u00e7l\u00fc bir veri b\u00fct\u00fcnl\u00fc\u011f\u00fc sa\u011flar ancak tasar\u0131m\u0131 daha karma\u015f\u0131k hale getirebilir.\n            <\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde,&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1505],"tags":[],"class_list":{"0":"post-31003","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-sql-2","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri<\/title>\n<meta name=\"description\" content=\"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri\" \/>\n<meta property=\"og:description\" content=\"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-04T11:31:56+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri\",\"datePublished\":\"2025-10-04T11:31:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\"},\"wordCount\":3989,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"SQL\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\",\"name\":\"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-04T11:31:56+00:00\",\"description\":\"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri","description":"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/","og_locale":"tr_TR","og_type":"article","og_title":"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri","og_description":"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-04T11:31:56+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri","datePublished":"2025-10-04T11:31:56+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/"},"wordCount":3989,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["SQL"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/","url":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/","name":"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-04T11:31:56+00:00","description":"Veritaban\u0131 tasar\u0131m\u0131nda s\u0131k kar\u015f\u0131la\u015f\u0131lan veri tekrar\u0131, tutars\u0131zl\u0131k ve g\u00fcncelleme anomalileri gibi sorunlar\u0131 k\u00f6kten \u00e7\u00f6zmek ister misiniz? Bu rehberde, veritaban\u0131 normalizasyonunun ne oldu\u011funu, neden kritik oldu\u011funu ve 1NF, 2NF, 3NF seviyelerini ger\u00e7ek d\u00fcnya SQL \u00f6rnekleri ile ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. G\u00fcvenilir ve performansl\u0131 veritabanlar\u0131 in\u015fa etmek i\u00e7in gerekli t\u00fcm bilgileri burada bulacaks\u0131n\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/veritabani-normalizasyonu-1nf-2nf-3nf-sql-ornekleri\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Veritaban\u0131 Normalizasyonu: 1NF, 2NF, 3NF SQL \u00d6rnekleri"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31003"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31003\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}