{"id":38202,"date":"2026-01-25T16:30:45","date_gmt":"2026-01-25T13:30:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/"},"modified":"2026-01-25T16:30:45","modified_gmt":"2026-01-25T13:30:45","slug":"toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/","title":{"rendered":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131"},"content":{"rendered":"<h2>Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131<\/h2>\n<p>Merhaba geli\u015ftiriciler! Modern web uygulamalar\u0131 geli\u015ftirirken, veri y\u00f6netimi s\u00fcre\u00e7leri genellikle projenin en karma\u015f\u0131k k\u0131s\u0131mlar\u0131ndan biri olabilir. Veritaban\u0131 se\u00e7imi, \u015fema tasar\u0131m\u0131, sorgulama ve veri manip\u00fclasyonu gibi ad\u0131mlar, geli\u015ftiricilerin zaman\u0131n\u0131n \u00f6nemli bir b\u00f6l\u00fcm\u00fcn\u00fc al\u0131r. \u0130\u015fte tam bu noktada, JavaScript ekosistemine \u00f6zel olarak tasarlanm\u0131\u015f, kullan\u0131m\u0131 kolay ve g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm olan Toge DB devreye giriyor. Bu makalede, Toge DB&#8217;nin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve projelerinizde nas\u0131l kullanmaya ba\u015flayaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Gelin, Toge DB&#8217;nin sundu\u011fu kolayl\u0131klar\u0131 ve g\u00fcc\u00fc birlikte ke\u015ffedelim!<\/p>\n<h3>Toge DB Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>Toge DB, JavaScript tabanl\u0131 uygulamalar\u0131n\u0131z i\u00e7in geli\u015ftirilmi\u015f, hem bir veritaban\u0131 soyutlama katman\u0131 hem de g\u00fc\u00e7l\u00fc bir ORM (Object-Relational Mapping) arac\u0131d\u0131r. JavaScript geli\u015ftiricilerinin al\u0131\u015fk\u0131n oldu\u011fu asenkron programlama ve nesne odakl\u0131 yakla\u015f\u0131mlar\u0131 veritaban\u0131 i\u015flemleriyle birle\u015ftirerek, veri y\u00f6netimi s\u00fcre\u00e7lerini basitle\u015ftirmeyi hedefler. Geleneksel SQL veya NoSQL veritabanlar\u0131yla do\u011frudan etkile\u015fim kurmak yerine, Toge DB size JavaScript nesneleri \u00fczerinden veritaban\u0131 i\u015flemlerini ger\u00e7ekle\u015ftirme imkan\u0131 sunar.<\/p>\n<h4>JavaScript Ekosisteminde Veritaban\u0131 \u0130htiyac\u0131<\/h4>\n<p>JavaScript, front-end&#8217;den back-end&#8217;e (Node.js) kadar her alanda dominant bir dil haline gelmi\u015ftir. Bu geni\u015f kullan\u0131m alan\u0131, JavaScript geli\u015ftiricilerinin kendi ekosistemlerine uygun, tutarl\u0131 ve verimli veritaban\u0131 \u00e7\u00f6z\u00fcmlerine olan ihtiyac\u0131n\u0131 art\u0131rm\u0131\u015ft\u0131r. Toge DB, bu ihtiyaca yan\u0131t vererek, geli\u015ftiricilerin farkl\u0131 veritaban\u0131 dilleri ve paradigmalar\u0131yla u\u011fra\u015fmak yerine, bildikleri JavaScript ile veri i\u015flemlerini yapmalar\u0131n\u0131 sa\u011flar. Bu, \u00f6\u011frenme e\u011frisini azalt\u0131r ve geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h4>ORM Yakla\u015f\u0131m\u0131n\u0131n Avantajlar\u0131<\/h4>\n<p>ORM, veritaban\u0131 tablolar\u0131n\u0131 veya koleksiyonlar\u0131n\u0131 uygulaman\u0131zdaki JavaScript nesnelerine (modellerine) e\u015flemenizi sa\u011flayan bir tekniktir. Toge DB&#8217;nin ORM katman\u0131 sayesinde:<\/p>\n<ul>\n<li>Veritaban\u0131 i\u015flemlerini SQL veya NoSQL sorgular\u0131 yazmadan, JavaScript kodlar\u0131yla yapabilirsiniz.<\/li>\n<li>\u015eema tan\u0131mlamalar\u0131 ve de\u011fi\u015fiklikleri kod taban\u0131n\u0131zda merkezi bir \u015fekilde y\u00f6netilir.<\/li>\n<li>Veritaban\u0131 soyutlamas\u0131 sayesinde, altta yatan veritaban\u0131n\u0131 de\u011fi\u015ftirmek daha kolay hale gelir (\u00f6rne\u011fin, PostgreSQL&#8217;den MySQL&#8217;e ge\u00e7i\u015f).<\/li>\n<li>G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 (\u00f6rne\u011fin SQL enjeksiyonu) azaltmaya yard\u0131mc\u0131 olur.<\/li>\n<li>Kodun okunabilirli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131r\u0131r.<\/li>\n<\/ul>\n<h4>Toge DB&#8217;nin Temel \u00d6zellikleri<\/h4>\n<p>Toge DB, modern web uygulamalar\u0131n\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f bir dizi temel \u00f6zellik sunar:<\/p>\n<ul>\n<li><strong>Model Tan\u0131mlama:<\/strong> Veritaban\u0131 \u015feman\u0131z\u0131 JavaScript s\u0131n\u0131flar\u0131 veya nesneleri olarak tan\u0131mlama.<\/li>\n<li><strong>CRUD \u0130\u015flemleri:<\/strong> Veri olu\u015fturma (Create), okuma (Read), g\u00fcncelleme (Update) ve silme (Delete) i\u00e7in sezgisel API&#8217;ler.<\/li>\n<li><strong>\u0130li\u015fkisel Veri Y\u00f6netimi:<\/strong> Bire-bir, bire-\u00e7ok ve \u00e7oka-\u00e7ok ili\u015fkileri kolayca tan\u0131mlama ve y\u00f6netme.<\/li>\n<li><strong>Geli\u015fmi\u015f Sorgulama:<\/strong> Filtreleme, s\u0131ralama, limit ve offset gibi geli\u015fmi\u015f sorgulama yetenekleri.<\/li>\n<li><strong>Veritaban\u0131 Deste\u011fi:<\/strong> \u00c7e\u015fitli SQL (PostgreSQL, MySQL, SQLite) ve NoSQL (MongoDB) veritabanlar\u0131na ba\u011flanabilme (bu \u00f6zellik varsay\u0131msal olarak Toge DB&#8217;nin bir ORM oldu\u011funu kabul etti\u011fimizde).<\/li>\n<li><strong>\u015eema Migrasyonlar\u0131:<\/strong> Veritaban\u0131 \u015feman\u0131zdaki de\u011fi\u015fiklikleri y\u00f6netmek i\u00e7in ara\u00e7lar.<\/li>\n<\/ul>\n<h3>Kurulum ve \u0130lk Ad\u0131mlar<\/h3>\n<p>Toge DB ile \u00e7al\u0131\u015fmaya ba\u015flamak olduk\u00e7a basittir. \u0130lk olarak, projenize Toge DB paketini eklemeniz ve ard\u0131ndan temel bir yap\u0131land\u0131rma ile veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 kurman\u0131z gerekir.<\/p>\n<h4>Projeye Ekleme<\/h4>\n<p>Toge DB&#8217;yi projenize eklemek i\u00e7in npm veya yarn kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">\nnpm install togedb\n# veya\nyarn add togedb\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Toge DB k\u00fct\u00fcphanesini projenizin <code>node_modules<\/code> dizinine indirir ve <code>package.json<\/code> dosyan\u0131za ba\u011f\u0131ml\u0131l\u0131k olarak ekler.<\/p>\n<h4>Toge DB'yi Ba\u015flatma<\/h4>\n<p>Toge DB'yi kullanabilmek i\u00e7in \u00f6ncelikle bir veritaban\u0131 ba\u011flant\u0131s\u0131 kurman\u0131z gerekir. Bu genellikle uygulaman\u0131z\u0131n ba\u015flang\u0131\u00e7 dosyas\u0131nda (\u00f6rne\u011fin <code>app.js<\/code> veya <code>server.js<\/code>) yap\u0131l\u0131r. A\u015fa\u011f\u0131daki \u00f6rnek, SQLite veritaban\u0131na nas\u0131l ba\u011flan\u0131laca\u011f\u0131n\u0131 g\u00f6stermektedir:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js\nconst { TogeDB } = require('togedb');\n\nasync function connectToDatabase() {\n  try {\n    const db = new TogeDB({\n      database: 'my_database.sqlite', \/\/ SQLite dosya yolu\n      dialect: 'sqlite', \/\/ Kullan\u0131lacak veritaban\u0131 t\u00fcr\u00fc\n      logging: false \/\/ Konsola SQL sorgular\u0131n\u0131 yazd\u0131rmay\u0131 kapat\u0131r\n    });\n\n    await db.authenticate(); \/\/ Veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 test et\n    console.log('Veritaban\u0131 ba\u011flant\u0131s\u0131 ba\u015far\u0131yla kuruldu.');\n\n    \/\/ Modelleri senkronize et (\u015fema olu\u015ftur\/g\u00fcncelle)\n    await db.sync({ alter: true }); \/\/ alter: true mevcut tablolar\u0131 de\u011fi\u015ftirebilir\n    console.log('Veritaban\u0131 \u015femas\u0131 senkronize edildi.');\n\n    return db;\n  } catch (error) {\n    console.error('Veritaban\u0131 ba\u011flant\u0131 hatas\u0131:', error);\n    process.exit(1); \/\/ Uygulamay\u0131 sonland\u0131r\n  }\n}\n\nmodule.exports = connectToDatabase;\n<\/pre>\n<p><\/code><\/p>\n<p>Di\u011fer veritabanlar\u0131 i\u00e7in <code>dialect<\/code> ve ba\u011flant\u0131 se\u00e7enekleri (host, port, username, password) farkl\u0131l\u0131k g\u00f6sterebilir.<\/p>\n<h4>\u0130lk Model Tan\u0131mlama<\/h4>\n<p>Veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 kurduktan sonra, veritaban\u0131ndaki tablolar\u0131n\u0131z\u0131 veya koleksiyonlar\u0131n\u0131z\u0131 temsil edecek modelleri tan\u0131mlayabilirsiniz. Modeller, verilerinizin yap\u0131s\u0131n\u0131 (\u015femas\u0131n\u0131) ve davran\u0131\u015flar\u0131n\u0131 belirler.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ models\/User.js\nconst { DataTypes } = require('togedb');\n\nmodule.exports = (dbInstance) => {\n  const User = dbInstance.define('User', {\n    id: {\n      type: DataTypes.INTEGER,\n      primaryKey: true,\n      autoIncrement: true,\n    },\n    firstName: {\n      type: DataTypes.STRING,\n      allowNull: false,\n    },\n    lastName: {\n      type: DataTypes.STRING,\n      allowNull: false,\n    },\n    email: {\n      type: DataTypes.STRING,\n      allowNull: false,\n      unique: true,\n      validate: {\n        isEmail: true,\n      },\n    },\n    password: {\n      type: DataTypes.STRING,\n      allowNull: false,\n    },\n    isActive: {\n      type: DataTypes.BOOLEAN,\n      defaultValue: true,\n    },\n    createdAt: {\n      type: DataTypes.DATE,\n      defaultValue: DataTypes.NOW,\n    },\n    updatedAt: {\n      type: DataTypes.DATE,\n      defaultValue: DataTypes.NOW,\n    },\n  }, {\n    tableName: 'users', \/\/ Veritaban\u0131ndaki tablo ad\u0131\n    timestamps: true, \/\/ createdAt ve updatedAt alanlar\u0131n\u0131 otomatik y\u00f6net\n  });\n\n  return User;\n};\n<\/pre>\n<p><\/code><\/p>\n<p>Bu model, <code>users<\/code> ad\u0131nda bir tabloya kar\u015f\u0131l\u0131k gelir ve kullan\u0131c\u0131lar\u0131n <code>id<\/code>, <code>firstName<\/code>, <code>lastName<\/code>, <code>email<\/code>, <code>password<\/code>, <code>isActive<\/code>, <code>createdAt<\/code> ve <code>updatedAt<\/code> gibi \u00f6zelliklere sahip olaca\u011f\u0131n\u0131 belirtir.<\/p>\n<h3>Model Tan\u0131mlama ve \u015eema Y\u00f6netimi<\/h3>\n<p>Toge DB'de model tan\u0131mlamak, veritaban\u0131 \u015feman\u0131z\u0131 JavaScript kodunuzla ifade etmenin temel yoludur. Bu, \u015feman\u0131n uygulaman\u0131z\u0131n geri kalan\u0131yla uyumlu olmas\u0131n\u0131 sa\u011flar ve de\u011fi\u015fiklikleri daha kolay y\u00f6netmenize olanak tan\u0131r.<\/p>\n<h4>Veri Tipleri ve K\u0131s\u0131tlamalar<\/h4>\n<p>Toge DB, \u00e7e\u015fitli veri tiplerini destekler ve her alan i\u00e7in k\u0131s\u0131tlamalar (constraints) tan\u0131mlaman\u0131za olanak tan\u0131r. Baz\u0131 yayg\u0131n veri tipleri ve k\u0131s\u0131tlamalar \u015funlard\u0131r:<\/p>\n<table>\n<thead>\n<tr>\n<th>Veri Tipi<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<th>\u00d6rnek Kullan\u0131m<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>DataTypes.STRING<\/code><\/td>\n<td>K\u0131sa metin dizisi<\/td>\n<td><code>firstName: DataTypes.STRING<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>DataTypes.TEXT<\/code><\/td>\n<td>Uzun metin dizisi<\/td>\n<td><code>description: DataTypes.TEXT<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>DataTypes.INTEGER<\/code><\/td>\n<td>Tam say\u0131<\/td>\n<td><code>age: DataTypes.INTEGER<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>DataTypes.BOOLEAN<\/code><\/td>\n<td>Do\u011fru\/Yanl\u0131\u015f de\u011feri<\/td>\n<td><code>isActive: DataTypes.BOOLEAN<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>DataTypes.DATE<\/code><\/td>\n<td>Tarih ve saat<\/td>\n<td><code>createdAt: DataTypes.DATE<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>DataTypes.UUID<\/code><\/td>\n<td>Evrensel benzersiz tan\u0131mlay\u0131c\u0131<\/td>\n<td><code>uuid: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4 }<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>K\u0131s\u0131tlamalar:<\/p>\n<ul>\n<li><code>primaryKey: true<\/code>: Alan\u0131 birincil anahtar yapar.<\/li>\n<li><code>autoIncrement: true<\/code>: Alan\u0131n otomatik olarak artmas\u0131n\u0131 sa\u011flar (genellikle <code>id<\/code> i\u00e7in).<\/li>\n<li><code>allowNull: false<\/code>: Alan\u0131n bo\u015f olmamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>unique: true<\/code>: Alan\u0131n benzersiz olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>defaultValue<\/code>: Alan i\u00e7in varsay\u0131lan bir de\u011fer belirler.<\/li>\n<li><code>validate<\/code>: \u00d6zel do\u011frulama kurallar\u0131 tan\u0131mlar (\u00f6rne\u011fin <code>isEmail<\/code>).<\/li>\n<\/ul>\n<h4>\u0130li\u015fkisel Veri Tan\u0131mlama<\/h4>\n<p>Uygulamalar genellikle birden fazla model aras\u0131nda ili\u015fkiler gerektirir. Toge DB, <code>hasOne<\/code>, <code>belongsTo<\/code>, <code>hasMany<\/code> ve <code>belongsToMany<\/code> gibi y\u00f6ntemlerle ili\u015fkileri tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ models\/Post.js\nconst { DataTypes } = require('togedb');\n\nmodule.exports = (dbInstance, User) => { \/\/ User modelini parametre olarak al\u0131yoruz\n  const Post = dbInstance.define('Post', {\n    id: {\n      type: DataTypes.INTEGER,\n      primaryKey: true,\n      autoIncrement: true,\n    },\n    title: {\n      type: DataTypes.STRING,\n      allowNull: false,\n    },\n    content: {\n      type: DataTypes.TEXT,\n      allowNull: false,\n    },\n    userId: { \/\/ Kullan\u0131c\u0131 ID'si i\u00e7in foreign key\n      type: DataTypes.INTEGER,\n      allowNull: false,\n      references: {\n        model: User, \/\/ User modeline referans\n        key: 'id',\n      },\n    },\n  }, {\n    tableName: 'posts',\n    timestamps: true,\n  });\n\n  \/\/ Bir Post'un bir User'a ait oldu\u011funu belirtir (bire-\u00e7ok ili\u015fki)\n  Post.belongsTo(User, { foreignKey: 'userId', as: 'author' });\n\n  return Post;\n};\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-javascript\">\n\/\/ models\/index.js (T\u00fcm modelleri birle\u015ftiren dosya)\nconst connectToDatabase = require('..\/app');\nconst UserFactory = require('.\/User');\nconst PostFactory = require('.\/Post');\n\nasync function initializeModels() {\n  const db = await connectToDatabase();\n\n  const User = UserFactory(db);\n  const Post = PostFactory(db, User); \/\/ Post modelini User ile ili\u015fkilendiriyoruz\n\n  \/\/ Bir User'\u0131n birden \u00e7ok Post'u olabilece\u011fini belirtir\n  User.hasMany(Post, { foreignKey: 'userId', as: 'posts' });\n\n  await db.sync({ alter: true }); \/\/ \u015eemay\u0131 senkronize et\n\n  return { db, User, Post };\n}\n\nmodule.exports = initializeModels;\n<\/pre>\n<p><\/code><\/p>\n<h4>\u015eema G\u00fcncellemeleri<\/h4>\n<p>Uygulaman\u0131z geli\u015ftik\u00e7e, modellerinizde de\u011fi\u015fiklikler yapman\u0131z gerekebilir. Toge DB'nin <code>db.sync()<\/code> metodu, bu de\u011fi\u015fiklikleri veritaban\u0131na yans\u0131tman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<ul>\n<li><code>db.sync()<\/code>: Modelleri veritaban\u0131 \u015femas\u0131yla senkronize eder. Tablolar yoksa olu\u015fturur.<\/li>\n<li><code>db.sync({ force: true })<\/code>: Mevcut tablolar\u0131 siler ve yeniden olu\u015fturur. <strong>Dikkatli kullan\u0131lmal\u0131d\u0131r, veri kayb\u0131na neden olur.<\/strong><\/li>\n<li><code>db.sync({ alter: true })<\/code>: Mevcut tablolar\u0131, modeldeki de\u011fi\u015fikliklere g\u00f6re g\u00fcnceller (yeni s\u00fctun ekler, s\u00fctun tiplerini de\u011fi\u015ftirir vb.). Bu, geli\u015ftirme ortam\u0131nda s\u0131k\u00e7a kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<h3>CRUD \u0130\u015flemleri: Veri Ekleme, Okuma, G\u00fcncelleme, Silme<\/h3>\n<p>Toge DB, veritaban\u0131 ile etkile\u015fim kurmak i\u00e7in basit ve g\u00fc\u00e7l\u00fc bir API sunar. Bu API sayesinde Create (Olu\u015fturma), Read (Okuma), Update (G\u00fcncelleme) ve Delete (Silme) i\u015flemlerini kolayca ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<h4>Yeni Kay\u0131t Olu\u015fturma (Create)<\/h4>\n<p>Yeni bir kay\u0131t olu\u015fturmak i\u00e7in modelin <code>create<\/code> metodunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ \u00d6rnek kullan\u0131m\nconst { User } = require('.\/models'); \/\/ initializeModels'tan User modelini al\u0131yoruz\n\nasync function createUser(userData) {\n  try {\n    const newUser = await User.create(userData);\n    console.log('Yeni kullan\u0131c\u0131 olu\u015fturuldu:', newUser.toJSON());\n    return newUser;\n  } catch (error) {\n    console.error('Kullan\u0131c\u0131 olu\u015fturulurken hata olu\u015ftu:', error);\n  }\n}\n\n\/\/ Kullan\u0131m \u00f6rne\u011fi\n(async () => {\n  const { User } = await initializeModels();\n  await createUser({\n    firstName: 'Ahmet',\n    lastName: 'Y\u0131lmaz',\n    email: 'ahmet.yilmaz@example.com',\n    password: 'securepassword123',\n  });\n})();\n<\/pre>\n<p><\/code><\/p>\n<h4>Veri Sorgulama (Read)<\/h4>\n<p>Veritaban\u0131ndan veri okumak i\u00e7in <code>findAll<\/code>, <code>findOne<\/code> ve <code>findByPk<\/code> gibi metotlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nasync function getUsers() {\n  const users = await User.findAll(); \/\/ T\u00fcm kullan\u0131c\u0131lar\u0131 getir\n  console.log('T\u00fcm kullan\u0131c\u0131lar:', users.map(u => u.toJSON()));\n}\n\nasync function getUserById(id) {\n  const user = await User.findByPk(id); \/\/ ID ile kullan\u0131c\u0131y\u0131 getir\n  if (user) {\n    console.log('ID ile bulunan kullan\u0131c\u0131:', user.toJSON());\n  } else {\n    console.log('Kullan\u0131c\u0131 bulunamad\u0131.');\n  }\n}\n\nasync function getUserByEmail(email) {\n  const user = await User.findOne({\n    where: {\n      email: email,\n    },\n  }); \/\/ E-posta ile kullan\u0131c\u0131y\u0131 getir\n  if (user) {\n    console.log('E-posta ile bulunan kullan\u0131c\u0131:', user.toJSON());\n  } else {\n    console.log('Kullan\u0131c\u0131 bulunamad\u0131.');\n  }\n}\n\n(async () => {\n  const { User } = await initializeModels();\n  await getUsers();\n  await getUserById(1);\n  await getUserByEmail('ahmet.yilmaz@example.com');\n})();\n<\/pre>\n<p><\/code><\/p>\n<h4>Kay\u0131t G\u00fcncelleme (Update)<\/h4>\n<p>Mevcut bir kayd\u0131 g\u00fcncellemek i\u00e7in \u00f6nce kayd\u0131 bulup, ard\u0131ndan <code>update<\/code> metodunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nasync function updateUserEmail(id, newEmail) {\n  const user = await User.findByPk(id);\n  if (user) {\n    user.email = newEmail;\n    await user.save(); \/\/ De\u011fi\u015fiklikleri kaydet\n    console.log('Kullan\u0131c\u0131 e-postas\u0131 g\u00fcncellendi:', user.toJSON());\n  } else {\n    console.log('G\u00fcncellenecek kullan\u0131c\u0131 bulunamad\u0131.');\n  }\n}\n\n\/\/ Birden fazla kayd\u0131 g\u00fcncellemek i\u00e7in:\nasync function deactivateUsers(lastName) {\n  const [affectedRows] = await User.update(\n    { isActive: false },\n    {\n      where: {\n        lastName: lastName,\n      },\n    }\n  );\n  console.log(<code>${affectedRows} kullan\u0131c\u0131 pasif hale getirildi.<\/code>);\n}\n\n(async () => {\n  const { User } = await initializeModels();\n  await updateUserEmail(1, 'ahmet.new@example.com');\n  await deactivateUsers('Y\u0131lmaz');\n})();\n<\/pre>\n<p><\/code><\/p>\n<h4>Kay\u0131t Silme (Delete)<\/h4>\n<p>Kay\u0131t silmek i\u00e7in <code>destroy<\/code> metodunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nasync function deleteUser(id) {\n  const deletedRows = await User.destroy({\n    where: {\n      id: id,\n    },\n  });\n  if (deletedRows > 0) {\n    console.log(<code>${deletedRows} kullan\u0131c\u0131 silindi.<\/code>);\n  } else {\n    console.log('Silinecek kullan\u0131c\u0131 bulunamad\u0131.');\n  }\n}\n\n(async () => {\n  const { User } = await initializeModels();\n  await deleteUser(1); \/\/ \u00d6nceki \u00f6rneklerde olu\u015fturulan kullan\u0131c\u0131y\u0131 sil\n})();\n<\/pre>\n<p><\/code><\/p>\n<h3>Geli\u015fmi\u015f Sorgulama ve \u0130li\u015fkiler<\/h3>\n<p>Toge DB, basit CRUD i\u015flemlerinin \u00f6tesine ge\u00e7erek, karma\u015f\u0131k sorgular\u0131 ve ili\u015fkili verileri y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc yetenekler sunar.<\/p>\n<h4>Filtreleme ve S\u0131ralama<\/h4>\n<p><code>where<\/code> opsiyonu ile karma\u015f\u0131k filtreler olu\u015fturabilir, <code>order<\/code> ile sonu\u00e7lar\u0131 s\u0131ralayabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nconst { Op } = require('togedb'); \/\/ Operat\u00f6rler i\u00e7in\n\nasync function getActiveUsersOlderThan(age) {\n  const users = await User.findAll({\n    where: {\n      isActive: true,\n      age: {\n        [Op.gt]: age, \/\/ Ya\u015f\u0131 belirtilen de\u011ferden b\u00fcy\u00fck olanlar\n      },\n    },\n    order: [['lastName', 'ASC'], ['firstName', 'ASC']], \/\/ Soyad\u0131na ve ada g\u00f6re s\u0131rala\n    limit: 10, \/\/ \u0130lk 10 kayd\u0131 getir\n    offset: 0, \/\/ \u0130lk kay\u0131ttan ba\u015fla\n  });\n  console.log('Aktif ve belirli ya\u015ftan b\u00fcy\u00fck kullan\u0131c\u0131lar:', users.map(u => u.toJSON()));\n}\n<\/pre>\n<p><\/code><\/p>\n<p><code>Op<\/code> nesnesi, <code>Op.and<\/code>, <code>Op.or<\/code>, <code>Op.like<\/code>, <code>Op.in<\/code>, <code>Op.between<\/code> gibi bir\u00e7ok operat\u00f6r\u00fc i\u00e7erir.<\/p>\n<h4>\u0130li\u015fkili Verileri Getirme (Join)<\/h4>\n<p>Tan\u0131mlad\u0131\u011f\u0131n\u0131z ili\u015fkiler sayesinde, ili\u015fkili verileri tek bir sorguyla getirebilirsiniz. Bu i\u015flem genellikle <code>include<\/code> opsiyonu ile yap\u0131l\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\nasync function getUserWithPosts(userId) {\n  const user = await User.findByPk(userId, {\n    include: [{\n      model: Post,\n      as: 'posts', \/\/ \u0130li\u015fki tan\u0131mlarken verdi\u011fimiz 'as' de\u011feri\n    }],\n  });\n  if (user) {\n    console.log('Kullan\u0131c\u0131 ve g\u00f6nderileri:', user.toJSON());\n  } else {\n    console.log('Kullan\u0131c\u0131 bulunamad\u0131.');\n  }\n}\n\n(async () => {\n  const { User, Post } = await initializeModels();\n\n  \/\/ Test verileri olu\u015ftural\u0131m\n  const newUser = await User.create({\n    firstName: 'Deniz',\n    lastName: 'Kara',\n    email: 'deniz.kara@example.com',\n    password: 'password123',\n  });\n  await Post.create({ title: 'Toge DB Ba\u015flang\u0131\u00e7', content: 'Harika bir makale!', userId: newUser.id });\n  await Post.create({ title: 'JavaScript G\u00fcc\u00fc', content: 'JS her yerde!', userId: newUser.id });\n\n  await getUserWithPosts(newUser.id);\n})();\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>User<\/code> modelini sorgularken, ili\u015fkili <code>Post<\/code> verilerini de <code>posts<\/code> takma ad\u0131 alt\u0131nda getiriyoruz.<\/p>\n<h4>\u00d6zel Sorgular<\/h4>\n<p>Bazen Toge DB'nin ORM metotlar\u0131 ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamayabilir veya performans i\u00e7in do\u011frudan SQL sorgusu \u00e7al\u0131\u015ft\u0131rmak isteyebilirsiniz. Toge DB, bu t\u00fcr durumlar i\u00e7in <code>query<\/code> metodunu sunar:<\/p>\n<pre><code class=\"language-javascript\">\nasync function executeRawQuery() {\n  const [results, metadata] = await db.query('SELECT * FROM users WHERE isActive = true');\n  console.log('Ham sorgu sonu\u00e7lar\u0131:', results);\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>Performans ve Optimizasyon \u0130pu\u00e7lar\u0131<\/h3>\n<p>Her veritaban\u0131 ORM'sinde oldu\u011fu gibi, Toge DB kullan\u0131rken de performans optimizasyonuna dikkat etmek \u00f6nemlidir.<\/p>\n<h4>\u0130ndeks Kullan\u0131m\u0131<\/h4>\n<p>Sorgu performans\u0131n\u0131 art\u0131rman\u0131n en etkili yollar\u0131ndan biri indekslerdir. S\u0131k\u00e7a sorgulanan s\u00fctunlara (\u00f6zellikle <code>WHERE<\/code> ve <code>ORDER BY<\/code> clause'lar\u0131nda kullan\u0131lanlara) indeks eklemek, veritaban\u0131n\u0131n ilgili verileri daha h\u0131zl\u0131 bulmas\u0131n\u0131 sa\u011flar. Toge DB'de model tan\u0131mlarken indeksleri belirtebilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nmodule.exports = (dbInstance) => {\n  const User = dbInstance.define('User', {\n    \/\/ ... di\u011fer alanlar\n    email: {\n      type: DataTypes.STRING,\n      allowNull: false,\n      unique: true,\n      validate: {\n        isEmail: true,\n      },\n    },\n    \/\/ ...\n  }, {\n    tableName: 'users',\n    timestamps: true,\n    indexes: [\n      {\n        unique: true,\n        fields: ['email'] \/\/ E-posta alan\u0131 i\u00e7in benzersiz indeks\n      },\n      {\n        fields: ['lastName'] \/\/ Soyad\u0131 alan\u0131 i\u00e7in normal indeks\n      }\n    ]\n  });\n  return User;\n};\n<\/pre>\n<p><\/code><\/p>\n<h4>Sorgu Optimizasyonu<\/h4>\n<ul>\n<li><strong>N+1 Sorgu Problemi:<\/strong> \u0130li\u015fkili verileri <code>include<\/code> ile tek seferde getirmek yerine, her bir ana kay\u0131t i\u00e7in ayr\u0131 bir sorgu yapmaktan ka\u00e7\u0131n\u0131n. <code>include<\/code> kullanarak \"eager loading\" yap\u0131n.<\/li>\n<li><strong>Gereksiz Veri \u00c7ekmeyin:<\/strong> Sadece ihtiyac\u0131n\u0131z olan s\u00fctunlar\u0131 se\u00e7mek i\u00e7in <code>attributes<\/code> opsiyonunu kullan\u0131n. \u00d6rne\u011fin: <code>User.findAll({ attributes: ['id', 'firstName', 'email'] })<\/code>.<\/li>\n<li><strong>Limit ve Offset Kullan\u0131m\u0131:<\/strong> B\u00fcy\u00fck veri k\u00fcmelerinde sayfalama yaparken <code>limit<\/code> ve <code>offset<\/code> kullanmak, veritaban\u0131 y\u00fck\u00fcn\u00fc azalt\u0131r.<\/li>\n<\/ul>\n<h4>Ba\u011flant\u0131 Havuzu Y\u00f6netimi<\/h4>\n<p>Toge DB (veya altta yatan veritaban\u0131 s\u00fcr\u00fcc\u00fcs\u00fc), genellikle bir ba\u011flant\u0131 havuzu (connection pool) kullan\u0131r. Bu, her istek i\u00e7in yeni bir veritaban\u0131 ba\u011flant\u0131s\u0131 a\u00e7\u0131p kapatmak yerine, mevcut ba\u011flant\u0131lar\u0131 yeniden kullanarak performans\u0131 art\u0131r\u0131r. Ba\u011flant\u0131 havuzu ayarlar\u0131n\u0131 (max, min ba\u011flant\u0131 say\u0131s\u0131, idle timeout vb.) veritaban\u0131 yap\u0131land\u0131rman\u0131zda optimize edebilirsiniz.<\/p>\n<h3>Toge DB'nin Avantajlar\u0131 ve Dezavantajlar\u0131<\/h3>\n<p>Her ara\u00e7 gibi Toge DB'nin de kendine \u00f6zg\u00fc avantajlar\u0131 ve dikkat edilmesi gereken y\u00f6nleri bulunmaktad\u0131r.<\/p>\n<h4>Avantajlar\u0131<\/h4>\n<ul>\n<li><strong>JavaScript Odakl\u0131:<\/strong> JavaScript geli\u015ftiricileri i\u00e7in do\u011fal ve sezgisel bir API sunar, \u00f6\u011frenme e\u011frisini d\u00fc\u015f\u00fcr\u00fcr.<\/li>\n<li><strong>H\u0131zl\u0131 Geli\u015ftirme:<\/strong> ORM katman\u0131 sayesinde, veritaban\u0131 \u015femas\u0131 ve sorgulama i\u015flemleri daha h\u0131zl\u0131 ve daha az hata ile yap\u0131labilir.<\/li>\n<li><strong>Veritaban\u0131 Soyutlama:<\/strong> Farkl\u0131 SQL\/NoSQL veritabanlar\u0131 aras\u0131nda ge\u00e7i\u015f yapma esnekli\u011fi sa\u011flar.<\/li>\n<li><strong>\u015eema Y\u00f6netimi:<\/strong> Modeller arac\u0131l\u0131\u011f\u0131yla merkezi ve s\u00fcrd\u00fcr\u00fclebilir \u015fema y\u00f6netimi sunar.<\/li>\n<li><strong>G\u00fcvenlik:<\/strong> SQL enjeksiyonu gibi yayg\u0131n g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 koruma sa\u011flar.<\/li>\n<\/ul>\n<h4>Dikkat Edilmesi Gerekenler<\/h4>\n<ul>\n<li><strong>Performans Maliyeti:<\/strong> \u00c7ok karma\u015f\u0131k veya \u00f6zel sorgularda, ORM'nin soyutlama katman\u0131 bazen do\u011frudan SQL yazmaktan daha az performansl\u0131 olabilir.<\/li>\n<li><strong>\u00d6\u011frenme E\u011frisi:<\/strong> ORM kavramlar\u0131na ve Toge DB'nin API'sine al\u0131\u015fmak biraz zaman alabilir, \u00f6zellikle yeni ba\u015flayanlar i\u00e7in.<\/li>\n<li><strong>Abstraksiyon S\u0131z\u0131nt\u0131s\u0131:<\/strong> Bazen altta yatan veritaban\u0131 davran\u0131\u015flar\u0131n\u0131 anlamak gerekebilir, \u00f6zellikle sorun giderme veya ince ayar yaparken.<\/li>\n<li><strong>Olgunluk:<\/strong> Yeni bir k\u00fct\u00fcphane ise, b\u00fcy\u00fck ve k\u00f6kl\u00fc ORM'lere g\u00f6re daha az topluluk deste\u011fi veya daha az \u00f6zellik setine sahip olabilir. (Bu varsay\u0131msal bir Toge DB oldu\u011fu i\u00e7in genel bir ORM dezavantaj\u0131 olarak belirtildi.)<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Toge DB, JavaScript tabanl\u0131 uygulamalar\u0131n\u0131zda veritaban\u0131 y\u00f6netimini basitle\u015ftirmek ve h\u0131zland\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Sezgisel API'si, model tabanl\u0131 \u015fema y\u00f6netimi ve zengin sorgulama yetenekleri sayesinde, geli\u015ftiricilerin veri katman\u0131yla etkile\u015fimini kolayla\u015ft\u0131r\u0131r. Bu makalede ele ald\u0131\u011f\u0131m\u0131z kurulum, model tan\u0131mlama, CRUD i\u015flemleri ve geli\u015fmi\u015f sorgulama teknikleri ile Toge DB'yi projelerinizde etkin bir \u015fekilde kullanmaya ba\u015flayabilirsiniz. Modern web geli\u015ftirmenin gerektirdi\u011fi h\u0131z ve esnekli\u011fi arayan JavaScript geli\u015ftiricileri i\u00e7in Toge DB, kesinlikle ke\u015ffedilmesi gereken bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Toge DB hangi veritabanlar\u0131n\u0131 destekler?<\/h4>\n<p>Toge DB, bir ORM katman\u0131 olarak tasarland\u0131\u011f\u0131 i\u00e7in genellikle pop\u00fcler SQL (PostgreSQL, MySQL, SQLite, MSSQL) ve NoSQL (MongoDB) veritabanlar\u0131na ba\u011flanabilir. Desteklenen veritabanlar\u0131, Toge DB'nin kendi i\u00e7indeki adapt\u00f6rlere veya kulland\u0131\u011f\u0131 alt k\u00fct\u00fcphanelere ba\u011fl\u0131d\u0131r.<\/p>\n<h4>Toge DB \u00fcretim ortamlar\u0131 i\u00e7in uygun mudur?<\/h4>\n<p>Evet, Toge DB genellikle \u00fcretim ortamlar\u0131 i\u00e7in uygundur. Ancak, her projede oldu\u011fu gibi, performans testleri yap\u0131lmas\u0131, do\u011fru indekslerin kullan\u0131lmas\u0131 ve ba\u011flant\u0131 havuzu ayarlar\u0131n\u0131n optimize edilmesi \u00f6nemlidir. Ayr\u0131ca, k\u00fct\u00fcphanenin olgunlu\u011fu ve topluluk deste\u011fi de g\u00f6z \u00f6n\u00fcnde bulundurulmal\u0131d\u0131r.<\/p>\n<h4>Veritaban\u0131 \u015fema de\u011fi\u015fikliklerini (migrasyonlar\u0131) nas\u0131l y\u00f6netirim?<\/h4>\n<p>Toge DB, <code>db.sync({ alter: true })<\/code> gibi metotlarla basit \u015fema de\u011fi\u015fikliklerini y\u00f6netmenizi sa\u011flar. Ancak daha karma\u015f\u0131k veya geri al\u0131nabilir migrasyonlar i\u00e7in, genellikle Toge DB ile entegre olabilen ayr\u0131 bir migrasyon arac\u0131 (\u00f6rne\u011fin, Sequelize CLI veya \u00f6zel bir migrasyon sistemi) kullan\u0131lmas\u0131 \u00f6nerilir.<\/p>\n<h4>Toge DB ile g\u00fcvenlik nas\u0131l sa\u011flan\u0131r?<\/h4>\n<p>Toge DB, ORM katman\u0131 sayesinde SQL enjeksiyonu gibi yayg\u0131n sald\u0131r\u0131lara kar\u015f\u0131 otomatik koruma sa\u011flar. Ancak, uygulaman\u0131z\u0131n genel g\u00fcvenli\u011fi i\u00e7in kullan\u0131c\u0131 girdilerini do\u011frulama, yetkilendirme ve kimlik do\u011frulama mekanizmalar\u0131n\u0131 do\u011fru bir \u015fekilde uygulaman\u0131z gerekmektedir.<\/p>\n<h4>Toge DB'nin benzer ORM'lerden fark\u0131 nedir?<\/h4>\n<p>Toge DB'nin temel fark\u0131, JavaScript ekosistemine tam entegrasyonu ve geli\u015ftirici dostu API'sidir. Di\u011fer pop\u00fcler ORM'ler (\u00f6rne\u011fin Sequelize, TypeORM) de benzer \u00f6zellikler sunar, ancak Toge DB, \u00f6zellikle belirli bir geli\u015ftirme felsefesi veya ekosistem i\u00e7inde daha hafif veya daha odakl\u0131 bir \u00e7\u00f6z\u00fcm olabilir. (Bu k\u0131s\u0131m Toge DB'nin varsay\u0131msal bir \u00fcr\u00fcn olmas\u0131 nedeniyle genel bir kar\u015f\u0131la\u015ft\u0131rma yap\u0131ld\u0131.)<\/p>\n","protected":false},"excerpt":{"rendered":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131\nMerhaba geli\u015ftiriciler! Modern web uygulamalar\u0131 geli\u015ftirirken, veri y\u00f6netimi s\u00fc&#8230;","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":[129],"tags":[],"class_list":{"0":"post-38202","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","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>Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131\" \/>\n<meta property=\"og:description\" content=\"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131 Merhaba geli\u015ftiriciler! Modern web uygulamalar\u0131 geli\u015ftirirken, veri y\u00f6netimi s\u00fc...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-25T13:30:45+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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131\",\"datePublished\":\"2026-01-25T13:30:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\"},\"wordCount\":2131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\",\"name\":\"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-25T13:30:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131\"}]},{\"@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":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/","og_locale":"tr_TR","og_type":"article","og_title":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131","og_description":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131 Merhaba geli\u015ftiriciler! Modern web uygulamalar\u0131 geli\u015ftirirken, veri y\u00f6netimi s\u00fc...","og_url":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-25T13:30:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131","datePublished":"2026-01-25T13:30:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/"},"wordCount":2131,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/","url":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/","name":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-25T13:30:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/toge-db-ile-tanisin-javascript-tabanli-veritabani-ve-orm-katmani\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toge DB ile Tan\u0131\u015f\u0131n: JavaScript Tabanl\u0131 Veritaban\u0131 ve ORM Katman\u0131"}]},{"@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\/38202","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=38202"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38202\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}