Entity-Attribute-Value Model Nedir? Nasıl Uygulanabilir?

Emre Duman
3 min readMar 15, 2024

--

Bir projeye başlarken eğer projenin verileri saklama ile ilgili bir ilişiği var ise belirli isterler belirlendikten sonra bu projenin veri tabanı tasarımı yapılır. Bu veri tabanlarını tasarlarken belirli modelleme yöntemleri bulunmaktadır. Tabi sizin de kendi yöntemleriniz olabilir benim de vardı ancak kullandığım yöntemlerin isimleri olduğunu öğrenene kadar. Row modelling, Serialized LOB gibi çeşitli yöntemler bulunmaktadır. Bir veri tabanında sadece bir tane yöntemi kullanacağız diye bir kural bulunmamaktadır ihtiyaca göre değişmektedir tabii ki. Bu yazıda çeşitli tasarımların arasından EAV Model’i anlayacağız.

EAV Model üç adet temel tablodan oluşmaktadır. Bu tablolar Entity, Attribute ve Value tablolarıdır. Bu tablolara ek veya paralelinde genişletilmiş tablolar eklenebilir anlatım temel üzerinden ilerleyecek ve varyasyonlara en sonda bakılacaktır.

Entity

Entity tablomuz aslında en üst seviye tablomuzdur. bu tabloda bizim saklayacağımız verinin en temel yapıtaşı bulunmaktadır. Örneğin bir e-ticaret sitesi düşünelim. Bu sitede kullanıcılar, ürünler, kategoriler gibi temel nesneler bu tablo altında saklanmaktadır.

Attribute

Bu tablomuzda ise Entity tablomuzdaki verilerin içindeki niteliklerin isimlerinin saklandığı tablo gibi düşünebiliriz. Örneğin bir kullanıcının kullanıcı adı, ismi, soyismi gibi kısımları burada saklanır. Ancak bu kısımların içerisinde değerleri tutulmaz sadece başlıklar şeklinde tutulur ve Entity tablomuzdaki oluşturduğumuz entity ile aralarında bağ kurulur.

Value

Value tablomuz Attribute tablomuzdaki nitelik başlıklarımızın değer verilerini tutar ve bunlar arasında bağ kurulur. Örneğin Entity tablosundaki User adlı entity’nin altında UserName adlı attribute’un value’su Emre diyebiliriz.

Tablo Yapısı

Tablo yapısı aşağıdaki gibidir.

Bu tablodan da görüldüğü üzere Hasta Emre adlı bir Entity’miz bulunmakta bu entity’nin bir adet Öksürük adlı attribute’u ve buna bağlı olarak Öksürüğün olduğunu gösteren True value’muz bulunmaktadır.

Artıları

  • Dinamik bir şekilde entity ve buna bağlı attribute’ler oluşturulmasını sağlıyor.
  • Kullanıcıya veri tabanını dolaylı yoldan yönetebilme yeteneği kazandırıyor.
  • SQL veri tabanımızın NoSQL gibi davranmasını sağlar.

Eksileri

  • Veri tabanını okumak çok zorlaşır.
  • Verilerin arasındaki karmaşıklık çok yüksek düzeylere çıkabilir.
  • Tablolarda saklanan veri miktarı çok yükselebilir.

Tavsiyeler

  1. Fark ettiyseniz Entity tablosunda “Hasta Emre” verisi tutulmaktadır. yeni bir hasta eklendiği zaman bu “Hasta Mehmet”, “Hasta Ahmet” gibi türeyecek ve verileri takip edip, manipüle etmek zorlaşacak. Bundan dolayı yeni bir tablo ekleyip Table “Hasta” ve Entity “Emre” gibi veya daha farklı isimlerle bu tablolar ayrılabilir. Böylece Hastalara ulaşabilmek için Entity tablosusundaki her Entity içinde Hasta stringini aramak zorunda kalmayarak sadece Table tablosundaki Hasta id’li Entityleri aramak hem veri tabanında string arama işlemlerini ortadan kaldırır hem de daha temiz ve okuması kolay bir tablo yapısı kurabilir.
  2. Value tablosu birden çok Value türüne bölünebilir yukarıdaki örnekte sadece string değerler için oluşturulmuş bir tablo bulunmakta buna ek olarak int, bool, decimal gibi ayrı Value tabloları eklenebilir ancak bu yöntem karmaşıklığı arttıracaktır.

Sonuç

Bu yöntem ilişkisel veri tabanını (RDBMS) NoSQL gibi davranmasını sağlamaktadır. Karmaşıklığı yüksek miktarda arttırıp, okunabilirliği azaltmaktadır. İlişkisel veri tabanı kullanımı şartı olmayan projelerde eğer yatayda ölçeklenebilir bir tasarıma ihtiyacınız var ise NoSQL kullanmak işinizi kolaylaştıracaktır.

Referanslar

--

--