Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

SQL - Birinci Normal Şekil (First Normal Form - 1NF)



  October 28, 2018    Labels:,,,,,,,,,, 

İlişkisel veritabanı teorisinde geçen ve ilişkisel bir veri tabanının hafızayı daha verimli kullanması için geliştirilen normal şekillerden en ilkelidir. Bir veri tabanı tasarlanırken veya daha sonradan normalleştirilebilir yani normal form kurallarına uyması sağlanabilir. Bu sayede veritabanının daha az yer kaplaması sağlanmış olur. Ancak bazı durumlarda yerden fedakarlık yapılarak hız ön plana çıkar. Bu durumda normalleştirilmiş bir veritabanının bozulması (denormalization) gerekir. Veritabanımızın ilk normal şekle uyması için iki temel kural vardır;
  • Veritabanında bulunan ilişkili tabloların aralarında ilişki (bağlantı, join) kurulabilir şekilde tasarlanması.
  • Tablolarda veri tekrarı bulunmaması.


Örnek:

Bir telefon defteri uygulaması tasarladığımızı düşünelim. Tablomuzda isim, soyisim ve telefon bilgilerini tutuyor olalım. Tablomuzdaki bir satır şu şekilde olabilir;

İsim Soyisim Telefon
Berkay Demirel 5454444444

Buraya kadar her şey normal gözüksede eğer bir kişinin ikinci telefonu varsa ve biz bu bilgiyi veritabanına eklemek istersek o zaman bir satır daha eklememiz gerekir. Bu durumda veritabanımız şu şekilde olur;

İsim Soyisim Telefon
Berkay Demirel 5454444444
Berkay Demirel 5453333333

Burada görüldüğü üzere bir kişinin iki telefonu var ve bu bilgi veritabanında saklanabiliyor ancak verilerimiz tekrar ediyor. Bu durumu tablomuza telefon2 adlı bir kolon ekleyerek çözebilirdik ancak ya sayısını bilmediğimiz kadar veri girişi olacaksa ne olacağıdır. Yani kişilerin 3. ve 4. telefon bilgileride varsa ne olacak her seferinde yeni bir kolon mu ekleyeceğiz. Diyelim ki kolon ekledik ve problemi çözdük. Bu durumda da tek bir telefonu olan kişilerin 2. 3. ve 4. telefon bilgisi kolonları boş kalacak ve hafıza gereksiz yer kaplayacaklar. Bu durumun en iyi çözümü telefon bilgisini ayrı bir tabloda tutmak ve bu iki tablo arasında ilişki kurmaktır.

Kişi Tablosu
id İsim Soyisim
1 Berkay Demirel
2 Ali Veli

Telefon Tablosu
id Telefon
1 5454444444
1 5453333333
2 5452222222

Yukarıda görüldüğü üzere Berkay Demirel'in telefon numaralarına erişmek sitediğimizde kişinin id bilgisini kullanarak telefon tablosundan telefon bilgilerini getirebiliriz. Bu şekilde bir tasarım yaparak veritabanımızı birinci normal forma uygun hale getirdik.

Not! Bu şekilde verilerimizi iki tabloya bölmek bize hafıza olarak kazanç sağlar. Eğer daha hızlı erişim istiyorsak denormalization yapılarak veriler tek tabloda tutulabilir.

No comments:

Post a Comment