---
title: "The ORM Dilemma: To Use or Not to Use"
lang: "en"
author: "Mohammad Abu Mattar"
canonical: https://mkabumattar.com/post/why-not-to-use-orm-in-nodejs
---

![Blog post image for The ORM Dilemma: To Use or Not to Use - A look at Object-Relational Mapping (ORM) in Node.js, TypeScript, and Express: the real pros and cons, and when and why to consider alternatives to ORM for your database operations.](/_astro/hero.DwvXnAvK_26ejaP.webp)

[Home](/)›[Blog](/blog)›[All Categories](/blog/categories)›[Backend Development](/blog/categories/backend-development)

Blog

[Prev in Backend DevelopmentSetting up Node.js, Express, Prettier, ESLint, and Husky application with Babel and TypeScript - Part 1](/blog/post/setting-up-node-js-express-prettier-eslint-and-husky-application-with-babel-and-typescript-part-1)

[Backend Development](/blog/categories/backend-development)[Node.js](/blog/categories/nodejs)[Database Management](/blog/categories/database-management)[Software Architecture](/blog/categories/software-architecture)[TypeScript](/blog/categories/typescript)

# The ORM Dilemma: To Use or Not to Use

[Mohammad Abu Mattar](/authors/mohammad-abu-mattar)Published: 24 Aug 202306 Mins read09 Mins listen

[Markdown for AI(opens in a new tab)](/post/why-not-to-use-orm-in-nodejs/index.md "Open the plain-Markdown version of this page, for pasting into an AI tool")

TL;DR

A look at Object-Relational Mapping (ORM) in Node.js, TypeScript, and Express: the real pros and cons, and when and why to consider alternatives to ORM for your database operations.

Series

[Backend Programming](/series/backend-programming)3/3

[PreviousCaching Strategies with Redis in Node.js and TypeScript](/blog/post/caching-strategies-with-redis-in-node-js-and-typescript)

All posts in this series (3)

Blog3

1.  [Setting up Node JS, Express, MongoDB, Prettier, ESLint and Husky Application with Babel and authentication as an example](/blog/post/setting-up-node-js-express-mongodb-prettier-eslint-and-husky-application-with-babel-and-authentication-as-an-example)
2.  [Caching Strategies with Redis in Node.js and TypeScript](/blog/post/caching-strategies-with-redis-in-node-js-and-typescript)
3.  [The ORM Dilemma: To Use or Not to UseYou are here](/blog/post/why-not-to-use-orm-in-nodejs)

### The ORM Dilemma: To Use or Not to Use

Contents

[Introduction](#introduction)[A quick look at ORM](#a-quick-look-at-orm)[The advantages of ORM](#the-advantages-of-orm)[The disadvantages of ORM](#the-disadvantages-of-orm)[1\. Performance overhead](#1-performance-overhead)[2\. The learning curve](#2-the-learning-curve)[3\. Limited control](#3-limited-control)[4\. Code bloat](#4-code-bloat)[Do you actually need an ORM?](#do-you-actually-need-an-orm)[When to reach for an ORM](#when-to-reach-for-an-orm)[When to be careful with an ORM](#when-to-be-careful-with-an-orm)[Practical alternatives to ORM](#practical-alternatives-to-orm)[1\. Query builders](#1-query-builders)[2\. Raw SQL](#2-raw-sql)[Conclusion](#conclusion)[References](#references)

## [Introduction](#introduction)

Some decisions shape a project more than others. One that keeps coming back is whether to use an Object-Relational Mapping (ORM) tool for database interactions. Should you skip an ORM entirely? Or should you take the convenience it offers when working with Node.js and TypeScript, particularly alongside Express? This article works through the pros and cons of using an ORM and the situations where an alternative is the better call.

## [A quick look at ORM](#a-quick-look-at-orm)

Before getting into whether or not to use an ORM, here is what an ORM is and what it does. An Object-Relational Mapping tool is a software framework that sits between an application and a relational database. It hides the details of database interactions, so developers can work with database entities as if they were ordinary objects in their chosen programming language.

### [The advantages of ORM](#the-advantages-of-orm)

An ORM has several real advantages that make it an attractive choice for developers:

1.  **Database complexity abstraction**: An ORM’s main virtue is that it shields developers from SQL and from the quirks of database-specific operations. That abstraction earns its keep on complex queries.
    
2.  **Language integration**: An ORM integrates with the programming language you are using. This lets developers manipulate database records using native language constructs, resulting in code that’s both more maintainable and more readable.
    
3.  **Cross-database compatibility**: Many ORM libraries support several database systems well, which makes moving from one database to another relatively painless. That flexibility matters on a project whose shape is still changing.
    
4.  **Faster development**: An ORM saves you writing boilerplate for routine database operations such as Create, Read, Update, and Delete (CRUD).
    

Those advantages are real. Now for the other side of the ledger.

## [The disadvantages of ORM](#the-disadvantages-of-orm)

ORM is a useful tool, but it comes with tradeoffs. Here are the principal disadvantages that warrant careful consideration:

### [1\. Performance overhead](#1-performance-overhead)

An ORM always adds an abstraction layer between your application and the database. That layer can help readability and maintainability, but it usually costs you performance. The SQL an ORM generates is not always as well optimized as SQL you write by hand, and the gap shows up on complex queries and under high throughput.

### [2\. The learning curve](#2-the-learning-curve)

Adopting an ORM means learning it. Developers have to get familiar with the details of the ORM’s Application Programming Interface (API), and that takes real time. On top of that, once you start tuning performance you have to understand how the ORM turns high-level operations into SQL.

### [3\. Limited control](#3-limited-control)

An ORM works by abstracting database operations, which means giving up some control over the SQL it generates. When you need fine-grained control over queries to tune performance, the ORM’s structure can get in the way.

### [4\. Code bloat](#4-code-bloat)

An ORM cuts boilerplate in the common cases, and then adds it back in the harder ones. Getting fine-grained control over database interactions usually means writing custom code inside the ORM’s framework, which tends to be verbose and awkward to maintain.

## [Do you actually need an ORM?](#do-you-actually-need-an-orm)

So is an ORM something you have to have? The honest answer is that it depends.

### [When to reach for an ORM](#when-to-reach-for-an-orm)

1.  **Rapid prototyping**: If the point of the project is to get a minimum viable product (MVP) in front of people quickly, an ORM helps. It keeps you out of SQL so you can spend the time on your application logic instead.
    
2.  **Team expertise**: If your team knows the programming language better than it knows SQL, an ORM is the sensible choice. Your team works in the language it is fluent in, and the code comes out better for it.
    
3.  **Cross-database compatibility**: If your project has to support several database systems, an ORM is the pragmatic choice. It papers over the differences between databases, which makes moving from one to another relatively easy.
    

### [When to be careful with an ORM](#when-to-be-careful-with-an-orm)

1.  **Strict performance demands**: When your application has tight performance requirements, especially with complex queries or high transaction rates, raw SQL or a database-specific library is usually the wiser choice. It gives you the room to tune each query.
    
2.  **Database-specific features**: Projects that lean on database-specific features, or on advanced SQL operations the ORM cannot express, tend to do better with native SQL.
    
3.  **Query control**: If your project needs granular control over the SQL your application runs, an ORM puts limits on you that you did not ask for. Writing the SQL yourself is the better move.
    

## [Practical alternatives to ORM](#practical-alternatives-to-orm)

Where an ORM does not fit your project, there are two alternatives worth knowing.

### [1\. Query builders](#1-query-builders)

Query builders such as Knex.js sit in the middle. They let you build SQL queries programmatically in JavaScript, somewhere between raw SQL and the abstraction an ORM gives you. They pay off when you want control over the query and still want the code to read well.

Consider a TypeScript and PostgreSQL example using Knex.js:

```
1import * as Knex from 'knex';2
3const knex = Knex({4  client: 'pg',5  connection: {6    host: 'your-database-host',7    user: 'your-username',8    password: 'your-password',9    database: 'your-database-name',10  },11});12
13async function getUsers() {14  return await knex.select('*').from('users');15}16
17async function addUser(user: any) {18  return await knex('users').insert(user);19}20
21async function getComplexData(22  country: string,23  orderDate: Date,24  category: string,25) {26  // Define Common Table Expressions (CTEs)27  const usersFromCountry = knex('users').where('country', country);28  const ordersFromLast30Days = knex('orders').where(29    'order_date',30    '>=',31    orderDate,32  );33  const booksOrderItems = knex('order_items')34    .join('products', 'order_items.product_id', '=', 'products.id')35    .where('products.category', category);36
37  // Build the main query using CTEs38  const query = knex39    .with('users_from_country', usersFromCountry)40    .with('orders_from_last_30_days', ordersFromLast30Days)41    .with('books_order_items', booksOrderItems)42    .select(43      'users_from_country.name',44      'orders_from_last_30_days.order_date',45      'books_order_items.product_name',46    )47    .from('users_from_country')48    .leftJoin(49      'orders_from_last_30_days',50      'users_from_country.id',51      'orders_from_last_30_days.user_id',52    )53    .leftJoin(54      'books_order_items',55      'orders_from_last_30_days.id',56      'books_order_items.order_id',57    );58
59  return query;60}
```

### [2\. Raw SQL](#2-raw-sql)

When performance is the priority and you want absolute control over your queries, raw SQL is the better choice. It does ask more care of you, because SQL injection is your problem now, and in exchange you get control and efficiency nothing else matches.

Here’s an example of TypeScript code executing a raw SQL query with the `pg` library for PostgreSQL:

```
1import {Pool} from 'pg';2
3const pool = new Pool({4  user: 'your-username',5  host: 'your-database-host',6  database: 'your-database-name',7  password: 'your-password',8  port: 5432, // PostgreSQL default port9});10
11async function getUsers() {12  const client = await pool.connect();13  try {14    const result = await client.query('SELECT * FROM users');15    return result.rows;16  } finally {17    client.release();18  }19}20
21async function addUser(user: any) {22  const client = await pool.connect();23  try {24    const query = {25      text: 'INSERT INTO users(name, email) VALUES($1, $2)',26      values: [user.name, user.email],27    };28    await client.query(query);29  } finally {30    client.release();31  }32}33
34async function getComplexData(35  country: string,36  orderDate: Date,37  category: string,38) {39  const client = await pool.connect();40
41  try {42    // Define the SQL query with placeholders for parameters43    const sqlQuery = `44      WITH45        users_from_country AS (46          SELECT * FROM users WHERE country = $147        ),48        orders_from_last_30_days AS (49          SELECT * FROM orders WHERE order_date >= $250        ),51        books_order_items AS (52          SELECT * FROM order_items53          JOIN products ON order_items.product_id = products.id54          WHERE products.category = $355        )56
57      SELECT58        users_from_country.name,59        orders_from_last_30_days.order_date,60        books_order_items.product_name61      FROM users_from_country62      LEFT JOIN orders_from_last_30_days63        ON users_from_country.id = orders_from_last_30_days.user_id64      LEFT JOIN books_order_items65        ON orders_from_last_30_days.id = books_order_items.order_id66    `;67
68    // Execute the SQL query with parameters69    const result = await client.query(sqlQuery, [country, orderDate, category]);70    return result.rows;71  } finally {72    client.release();73  }74}
```

## [Conclusion](#conclusion)

When you are deciding whether to adopt an ORM with Node.js, TypeScript, and Express, it is worth considering the simpler path first. Before reaching for an ORM, weigh these three points:

1.  **Prioritize performance**: For projects with demanding performance requirements, especially with complex queries or high transaction volumes, raw SQL or a database-specific library gets you a better result.
    
2.  **Use the database expertise you have**: If your team knows SQL and the details of the chosen database well, using that knowledge directly gets you better-tuned database interactions.
    
3.  **Keep control**: When granular control over SQL queries is a requirement, an ORM limits your flexibility. Writing the SQL yourself lets you tune each operation.
    

Choosing not to use an ORM is a legitimate strategic decision, particularly when your goals line up with performance, database expertise, and query control. Faced with the ORM dilemma, the more direct route often gets you where you need to be.

## [References](#references)

1.  “What is an ORM? How ORMs work and why you should use them” - Prisma, [https://www.prisma.io/dataguide/types/relational/what-is-an-orm](https://www.prisma.io/dataguide/types/relational/what-is-an-orm)
2.  “ORM vs. SQL: How to choose the right one for your project” - LogRocket Blog, [https://blog.logrocket.com/orm-vs-sql-how-to-choose-the-right-one-for-your-project/](https://blog.logrocket.com/orm-vs-sql-how-to-choose-the-right-one-for-your-project/)
3.  Knex.js - SQL query builder for JavaScript, [https://knexjs.org/](https://knexjs.org/)
4.  node-postgres (pg) - Non-blocking PostgreSQL client for Node.js, [https://node-postgres.com/](https://node-postgres.com/)
5.  “The Vietnam of Computer Science” by Ted Neward (Discusses the ORM problem.), [http://blogs.tedneward.com/post/the-vietnam-of-computer-science/](http://blogs.tedneward.com/post/the-vietnam-of-computer-science/)
6.  Sequelize ORM Documentation (Popular Node.js ORM.), [https://sequelize.org/](https://sequelize.org/)
7.  TypeORM Documentation (Popular TypeScript ORM.), [https://typeorm.io/](https://typeorm.io/)
8.  “When to Use an ORM (and When Not To)” - SitePoint, [https://www.sitepoint.com/when-to-use-an-orm/](https://www.sitepoint.com/when-to-use-an-orm/)
9.  “SQL vs. NoSQL: What’s the difference?” - IBM. (While not directly ORM, understanding database types helps in choosing data access strategies.), [https://www.ibm.com/cloud/blog/sql-vs-nosql](https://www.ibm.com/cloud/blog/sql-vs-nosql)
10.  “Understanding the Node.js Event Loop” - Node.js Documentation. (Relevant for understanding performance implications of database calls.), [https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/)
11.  “Pros and Cons of Using an ORM” - GeeksforGeeks, [https://www.geeksforgeeks.org/pros-and-cons-of-using-an-orm/](https://www.geeksforgeeks.org/pros-and-cons-of-using-an-orm/)

Was this useful?

## Tags

[#ORM](/blog/tags/orm)[#Node.js](/blog/tags/nodejs)[#TypeScript](/blog/tags/typescript)[#Express.js](/blog/tags/expressjs)[#SQL](/blog/tags/sql)[#Database Design](/blog/tags/database-design)[#Query Builders](/blog/tags/query-builders)[#Knex.js](/blog/tags/knexjs)[#PostgreSQL](/blog/tags/postgresql)[#Performance Optimization](/blog/tags/performance-optimization)[#Software Engineering](/blog/tags/software-engineering)

## Share

[Facebook](https://facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs "Share on Facebook")[Twitter](https://twitter.com/intent/tweet/?text=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use&url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs "Share on Twitter")[LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs&title=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use&summary=A%20look%20at%20Object-Relational%20Mapping%20\(ORM\)%20in%20Node.js%2C%20TypeScript%2C%20and%20Express%3A%20the%20real%20pros%20and%20cons%2C%20and%20when%20and%20why%20to%20consider%20alternatives%20to%20ORM%20for%20your%20database%20operations.&source=https://mkabumattar.com "Share on LinkedIn")[WhatsApp](https://wa.me/?text=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use%20https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs "Share on WhatsApp")[Telegram](https://t.me/share/url?url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs&text=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use "Share on Telegram")[Reddit](https://www.reddit.com/submit?url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs&title=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use "Share on Reddit")[Hacker News](http://news.ycombinator.com/submitlink?u=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs&t=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use "Share on Hacker News")[Pinterest](https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs&media=&description=A%20look%20at%20Object-Relational%20Mapping%20\(ORM\)%20in%20Node.js%2C%20TypeScript%2C%20and%20Express%3A%20the%20real%20pros%20and%20cons%2C%20and%20when%20and%20why%20to%20consider%20alternatives%20to%20ORM%20for%20your%20database%20operations. "Share on Pinterest")[Email](<mailto:?subject=The%20ORM%20Dilemma%3A%20To%20Use%20or%20Not%20to%20Use&body=Check out this article: https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fwhy-not-to-use-orm-in-nodejs>)

## Comments

## You might also enjoy

More posts on similar topics

[![Caching Strategies with Redis in Node.js and TypeScript](/_astro/hero.KUKAT2kl_Z1Ypf5o.webp)](/blog/post/caching-strategies-with-redis-in-node-js-and-typescript)

## [Caching Strategies with Redis in Node.js and TypeScript](/blog/post/caching-strategies-with-redis-in-node-js-and-typescript)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Backend Development](/blog/categories/backend-development)
-   [Caching](/blog/categories/caching)
-   [Performance Optimization](/blog/categories/performance-optimization)
-   [Node.js](/blog/categories/nodejs)
-   [Redis](/blog/categories/redis)
-   [TypeScript](/blog/categories/typescript)

Introduction Optimizing application performance is an ongoing job, and caching is one of the most effective ways to do it. Redis, a fast in-memory data store, is a common choice for caching in Nod

[#Redis Cache](/blog/tags/redis-cache)[#Caching Strategies](/blog/tags/caching-strategies)[#Node.js Performance](/blog/tags/nodejs-performance)+8 tags

[read more](/blog/post/caching-strategies-with-redis-in-node-js-and-typescript)

[![Setting up Node JS, Express, MongoDB, Prettier, ESLint and Husky Application with Babel and authentication as an example](/_astro/hero.C-0XrT7F_1bXKFs.webp)](/blog/post/setting-up-node-js-express-mongodb-prettier-eslint-and-husky-application-with-babel-and-authentication-as-an-example)

## [Setting up Node JS, Express, MongoDB, Prettier, ESLint and Husky Application with Babel and authentication as an example](/blog/post/setting-up-node-js-express-mongodb-prettier-eslint-and-husky-application-with-babel-and-authentication-as-an-example)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Backend Development](/blog/categories/backend-development)
-   [Node.js](/blog/categories/nodejs)
-   [JavaScript](/blog/categories/javascript)
-   [Development Setup](/blog/categories/development-setup)
-   [API Development](/blog/categories/api-development)

Introduction All code from this tutorial as a complete package is available in this repository. If you find this tutorial helpful, please share i

[#Node.js](/blog/tags/nodejs)[#Express.js](/blog/tags/expressjs)[#MongoDB](/blog/tags/mongodb)+11 tags

[read more](/blog/post/setting-up-node-js-express-mongodb-prettier-eslint-and-husky-application-with-babel-and-authentication-as-an-example)

[![Setting up Node.js, Express, Prettier, ESLint, and Husky application with Babel and TypeScript - Part 1](/_astro/hero.DKzl3k6w_w3X8j.webp)](/blog/post/setting-up-node-js-express-prettier-eslint-and-husky-application-with-babel-and-typescript-part-1)

## [Setting up Node.js, Express, Prettier, ESLint, and Husky application with Babel and TypeScript - Part 1](/blog/post/setting-up-node-js-express-prettier-eslint-and-husky-application-with-babel-and-typescript-part-1)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Backend Development](/blog/categories/backend-development)
-   [Node.js](/blog/categories/nodejs)
-   [TypeScript](/blog/categories/typescript)
-   [Development Setup](/blog/categories/development-setup)
-   [JavaScript Tooling](/blog/categories/javascript-tooling)

Introduction All code from this tutorial as a complete package is available in this repos

[#Node.js](/blog/tags/nodejs)[#Express.js](/blog/tags/expressjs)[#TypeScript](/blog/tags/typescript)+9 tags

[read more](/blog/post/setting-up-node-js-express-prettier-eslint-and-husky-application-with-babel-and-typescript-part-1)

[![Setting up JWT Authentication in TypeScript with Express, MongoDB, Babel, Prettier, ESLint, and Husky - Part 2](/_astro/hero.DKzl3k6w_w3X8j.webp)](/blog/post/setting-up-jwt-authentication-in-typescript-with-express-mongodb-babel-prettier-eslint-and-husky-part-2)

## [Setting up JWT Authentication in TypeScript with Express, MongoDB, Babel, Prettier, ESLint, and Husky - Part 2](/blog/post/setting-up-jwt-authentication-in-typescript-with-express-mongodb-babel-prettier-eslint-and-husky-part-2)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Backend Development](/blog/categories/backend-development)
-   [Node.js](/blog/categories/nodejs)
-   [TypeScript](/blog/categories/typescript)
-   [Authentication](/blog/categories/authentication)
-   [API Development](/blog/categories/api-development)

Introduction Why do we even need an authentication mechanism in an application? In my opinion, it doesn't need to be explained. The phrases authentication and authorization have likely crossed you

[#JWT](/blog/tags/jwt)[#Express.js](/blog/tags/expressjs)[#MongoDB](/blog/tags/mongodb)+10 tags

[read more](/blog/post/setting-up-jwt-authentication-in-typescript-with-express-mongodb-babel-prettier-eslint-and-husky-part-2)

[![Run TypeScript Without Compiling](/_astro/hero.EI1J4T1U_ZTF3Kf.webp)](/blog/post/run-typescript-without-compiling)

## [Run TypeScript Without Compiling](/blog/post/run-typescript-without-compiling)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [TypeScript](/blog/categories/typescript)
-   [Node.js](/blog/categories/nodejs)
-   [JavaScript](/blog/categories/javascript)
-   [Development Tools](/blog/categories/development-tools)

Introduction In this post, I will show you how to run TypeScript without compiling it to JavaScript first. This is useful for debugging and testing. Set up a TypeScript project Step 1: cr

[#TypeScript](/blog/tags/typescript)[#Node.js](/blog/tags/nodejs)[#Ts node](/blog/tags/ts-node)+6 tags

[read more](/blog/post/run-typescript-without-compiling)

[![How to Create a AWS RDS MySQL Database and Connect to it using MySQL Workbench](/_astro/hero.BalpSU3D_jRzSY.webp)](/blog/post/how-to-create-a-aws-rds-mysql-database-and-connect-to-it-using-mysql-workbench)

## [How to Create a AWS RDS MySQL Database and Connect to it using MySQL Workbench](/blog/post/how-to-create-a-aws-rds-mysql-database-and-connect-to-it-using-mysql-workbench)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [AWS](/blog/categories/aws)
-   [RDS](/blog/categories/rds)
-   [MySQL](/blog/categories/mysql)
-   [Database Management](/blog/categories/database-management)
-   [Cloud Computing](/blog/categories/cloud-computing)

Introduction RDS is a managed service that makes it easy to set up, operate, and scale a relational database in the cloud. It provides cost-efficient and resizable capacity while automating time-c

[#AWS RDS Setup](/blog/tags/aws-rds-setup)[#MySQL Workbench Connection](/blog/tags/mysql-workbench-connection)[#Relational Database](/blog/tags/relational-database)+4 tags

[read more](/blog/post/how-to-create-a-aws-rds-mysql-database-and-connect-to-it-using-mysql-workbench)

6 related posts
