<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Balaji</title>
    <description>The latest articles on DEV Community by Balaji (@balaji_5384626fc05c543d2f).</description>
    <link>https://dev.to/balaji_5384626fc05c543d2f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3458765%2F4648a484-2c1f-4474-84c5-0732d34651a2.png</url>
      <title>DEV Community: Balaji</title>
      <link>https://dev.to/balaji_5384626fc05c543d2f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/balaji_5384626fc05c543d2f"/>
    <language>en</language>
    <item>
      <title>AWS Batch: Simplifying Large-Scale Batch Processing in the Cloud</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Mon, 22 Dec 2025 06:42:57 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/aws-batch-simplifying-large-scale-batch-processing-in-the-cloud-1f9o</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/aws-batch-simplifying-large-scale-batch-processing-in-the-cloud-1f9o</guid>
      <description>&lt;p&gt;When organizations work with massive datasets, scientific workloads, or scheduled processing tasks, running batch jobs efficiently becomes a serious challenge. Managing servers, scaling compute power, handling failures, and ensuring cost efficiency can quickly turn into a headache. AWS Batch solves this problem by providing a fully managed batch computing service that allows you to run thousands of parallel jobs without worrying about infrastructure.&lt;/p&gt;

&lt;p&gt;AWS Batch automatically provisions the right amount of compute resources, schedules jobs, manages execution, and helps you process workloads faster and more reliably.&lt;/p&gt;

&lt;p&gt;What Is AWS Batch?&lt;/p&gt;

&lt;p&gt;AWS Batch is a cloud service that lets you run batch processing workloads at any scale. Instead of manually managing servers or clusters, AWS Batch:&lt;/p&gt;

&lt;p&gt;Automatically allocates compute resources&lt;/p&gt;

&lt;p&gt;Efficiently schedules and runs batch jobs&lt;/p&gt;

&lt;p&gt;Scales based on workload demand&lt;/p&gt;

&lt;p&gt;Optimizes cost using Spot and On-Demand instances&lt;/p&gt;

&lt;p&gt;It is designed for industries like research, engineering, media, finance, analytics, and any application that requires large-scale processing.&lt;/p&gt;

&lt;p&gt;How AWS Batch Works&lt;/p&gt;

&lt;p&gt;Using AWS Batch is straightforward:&lt;/p&gt;

&lt;p&gt;Submit jobs using the AWS Console, CLI, or SDK&lt;/p&gt;

&lt;p&gt;Define job queues and compute environments&lt;/p&gt;

&lt;p&gt;AWS Batch automatically schedules and runs jobs&lt;/p&gt;

&lt;p&gt;It scales compute resources up and down based on need&lt;/p&gt;

&lt;p&gt;You don’t have to manage EC2 instances manually — AWS Batch handles it for you.&lt;/p&gt;

&lt;p&gt;Key Features&lt;br&gt;
✔ Fully Managed&lt;/p&gt;

&lt;p&gt;No need to run or maintain batch computing infrastructure. AWS handles provisioning, patching, scaling, and workload distribution.&lt;/p&gt;

&lt;p&gt;✔ Scalable and High Performance&lt;/p&gt;

&lt;p&gt;Runs from a single job to millions of jobs efficiently with dynamic scaling.&lt;/p&gt;

&lt;p&gt;✔ Cost Efficient&lt;/p&gt;

&lt;p&gt;Supports:&lt;/p&gt;

&lt;p&gt;On-Demand Instances&lt;/p&gt;

&lt;p&gt;Spot Instances for massive cost savings&lt;/p&gt;

&lt;p&gt;Fargate for serverless compute&lt;/p&gt;

&lt;p&gt;You only pay for what you use.&lt;/p&gt;

&lt;p&gt;✔ Flexible Workloads&lt;/p&gt;

&lt;p&gt;Supports:&lt;/p&gt;

&lt;p&gt;Containerized workloads using Amazon ECS / Fargate&lt;/p&gt;

&lt;p&gt;Traditional batch applications&lt;/p&gt;

&lt;p&gt;High-Performance Computing jobs&lt;/p&gt;

&lt;p&gt;✔ Reliable and Secure&lt;/p&gt;

&lt;p&gt;Integrated with IAM, VPC, CloudWatch, and other AWS services for monitoring, security, and logging.&lt;/p&gt;

&lt;p&gt;Real-World Use Cases&lt;/p&gt;

&lt;p&gt;AWS Batch is widely used across industries such as:&lt;/p&gt;

&lt;p&gt;Data Processing &amp;amp; Analytics&lt;br&gt;
Processing large datasets, log analysis, and ETL workflows.&lt;/p&gt;

&lt;p&gt;Machine Learning&lt;br&gt;
Training jobs, model evaluation, and batch inference tasks.&lt;/p&gt;

&lt;p&gt;Scientific Research&lt;br&gt;
Genomics, simulations, weather prediction, and engineering workloads.&lt;/p&gt;

&lt;p&gt;Media &amp;amp; Rendering&lt;br&gt;
Video rendering, transcoding, and animation pipelines.&lt;/p&gt;

&lt;p&gt;Financial Services&lt;br&gt;
Risk analysis, fraud detection batch runs, and report generation.&lt;/p&gt;

&lt;p&gt;Benefits for Businesses&lt;/p&gt;

&lt;p&gt;Businesses running workloads on AWS Batch gain:&lt;/p&gt;

&lt;p&gt;Faster job completion&lt;/p&gt;

&lt;p&gt;Lower infrastructure costs&lt;/p&gt;

&lt;p&gt;Zero infrastructure management burden&lt;/p&gt;

&lt;p&gt;Improved reliability and performance&lt;/p&gt;

&lt;p&gt;Ability to scale instantly when demand increases&lt;/p&gt;

&lt;p&gt;It allows teams to focus on work, not servers.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>cloudcomputing</category>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>BigPanda in DevOps: What It Is, Why It Matters, and When You Actually Need It</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Mon, 22 Dec 2025 06:37:43 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/bigpanda-in-devops-what-it-is-why-it-matters-and-when-you-actually-need-it-3me6</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/bigpanda-in-devops-what-it-is-why-it-matters-and-when-you-actually-need-it-3me6</guid>
      <description>&lt;p&gt;If you’re working in DevOps, SRE, or IT Operations, you already know the pain: endless alerts, noisy dashboards, incidents popping up every hour, and everyone asking “What broke?” BigPanda exists for exactly this mess.&lt;/p&gt;

&lt;p&gt;Let’s be clear: BigPanda is not a CI/CD or deployment tool.&lt;br&gt;
It is an AIOps Incident Management Platform designed to make sense of chaotic alerts and help teams detect, understand, and resolve outages faster.&lt;/p&gt;

&lt;p&gt;What BigPanda Really Does&lt;/p&gt;

&lt;p&gt;BigPanda collects alerts from all your monitoring, logging, cloud, and ITSM tools and turns them into something useful. Instead of drowning you in hundreds of notifications, it:&lt;/p&gt;

&lt;p&gt;Correlates alerts – groups related alerts into one incident&lt;/p&gt;

&lt;p&gt;Reduces noise – cuts out duplicate and useless alerts&lt;/p&gt;

&lt;p&gt;Adds context – shows application, service owner, environment, severity etc.&lt;/p&gt;

&lt;p&gt;Creates a clear timeline – helps track what happened and when&lt;/p&gt;

&lt;p&gt;Automates response – routes incidents to the right team&lt;/p&gt;

&lt;p&gt;Provides insights – MTTR, frequent failures, and incident analytics&lt;/p&gt;

&lt;p&gt;In simple terms: it turns chaos into something manageable.&lt;/p&gt;

&lt;p&gt;Where It Fits in the DevOps Stack&lt;/p&gt;

&lt;p&gt;BigPanda doesn’t replace your tools. It sits on top of them like a brain.&lt;/p&gt;

&lt;p&gt;It integrates with:&lt;/p&gt;

&lt;p&gt;Monitoring tools: Prometheus, Datadog, Nagios, Zabbix, SolarWinds&lt;/p&gt;

&lt;p&gt;Logging tools: ELK, Splunk&lt;/p&gt;

&lt;p&gt;Cloud platforms: AWS, Azure, GCP&lt;/p&gt;

&lt;p&gt;ITSM: ServiceNow, Jira&lt;/p&gt;

&lt;p&gt;Communication: Slack, Teams&lt;/p&gt;

&lt;p&gt;It acts as the central place where everything comes together.&lt;/p&gt;

&lt;p&gt;Where BigPanda Shines&lt;/p&gt;

&lt;p&gt;If your organization is large, distributed, and constantly dealing with incidents, BigPanda can genuinely make life easier:&lt;/p&gt;

&lt;p&gt;Massive reduction in alert fatigue&lt;/p&gt;

&lt;p&gt;Faster incident detection&lt;/p&gt;

&lt;p&gt;Clear ownership and accountability&lt;/p&gt;

&lt;p&gt;Better visibility for management&lt;/p&gt;

&lt;p&gt;Strong analytics for reliability improvement&lt;/p&gt;

&lt;p&gt;It’s built for enterprises and serious infrastructure environments.&lt;/p&gt;

&lt;p&gt;The Reality Check&lt;/p&gt;

&lt;p&gt;No tool is perfect, and BigPanda isn’t magic.&lt;/p&gt;

&lt;p&gt;Here’s the truth:&lt;/p&gt;

&lt;p&gt;It’s expensive – definitely not for small companies&lt;/p&gt;

&lt;p&gt;It’s not plug-and-play – requires proper setup and rules&lt;/p&gt;

&lt;p&gt;It depends on the quality of your monitoring – bad inputs = bad results&lt;/p&gt;

&lt;p&gt;There is a learning curve for teams&lt;/p&gt;

&lt;p&gt;If your monitoring strategy itself is weak, BigPanda won’t fix it for you.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MongoDB CRUD</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Wed, 08 Oct 2025 04:54:50 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/mongodb-crud-50pf</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/mongodb-crud-50pf</guid>
      <description>&lt;p&gt;Getting Hands-On with MongoDB Atlas: CRUD Operations Made Simple&lt;br&gt;
Hey devs&lt;/p&gt;

&lt;p&gt;I recently dove into MongoDB Atlas to explore how CRUD operations work in a cloud-hosted NoSQL environment—and I wanted to share a few insights and screenshots from my journey. If you're just getting started with MongoDB or curious about how Atlas simplifies database management, this post is for you!&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
I created a database named CRUD and a collection called students. Using the Atlas UI, I performed basic operations like:&lt;/p&gt;

&lt;p&gt;Insert: Added student records with fields like name, age, year, and department.&lt;/p&gt;

&lt;p&gt;Query: Filtered documents using operators like $gt, $or, and range queries with $gte and $lte.&lt;/p&gt;

&lt;p&gt;Update: Modified fields directly in the UI—super intuitive!&lt;/p&gt;

&lt;p&gt;Delete: Flagged documents for deletion with a simple click.&lt;/p&gt;

&lt;p&gt;Sample Queries I Used&lt;br&gt;
Here are a few examples of queries I ran:&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
// Find students with student_id greater than 5000&lt;br&gt;
{ "student_id": { "$gt": "5000" } }&lt;/p&gt;

&lt;p&gt;// Find students aged either 1 or 3&lt;br&gt;
{ "$or": [ { "age": 1 }, { "age": 3 } ] }&lt;/p&gt;

&lt;p&gt;// Find students aged between 1.5 and 7.5&lt;br&gt;
{ "age": { "$gte": 1.5, "$lte": 7.5 } }&lt;br&gt;
Screenshots&lt;br&gt;
I’ve included screenshots showing:&lt;/p&gt;

&lt;p&gt;How documents are structured in MongoDB Atlas&lt;/p&gt;

&lt;p&gt;How filters are applied and results are displayed&lt;/p&gt;

&lt;p&gt;How easy it is to modify or delete documents&lt;/p&gt;

&lt;p&gt;These visuals really help demystify the process for beginners.&lt;/p&gt;

&lt;p&gt;Why MongoDB Atlas?&lt;br&gt;
No setup headaches—just launch and go.&lt;/p&gt;

&lt;p&gt;Built-in UI for managing data without writing shell commands.&lt;/p&gt;

&lt;p&gt;Great for prototyping and learning NoSQL concepts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeqfta1t2pndx3qswh0f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeqfta1t2pndx3qswh0f.jpg" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkfye8xl6imv2guha4js.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkfye8xl6imv2guha4js.jpg" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiehx10b85czo3stafqrz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiehx10b85czo3stafqrz.jpg" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7d97tpxjumr8kvg96a6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7d97tpxjumr8kvg96a6.jpg" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>mongodb</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>TRANSACTION</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Wed, 08 Oct 2025 04:47:40 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/transaction-3c82</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/transaction-3c82</guid>
      <description>&lt;p&gt;\\Understanding MySQL Transactions with Row-Level Locking: A Hands-On Guide&lt;br&gt;
When working with relational databases, ensuring data consistency during concurrent operations is critical. MySQL offers powerful transaction control and row-level locking mechanisms that can help developers maintain integrity even in multi-user environments.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk through a few real-world examples using MySQL’s START TRANSACTION, SELECT ... FOR UPDATE, and ROLLBACK commands to demonstrate how locking and rollback work in practice.&lt;/p&gt;

&lt;p&gt;Scenario 1: Locking Rows with SELECT ... FOR UPDATE&lt;br&gt;
sql&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Lock Alice's row&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Alice' FOR UPDATE;&lt;/p&gt;

&lt;p&gt;-- Update Bob's balance (allowed if not locked by another session)&lt;br&gt;
UPDATE Accounts SET balance = balance + 10 WHERE name = 'Bob';&lt;br&gt;
Insight: SELECT ... FOR UPDATE locks the selected row until the transaction is committed or rolled back. This prevents other sessions from modifying it, ensuring safe concurrent operations.&lt;/p&gt;

&lt;p&gt;Scenario 2: Rolling Back a Transaction&lt;br&gt;
sql&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;Transfer funds from Alice to Bob&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE name = 'Alice';&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE name = 'Bob';&lt;/p&gt;

&lt;p&gt;something went wrong? Roll it back!&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;p&gt;Verify balances&lt;br&gt;
SELECT * FROM Accounts;&lt;br&gt;
Insight: ROLLBACK undoes all changes made during the transaction. This is especially useful when an error occurs mid-operation or a condition fails validation.&lt;/p&gt;

&lt;p&gt;Scenario 3: Locking Bob, Updating Alice&lt;br&gt;
sql&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;Lock Bob's row&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Bob' FOR UPDATE;&lt;/p&gt;

&lt;p&gt;Update Alice's balance&lt;br&gt;
UPDATE Accounts SET balance = balance + 20 WHERE name = 'Alice';&lt;/p&gt;

&lt;p&gt;Insight: Locking one row doesn’t block updates to other rows unless explicitly locked. This allows for fine-grained concurrency control.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p82bhe2sx1aiodnvv15.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p82bhe2sx1aiodnvv15.jpg" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz7sepsntfoujdvmhwu5b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz7sepsntfoujdvmhwu5b.jpg" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwim4x7iss5d98v2tzxuv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwim4x7iss5d98v2tzxuv.jpg" alt=" " width="800" height="526"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3fqduiimbon2y04rrix.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3fqduiimbon2y04rrix.jpg" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>tutorial</category>
      <category>mysql</category>
      <category>database</category>
    </item>
    <item>
      <title>HASHING</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Wed, 08 Oct 2025 04:34:10 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/hashing-6hj</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/hashing-6hj</guid>
      <description>&lt;p&gt;Understanding MySQL Transactions with Row-Level Locking: A Hands-On Guide&lt;br&gt;
When working with relational databases, ensuring data consistency during concurrent operations is critical. MySQL offers powerful transaction control and row-level locking mechanisms that can help developers maintain integrity even in multi-user environments.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk through a few real-world examples using MySQL’s START TRANSACTION, SELECT ... FOR UPDATE, and ROLLBACK commands to demonstrate how locking and rollback work in practice.&lt;/p&gt;

&lt;p&gt;Scenario 1: Locking Rows with SELECT ... FOR UPDATE&lt;br&gt;
sql&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Lock Alice's row&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Alice' FOR UPDATE;&lt;/p&gt;

&lt;p&gt;-- Update Bob's balance (allowed if not locked by another session)&lt;br&gt;
UPDATE Accounts SET balance = balance + 10 WHERE name = 'Bob';&lt;br&gt;
Insight: SELECT ... FOR UPDATE locks the selected row until the transaction is committed or rolled back. This prevents other sessions from modifying it, ensuring safe concurrent operations.&lt;/p&gt;

&lt;p&gt;Scenario 2: Rolling Back a Transaction&lt;br&gt;
sql&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;Transfer funds from Alice to Bob&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE name = 'Alice';&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE name = 'Bob';&lt;/p&gt;

&lt;p&gt;something went wrong? Roll it back!&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;p&gt;Verify balances&lt;br&gt;
SELECT * FROM Accounts;&lt;br&gt;
Insight: ROLLBACK undoes all changes made during the transaction. This is especially useful when an error occurs mid-operation or a condition fails validation.&lt;/p&gt;

&lt;p&gt;Scenario 3: Locking Bob, Updating Alice&lt;br&gt;
sql&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;Lock Bob's row&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Bob' FOR UPDATE;&lt;/p&gt;

&lt;p&gt;Update Alice's balance&lt;br&gt;
UPDATE Accounts SET balance = balance + 20 WHERE name = 'Alice';&lt;/p&gt;

&lt;p&gt;Insight: Locking one row doesn’t block updates to other rows unless explicitly locked. This allows for fine-grained concurrency control.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdao73p0auwsdj4z5swd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdao73p0auwsdj4z5swd.jpg" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyleir2upo5rnvi4rn7vc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyleir2upo5rnvi4rn7vc.jpg" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjm6ryvfjgte2cltx8jgx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjm6ryvfjgte2cltx8jgx.jpg" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ACID</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Wed, 08 Oct 2025 04:26:39 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/acid-5f7a</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/acid-5f7a</guid>
      <description>&lt;p&gt;Getting Hands-On with Oracle Live SQL: My Journey into Database Fundamentals&lt;br&gt;
Hey devs!&lt;/p&gt;

&lt;p&gt;I recently dove into Oracle Live SQL to sharpen my database skills, and I wanted to share some of the cool things I learned—especially around clusters, indexing, and querying data efficiently.&lt;/p&gt;

&lt;p&gt;Creating a Clustered Setup&lt;br&gt;
I started by experimenting with clusters, which allow related tables to be stored together physically. Here's a snippet of what I tried:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE CLUSTER emp_dept_cluster (&lt;br&gt;
deptno NUMBER(3)&lt;br&gt;
)&lt;br&gt;
SIZE 512;&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_emp_dept_cluster&lt;br&gt;
ON CLUSTER emp_dept_cluster;&lt;br&gt;
Then I created two tables—dept and emp—that share the deptno key and are clustered together:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE TABLE dept (&lt;br&gt;
deptno NUMBER(3),&lt;br&gt;
dname VARCHAR2(14),&lt;br&gt;
loc VARCHAR2(13)&lt;br&gt;
)&lt;br&gt;
CLUSTER emp_dept_cluster (deptno);&lt;/p&gt;

&lt;p&gt;CREATE TABLE emp (&lt;br&gt;
empno NUMBER(4),&lt;br&gt;
ename VARCHAR2(10),&lt;br&gt;
job VARCHAR2(9),&lt;br&gt;
mgr NUMBER(4),&lt;br&gt;
hiredate DATE,&lt;br&gt;
sal NUMBER(7,2),&lt;br&gt;
comm NUMBER(7,2),&lt;br&gt;
deptno NUMBER(3)&lt;br&gt;
)&lt;br&gt;
CLUSTER emp_dept_cluster (deptno);&lt;br&gt;
Pro tip: If you get ORA-00955: name is already used by an existing object, it means you’ve already created that object—just drop it or rename it before retrying.&lt;/p&gt;

&lt;p&gt;Building a Student Table and Querying Data&lt;br&gt;
Next, I created a simple student table and practiced inserting and retrieving data:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE TABLE student (&lt;br&gt;
roll_no NUMBER,&lt;br&gt;
name VARCHAR2(20),&lt;br&gt;
dept VARCHAR2(10),&lt;br&gt;
cgpa NUMBER&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO student VALUES (101, 'Alice', 'CS', 8.5);&lt;br&gt;
INSERT INTO student VALUES (110, 'Bob', 'IT', 7.8);&lt;br&gt;
-- more inserts...&lt;br&gt;
SELECT * FROM student;&lt;br&gt;
This helped me understand how to structure data and run basic queries.&lt;/p&gt;

&lt;p&gt;Indexing for Performance&lt;br&gt;
I also explored how indexes improve query performance:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
-- Primary key index is implicit&lt;br&gt;
CREATE TABLE student (&lt;br&gt;
roll_no NUMBER PRIMARY KEY,&lt;br&gt;
name VARCHAR2(50),&lt;br&gt;
dept VARCHAR2(50),&lt;br&gt;
cgpa NUMBER(3,2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Explicit index on name&lt;br&gt;
CREATE INDEX idx_name ON student(name);&lt;/p&gt;

&lt;p&gt;-- Composite index&lt;br&gt;
CREATE INDEX idx_dept_cgpa ON student(dept, cgpa);&lt;br&gt;
Using these indexes, I ran queries like:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
SELECT * FROM student WHERE name = 'Jack';&lt;br&gt;
SELECT * FROM student WHERE dept = 'CSE' AND cgpa = 9.5;&lt;br&gt;
The results were fast and efficient—Oracle Live SQL even shows you which indexes are being used!&lt;/p&gt;

&lt;p&gt;Categorizing with CASE Statements&lt;br&gt;
Finally, I played with the CASE clause to categorize products based on price:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
SELECT product_id, product_name,&lt;br&gt;
CASE&lt;br&gt;
WHEN list_price &amp;lt; 200 THEN 'Low'&lt;br&gt;
WHEN list_price BETWEEN 200 AND 500 THEN 'Medium'&lt;br&gt;
ELSE 'High'&lt;br&gt;
END AS cost&lt;br&gt;
FROM products&lt;br&gt;
ORDER BY cost;&lt;br&gt;
This is a great way to add logic directly into your queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlwei7fk0ix16sjob7wl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlwei7fk0ix16sjob7wl.jpg" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4sir777nqqn4em2km27.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4sir777nqqn4em2km27.jpg" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdh2yur9r5zl29h0iyd09.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdh2yur9r5zl29h0iyd09.jpg" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjp9ecg48twczgnzzohlv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjp9ecg48twczgnzzohlv.jpg" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>sql</category>
      <category>performance</category>
      <category>database</category>
    </item>
    <item>
      <title>Cursor and Trigger</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Wed, 08 Oct 2025 04:17:28 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/cursor-and-trigger-5eep</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/cursor-and-trigger-5eep</guid>
      <description>&lt;p&gt;My SQL Learning Journey: From Tables to Triggers&lt;br&gt;
Hi Devs!  I’m Balaji, and over the past few weeks, I’ve been diving deep into SQL using platforms like Oracle Live SQL and W3Schools. What started as curiosity quickly turned into a full-blown passion for understanding how data flows through relational databases. In this post, I’ll walk you through some of the key concepts I’ve learned—complete with code snippets and real examples.&lt;/p&gt;

&lt;p&gt;Creating Tables Like a Pro&lt;br&gt;
One of the first things I tackled was table creation. Here's a simple example:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE TABLE STUDENT (&lt;br&gt;
    StudentName VARCHAR(50),&lt;br&gt;
    StudentRollNo NUMBER(5),&lt;br&gt;
    StudentMarks NUMBER(5),&lt;br&gt;
    StudentGrade VARCHAR(2),&lt;br&gt;
    StudentResult VARCHAR(10)&lt;br&gt;
);&lt;br&gt;
Seeing “Table STUDENT created” in the output gave me a real sense of accomplishment!&lt;/p&gt;

&lt;p&gt;Understanding Relationships with Foreign Keys&lt;br&gt;
I then moved on to creating related tables:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    StudentID NUMBER PRIMARY KEY,&lt;br&gt;
    Name VARCHAR2(50),&lt;br&gt;
    Age NUMBER&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses (&lt;br&gt;
    CourseID NUMBER PRIMARY KEY,&lt;br&gt;
    CourseName VARCHAR2(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollments (&lt;br&gt;
    EnrollmentID NUMBER PRIMARY KEY,&lt;br&gt;
    StudentID NUMBER,&lt;br&gt;
    CourseID NUMBER,&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)&lt;br&gt;
);&lt;br&gt;
This helped me understand how relational databases maintain integrity across tables.&lt;/p&gt;

&lt;p&gt;Filtering Data with Date Ranges&lt;br&gt;
I also learned how to filter records using BETWEEN and TO_DATE:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
SELECT auditid, studentname, actiondate&lt;br&gt;
FROM student_audit&lt;br&gt;
WHERE actiondate BETWEEN TO_DATE('01-OCT-2015','DD-MON-YYYY')&lt;br&gt;
AND TO_DATE('05-OCT-2015','DD-MON-YYYY');&lt;br&gt;
This query gave me a filtered view of student actions within a specific timeframe.&lt;/p&gt;

&lt;p&gt;Auditing with Triggers&lt;br&gt;
One of the coolest things I built was a trigger to audit changes in the STUDENTS table:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE OR REPLACE TRIGGER trg_student_audit&lt;br&gt;
AFTER INSERT OR UPDATE OR DELETE ON STUDENTS&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
  IF INSERTING THEN&lt;br&gt;
    INSERT INTO STUDENT_AUDIT (...) VALUES (...);&lt;br&gt;
  ELSIF UPDATING THEN&lt;br&gt;
    INSERT INTO STUDENT_AUDIT (...) VALUES (...);&lt;br&gt;
  ELSIF DELETING THEN&lt;br&gt;
    INSERT INTO STUDENT_AUDIT (...) VALUES (...);&lt;br&gt;
  END IF;&lt;br&gt;
END;&lt;br&gt;
This gave me a behind-the-scenes look at how changes are tracked in real-world systems.&lt;/p&gt;

&lt;p&gt;Using Cursors in Procedures&lt;br&gt;
Finally, I explored PL/SQL and created a procedure with a cursor:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE OR REPLACE PROCEDURE emp_proc IS&lt;br&gt;
  CURSOR emp_cursor IS SELECT empno, ename, sal FROM emp;&lt;br&gt;
  emp_record emp_cursor%ROWTYPE;&lt;br&gt;
BEGIN&lt;br&gt;
  OPEN emp_cursor;&lt;br&gt;
  LOOP&lt;br&gt;
    FETCH emp_cursor INTO emp_record;&lt;br&gt;
    EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
    DBMS_OUTPUT.PUT_LINE('Empno: ' || emp_record.empno || ' Name: ' || emp_record.ename || ' Salary: ' || emp_record.sal);&lt;br&gt;
  END LOOP;&lt;br&gt;
  CLOSE emp_cursor;&lt;br&gt;
END;&lt;br&gt;
/&lt;br&gt;
EXEC emp_proc;&lt;br&gt;
Running this felt like unlocking&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysvx81rosi6k22vo7wgi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysvx81rosi6k22vo7wgi.jpg" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fodbsxop9u5ciwtrkld41.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fodbsxop9u5ciwtrkld41.jpg" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iff19wtyrjtzves6esy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iff19wtyrjtzves6esy.jpg" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>tutorial</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>NORMALIZATION</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Wed, 08 Oct 2025 04:06:39 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/normalization-4fh5</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/normalization-4fh5</guid>
      <description>&lt;p&gt;Getting Started with SQL: My Journey from Zero to Table Hero&lt;br&gt;
Hey Devs! I recently dove into the world of SQL, and I wanted to share some insights, tips, and code snippets that helped me grasp the fundamentals of relational databases. Whether you're a total beginner or brushing up your skills, I hope this post gives you a solid starting point.&lt;/p&gt;

&lt;p&gt;Why Learn SQL?&lt;br&gt;
SQL (Structured Query Language) is the backbone of data manipulation. Whether you're building apps, analyzing data, or just curious about how databases work, SQL is a must-have skill.&lt;/p&gt;

&lt;p&gt;Tools I Used&lt;br&gt;
Oracle Live SQL: A free, browser-based platform to write and execute SQL scripts.&lt;/p&gt;

&lt;p&gt;W3Schools SQL Editor: Great for quick practice and tutorials.&lt;/p&gt;

&lt;p&gt;Both platforms offer interactive environments and instant feedback, which made learning super intuitive.&lt;/p&gt;

&lt;p&gt;Sample Tables I Created&lt;br&gt;
Here’s a snippet from one of my practice sessions:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
-- Creating an Employee table&lt;br&gt;
CREATE TABLE Employee (&lt;br&gt;
    EmployeeID NUMBER PRIMARY KEY,&lt;br&gt;
    FirstName VARCHAR2(50),&lt;br&gt;
    LastName VARCHAR2(50),&lt;br&gt;
    Department VARCHAR2(50),&lt;br&gt;
    Salary NUMBER&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Inserting sample data&lt;br&gt;
INSERT INTO Employee VALUES (1, 'John', 'Doe', 'HR', 50000);&lt;br&gt;
INSERT INTO Employee VALUES (2, 'Jane', 'Smith', 'Finance', 60000); Joining Tables Like a Pro&lt;br&gt;
Once I got comfortable with basic queries, I explored JOINs to combine data across tables. Here's a query that pulls student info along with course and instructor details:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
SELECT STUDENTID, STUDENTNAME, COURSEID, COURSENAME, INSTRUCTORNAME&lt;br&gt;
FROM STUDENT S&lt;br&gt;
JOIN COURSE C ON S.COURSEID = C.COURSEID&lt;br&gt;
JOIN INSTRUCTOR I ON C.INSTRUCTORID = I&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwq3w47cn4kue1kcjnkp5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwq3w47cn4kue1kcjnkp5.jpg" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk8teaphumpzv9bk8jct.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk8teaphumpzv9bk8jct.jpg" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F699ocmiaq6w156cunx52.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F699ocmiaq6w156cunx52.jpg" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkqu7m3bd849qgjx0b4t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkqu7m3bd849qgjx0b4t.jpg" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>database</category>
      <category>sql</category>
      <category>beginners</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System</title>
      <dc:creator>Balaji</dc:creator>
      <pubDate>Mon, 25 Aug 2025 17:56:28 +0000</pubDate>
      <link>https://dev.to/balaji_5384626fc05c543d2f/college-student-course-management-system-29jd</link>
      <guid>https://dev.to/balaji_5384626fc05c543d2f/college-student-course-management-system-29jd</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
This blog covers the implementation of a simple College Student &amp;amp; Course Management System using SQL on Oracle LiveSQL. It demonstrates key database concepts such as table creation, data insertion, constraint addition, queries with functions and aggregates, joins, views, and stored procedures.&lt;/p&gt;

&lt;p&gt;The use case focuses on managing students, courses, enrollments, and faculty members with related operations.&lt;/p&gt;

&lt;p&gt;Database Schema&lt;/p&gt;

&lt;p&gt;The database contains four main tables: Students, Courses, Enrollments, and Faculty.&lt;/p&gt;

&lt;p&gt;Students Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
StudentID NUMBER PRIMARY KEY,&lt;br&gt;
Name VARCHAR2(50) NOT NULL,&lt;br&gt;
Dept VARCHAR2(30),&lt;br&gt;
DOB DATE,&lt;br&gt;
Email VARCHAR2(50) UNIQUE&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Course Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses (&lt;br&gt;
CourseID NUMBER PRIMARY KEY,&lt;br&gt;
CourseName VARCHAR2(50) NOT NULL,&lt;br&gt;
Credits NUMBER(2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Enrollments Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollments (&lt;br&gt;
EnrollID NUMBER PRIMARY KEY,&lt;br&gt;
StudentID NUMBER REFERENCES Students(StudentID),&lt;br&gt;
CourseID NUMBER REFERENCES Courses(CourseID),&lt;br&gt;
Grade CHAR(2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Faculty Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Faculty (&lt;br&gt;
FacultyID NUMBER PRIMARY KEY,&lt;br&gt;
FacultyName VARCHAR2(50) NOT NULL,&lt;br&gt;
Dept VARCHAR2(30),&lt;br&gt;
Email VARCHAR2(50) UNIQUE&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Data Insertion&lt;br&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (1, 'Daniel Green', 'Information Technology', TO_DATE('2002-02-10', 'YYYY-MM-DD'), '&lt;a href="mailto:daniel.green@example.com"&gt;daniel.green@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (2, 'Emma White', 'Electronics', TO_DATE('2001-08-05', 'YYYY-MM-DD'), '&lt;a href="mailto:emma.white@example.com"&gt;emma.white@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (3, 'Frank Lee', 'Mechanical', TO_DATE('2003-01-19', 'YYYY-MM-DD'), '&lt;a href="mailto:frank.lee@example.com"&gt;frank.lee@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses (CourseID, CourseName, Credits) VALUES (201, 'Operating Systems', 4);&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, Credits) VALUES (202, 'Digital Circuits', 3);&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, Credits) VALUES (203, 'Thermodynamics', 5);&lt;/p&gt;

&lt;p&gt;INSERT INTO Enrollments (EnrollID, StudentID, CourseID, Grade) VALUES (1, 1, 201, 'A');&lt;br&gt;
INSERT INTO Enrollments (EnrollID, StudentID, CourseID, Grade) VALUES (2, 2, 202, 'B');&lt;br&gt;
INSERT INTO Enrollments (EnrollID, StudentID, CourseID, Grade) VALUES (3, 3, 203, 'A-');&lt;/p&gt;

&lt;p&gt;Table Alterations and Constraints&lt;/p&gt;

&lt;p&gt;ALTER TABLE Students ADD PhoneNo VARCHAR2(10);&lt;/p&gt;

&lt;p&gt;ALTER TABLE Courses ADD CONSTRAINT chk_credits CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;SQL Queries with Functions and Aggregates&lt;br&gt;
Example 1: Listing student names in uppercase and length of their emails&lt;/p&gt;

&lt;p&gt;SELECT UPPER(Name) AS UppercaseName, LENGTH(Email) AS EmailLength&lt;br&gt;
FROM Students;&lt;/p&gt;

&lt;p&gt;UppercaseName   EmailLength&lt;br&gt;
DANIEL GREEN    24&lt;br&gt;
EMMA WHITE  22&lt;br&gt;
FRANK LEE   21&lt;br&gt;
Example 2: Calculating average course credits and counting enrolled students&lt;/p&gt;

&lt;p&gt;SELECT&lt;br&gt;
(SELECT AVG(Credits) FROM Courses) AS AvgCredits,&lt;br&gt;
(SELECT COUNT(DISTINCT StudentID) FROM Enrollments) AS TotalStudentsEnrolled&lt;br&gt;
FROM dual;&lt;/p&gt;

&lt;p&gt;AvgCredits  TotalStudentsEnrolled&lt;br&gt;
4.0 3&lt;br&gt;
JOIN Queries&lt;/p&gt;

&lt;p&gt;Joining Students, Enrollments, and Courses to show which student is enrolled in which course along with grades:&lt;/p&gt;

&lt;p&gt;SELECT s.Name AS StudentName, c.CourseName, e.Grade&lt;br&gt;
FROM Students s&lt;br&gt;
JOIN Enrollments e ON s.StudentID = e.StudentID&lt;br&gt;
JOIN Courses c ON c.CourseID = e.CourseID;&lt;/p&gt;

&lt;p&gt;StudentName CourseName  Grade&lt;br&gt;
Daniel Green    Operating Systems   A&lt;br&gt;
Emma White  Digital Circuits    B&lt;br&gt;
Frank Lee   Thermodynamics  A-&lt;br&gt;
GROUP BY and HAVING Clause&lt;/p&gt;

&lt;p&gt;Counting students in each department and filtering departments with more than 1 student:&lt;/p&gt;

&lt;p&gt;SELECT Dept, COUNT() AS StudentCount&lt;br&gt;
FROM Students&lt;br&gt;
GROUP BY Dept&lt;br&gt;
HAVING COUNT() &amp;gt; 1;&lt;/p&gt;

&lt;p&gt;Dept    StudentCount&lt;br&gt;
(No dept with &amp;gt;1 student in current data)&lt;br&gt;&lt;br&gt;
Views&lt;/p&gt;

&lt;p&gt;CREATE OR REPLACE VIEW StudentCoursesView AS&lt;br&gt;
SELECT s.Name AS StudentName, c.CourseName, e.Grade&lt;br&gt;
FROM Students s&lt;br&gt;
JOIN Enrollments e ON s.StudentID = e.StudentID&lt;br&gt;
JOIN Courses c ON c.CourseID = e.CourseID;&lt;/p&gt;

&lt;p&gt;Stored Procedure&lt;/p&gt;

&lt;p&gt;CREATE OR REPLACE PROCEDURE UpdateGrade (&lt;br&gt;
p_StudentID IN NUMBER,&lt;br&gt;
p_CourseID IN NUMBER,&lt;br&gt;
p_NewGrade IN CHAR&lt;br&gt;
) AS&lt;br&gt;
BEGIN&lt;br&gt;
UPDATE Enrollments&lt;br&gt;
SET Grade = p_NewGrade&lt;br&gt;
WHERE StudentID = p_StudentID AND CourseID = p_CourseID;&lt;br&gt;
COMMIT;&lt;br&gt;
END;&lt;/p&gt;

&lt;p&gt;Summary&lt;/p&gt;

&lt;p&gt;This assignment reinforced understanding of:&lt;/p&gt;

&lt;p&gt;Creating and managing SQL database schemas&lt;/p&gt;

&lt;p&gt;Writing data manipulation queries&lt;/p&gt;

&lt;p&gt;Using SQL functions and aggregate operations&lt;/p&gt;

&lt;p&gt;Performing joins to combine related data&lt;/p&gt;

&lt;p&gt;Creating views and stored procedures to enhance SQL capabilities&lt;/p&gt;

&lt;p&gt;You can try the full script on Oracle LiveSQL to see these operations in action.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>oracle</category>
      <category>database</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
