<?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>Forem: Madhumitha Ganesan</title>
    <description>The latest articles on Forem by Madhumitha Ganesan (@madhumitha_ganesan_).</description>
    <link>https://forem.com/madhumitha_ganesan_</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%2F3547025%2Fbff487c6-e1ff-4110-908f-ee2ead337650.jpg</url>
      <title>Forem: Madhumitha Ganesan</title>
      <link>https://forem.com/madhumitha_ganesan_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/madhumitha_ganesan_"/>
    <language>en</language>
    <item>
      <title>MLOps Engineering on AWS: A Simple Guide</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Fri, 19 Dec 2025 02:38:15 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/mlops-engineering-on-aws-a-simple-guide-30h2</link>
      <guid>https://forem.com/madhumitha_ganesan_/mlops-engineering-on-aws-a-simple-guide-30h2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview of the Tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MLOps Engineering on AWS&lt;/strong&gt; is an AWS training course and approach that focuses on managing the complete lifecycle of machine learning models. It combines Machine Learning (ML), DevOps practices, and automation using AWS services. The goal is to help teams build reliable, scalable, and production-ready ML systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MLOps Engineering on AWS helps teams automate the process of building, training, testing, deploying, and monitoring machine learning models. It supports version control for data and models, automated pipelines, continuous integration and deployment (CI/CD), and monitoring model performance in production. This reduces manual work and improves consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Fits into DevOps / DevSecOps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MLOps Engineering on AWS fits naturally into DevOps and DevSecOps practices. It applies DevOps principles like automation, continuous integration, and continuous deployment to machine learning workflows. Security is also included by using AWS identity management, access control, and monitoring services. This helps teams build secure and reliable ML systems while deploying models faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Languages Used&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MLOps Engineering on AWS commonly uses programming languages such as &lt;strong&gt;Python&lt;/strong&gt;, which is widely used for machine learning. Other supported languages include &lt;strong&gt;Java&lt;/strong&gt;, &lt;strong&gt;Scala&lt;/strong&gt;, and &lt;strong&gt;R&lt;/strong&gt;, depending on the AWS services and frameworks used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parent Company&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MLOps Engineering on AWS is provided and maintained by &lt;strong&gt;Amazon Web Services (AWS)&lt;/strong&gt;, a subsidiary of &lt;strong&gt;Amazon.com, Inc.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Source or Paid?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MLOps Engineering on AWS is &lt;strong&gt;not open source&lt;/strong&gt;. It is a &lt;strong&gt;paid course&lt;/strong&gt; offered through AWS Training platforms. However, many AWS tools used in MLOps, such as frameworks and SDKs, support open-source technologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MLOps Engineering on AWS helps teams manage machine learning models efficiently from development to production. By combining ML with DevOps and security best practices, it enables faster deployment, better monitoring, and more secure ML systems. It is a great learning option for developers and DevOps engineers who want to work with machine learning on AWS.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;THANKYOU SIR FOR YOUR VALUABLE INSIGHTS &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; *&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Microsoft Teams: A Simple Collaboration Tool for DevOps Teams</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Fri, 19 Dec 2025 02:26:37 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/microsoft-teams-a-simple-collaboration-tool-for-devops-teams-44go</link>
      <guid>https://forem.com/madhumitha_ganesan_/microsoft-teams-a-simple-collaboration-tool-for-devops-teams-44go</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Microsoft Teams?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams is a cloud-based collaboration platform that allows users to chat, conduct video meetings, share files, and integrate other tools in one place. It is widely used by organizations for daily communication and teamwork.&lt;/p&gt;

&lt;p&gt;For developers and DevOps teams, Microsoft Teams acts as a central hub where discussions, alerts, and project updates happen in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features of Microsoft Teams&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams makes communication simple for teams. Users can chat privately or in groups, join audio and video meetings, and share their screens to explain ideas. It also allows easy file sharing so team members can work together on documents. Teams can connect with DevOps tools like GitHub and Azure DevOps, and bots can send automatic alerts and updates. Overall, these features help teams work faster and stay organized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Teams in DevOps and DevSecOps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams is useful in DevOps and DevSecOps because it keeps everyone informed. Teams receive notifications about builds, deployments, and errors. Developers and security teams can discuss issues and fixes in one place. This helps teams respond quickly to problems and improves collaboration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Languages Supported&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams supports app and bot development using JavaScript, TypeScript, Node.js, React, and .NET (C#). These languages help developers customize Teams easily based on their project needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parent Company&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams is developed and maintained by &lt;strong&gt;Microsoft Corporation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Microsoft Teams Open Source or Paid?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams is &lt;strong&gt;not open source&lt;/strong&gt;. It is a &lt;strong&gt;paid tool&lt;/strong&gt;, but it also offers a free version with limited features. Most organizations use it as part of Microsoft 365 subscription plans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Teams is a simple yet powerful collaboration tool. It helps DevOps and DevSecOps teams communicate better, receive important alerts, and work together efficiently. For organizations already using Microsoft tools, Microsoft Teams is an excellent choice for team collaboration.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Thankyou for the insights sir &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; *&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>react</category>
      <category>api</category>
    </item>
    <item>
      <title>CRUD (Create, Read, Update, Delete) operations in MongoDB using a simple college student schema.</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Mon, 06 Oct 2025 09:21:43 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/crud-create-read-update-delete-operations-in-mongodb-using-a-simple-college-student-schema-4h99</link>
      <guid>https://forem.com/madhumitha_ganesan_/crud-create-read-update-delete-operations-in-mongodb-using-a-simple-college-student-schema-4h99</guid>
      <description>&lt;p&gt;To gain hands-on experience in performing CRUD (Create, Read, Update, Delete) operations in MongoDB using a simple college student schema.&lt;/p&gt;

&lt;p&gt;🧱 Schema (Collection: students)&lt;/p&gt;

&lt;p&gt;Each document follows this structure:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "student_id": "S001",&lt;br&gt;
  "name": "Santhosh",&lt;br&gt;
  "age": 20,&lt;br&gt;
  "department": "CSBS",&lt;br&gt;
  "year": 2,&lt;br&gt;
  "cgpa": 9&lt;br&gt;
}&lt;br&gt;
DEV Community&lt;br&gt;
2&lt;/p&gt;

&lt;p&gt;0&lt;/p&gt;

&lt;p&gt;0&lt;/p&gt;

&lt;p&gt;Baviya Varshini V&lt;br&gt;
Baviya Varshini V&lt;br&gt;
Posted on 5 Oct&lt;/p&gt;

&lt;p&gt;CRUD (Create, Read, Update, Delete) operations in MongoDB using a simple college student schema.&lt;/p&gt;

&lt;p&gt;beginners&lt;/p&gt;

&lt;p&gt;mongodb&lt;/p&gt;

&lt;p&gt;database&lt;/p&gt;

&lt;p&gt;tutorial&lt;br&gt;
To gain hands-on experience in performing CRUD (Create, Read, Update, Delete) operations in MongoDB using a simple college student schema.&lt;/p&gt;

&lt;p&gt;🧱 Schema (Collection: students)&lt;/p&gt;

&lt;p&gt;Each document follows this structure:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "student_id": "S001",&lt;br&gt;
  "name": "Santhosh",&lt;br&gt;
  "age": 20,&lt;br&gt;
  "department": "CSBS",&lt;br&gt;
  "year": 2,&lt;br&gt;
  "cgpa": 9&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;⚙ 1️⃣ CREATE (INSERT)&lt;br&gt;
Insert at least 5 student records into the students collection:&lt;/p&gt;

&lt;p&gt;db.students.insertMany([&lt;br&gt;
  {&lt;br&gt;
    "student_id": "S001",&lt;br&gt;
    "name": "Santhosh",&lt;br&gt;
    "age": 20,&lt;br&gt;
    "department": "CSBS",&lt;br&gt;
    "year": 2,&lt;br&gt;
    "cgpa": 9&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    "student_id": "S002",&lt;br&gt;
    "name": "Baviya",&lt;br&gt;
    "age": 19,&lt;br&gt;
    "department": "CSE",&lt;br&gt;
    "year": 1,&lt;br&gt;
    "cgpa": 8.7&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    "student_id": "S003",&lt;br&gt;
    "name": "Karthik",&lt;br&gt;
    "age": 21,&lt;br&gt;
    "department": "ECE",&lt;br&gt;
    "year": 3,&lt;br&gt;
    "cgpa": 7.2&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    "student_id": "S004",&lt;br&gt;
    "name": "Anu",&lt;br&gt;
    "age": 20,&lt;br&gt;
    "department": "CSE",&lt;br&gt;
    "year": 2,&lt;br&gt;
    "cgpa": 9.3&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    "student_id": "S005",&lt;br&gt;
    "name": "Ravi",&lt;br&gt;
    "age": 22,&lt;br&gt;
    "department": "MECH",&lt;br&gt;
    "year": 3,&lt;br&gt;
    "cgpa": 6.8&lt;br&gt;
  }&lt;br&gt;
])&lt;br&gt;
READ (QUERY)&lt;/p&gt;

&lt;p&gt;Find all students with CGPA &amp;gt; 8:&lt;br&gt;
3️⃣ UPDATE&lt;br&gt;
(a) Update the CGPA of a specific student&lt;/p&gt;

&lt;p&gt;db.students.updateOne(&lt;br&gt;
  { student_id: "S002" },&lt;br&gt;
  { $set: { cgpa: 9.1 } }&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;(b) Increase the year of study for all 3rd-year students by 1&lt;/p&gt;

&lt;p&gt;db.students.updateMany(&lt;br&gt;
  { year: 3 },&lt;br&gt;
  { $inc: { year: 1 } }&lt;br&gt;
)&lt;br&gt;
DELETE&lt;br&gt;
(a) Delete one student record by student_id:&lt;/p&gt;

&lt;p&gt;db.students.deleteOne({ student_id: "S005" })&lt;/p&gt;

&lt;p&gt;(b) Delete all students having CGPA &amp;lt; 7.5&lt;/p&gt;

&lt;p&gt;db.students.deleteMany({ cgpa: { $lt: 7.5 } })&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%2F0h1h9fbs8f0qu3o4khjd.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%2F0h1h9fbs8f0qu3o4khjd.jpg" alt=" " width="800" height="381"&gt;&lt;/a&gt;&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%2Ffe4unv82nlgrirmyplcq.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%2Ffe4unv82nlgrirmyplcq.jpg" alt=" " width="800" height="366"&gt;&lt;/a&gt;&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%2F91ocj0bq8wjoiyxplz6g.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%2F91ocj0bq8wjoiyxplz6g.jpg" alt=" " width="800" height="433"&gt;&lt;/a&gt;&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%2Fkxtjhfdptqwiyandqx8g.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%2Fkxtjhfdptqwiyandqx8g.jpg" alt=" " width="800" height="392"&gt;&lt;/a&gt;&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%2F8ofwz9olbhnwgef9w2qv.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%2F8ofwz9olbhnwgef9w2qv.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&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%2Fl77vb3qag7khn4wmopv4.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%2Fl77vb3qag7khn4wmopv4.jpg" alt=" " width="800" height="389"&gt;&lt;/a&gt;&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%2Fwkif6tkzugtgxlv2xzp9.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%2Fwkif6tkzugtgxlv2xzp9.jpg" alt=" " width="800" height="418"&gt;&lt;/a&gt;&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%2Fw8c9ttg6lp240p27h6fr.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%2Fw8c9ttg6lp240p27h6fr.jpg" alt=" " width="800" height="385"&gt;&lt;/a&gt;&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%2Fcch6vr91grla26h03c29.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%2Fcch6vr91grla26h03c29.jpg" alt=" " width="800" height="320"&gt;&lt;/a&gt;&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%2Fbp94ibqg0621lz3oyxql.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%2Fbp94ibqg0621lz3oyxql.jpg" alt=" " width="800" height="427"&gt;&lt;/a&gt;&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%2F80yoea9a79lpxva4g2kw.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%2F80yoea9a79lpxva4g2kw.jpg" alt=" " width="800" height="335"&gt;&lt;/a&gt;&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%2Fr3ghmj4rfcnqxx5t3k34.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%2Fr3ghmj4rfcnqxx5t3k34.jpg" alt=" " width="800" height="338"&gt;&lt;/a&gt;&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%2Fua0kwwilbds8t58vidnw.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%2Fua0kwwilbds8t58vidnw.jpg" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>database</category>
    </item>
    <item>
      <title>DBMS - Transactions, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Mon, 06 Oct 2025 09:11:57 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/dbms-transactions-deadlocks-log-based-recovery-40k</link>
      <guid>https://forem.com/madhumitha_ganesan_/dbms-transactions-deadlocks-log-based-recovery-40k</guid>
      <description>&lt;p&gt;Working with databases is not just about storing data — it’s about ensuring reliability, atomicity, and consistency, especially when multiple users or processes are involved. In this post, we’ll explore three important concepts using a simple Accounts table:&lt;/p&gt;

&lt;p&gt;✅ Transactions &amp;amp; Rollback (Atomicity)&lt;/p&gt;

&lt;p&gt;🔒 Deadlock Simulation&lt;/p&gt;

&lt;p&gt;📝 Log-Based Recovery&lt;/p&gt;

&lt;p&gt;Setup: The Accounts Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Accounts (&lt;br&gt;
acc_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR(50),&lt;br&gt;
balance INT&lt;br&gt;
);&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%2F2mcbsxh5wa4yik1n5cwn.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%2F2mcbsxh5wa4yik1n5cwn.jpg" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO CustomerAccounts VALUES (1, 'Emily', 1000);&lt;br&gt;
INSERT INTO CustomerAccounts VALUES (2, 'Bobby', 1500);&lt;br&gt;
INSERT INTO CustomerAccounts VALUES (3, 'Caleb', 2000);&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%2Feeuf2eyco9ow59rnde4f.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%2Feeuf2eyco9ow59rnde4f.jpg" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SELECT * FROM CustomerAccounts;&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%2F77v1i31zo3eed0ivn606.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%2F77v1i31zo3eed0ivn606.jpg" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;br&gt;
Transaction – Atomicity &amp;amp; Rollback&lt;/p&gt;

&lt;p&gt;Transactions ensure all-or-nothing execution. Let’s try transferring 500 from Emily to Bobby, but roll it back midway.&lt;/p&gt;

&lt;p&gt;Deduct 500 from Emily&lt;/p&gt;

&lt;p&gt;UPDATE CustomerAccounts&lt;br&gt;
SET balance = balance - 500&lt;br&gt;
WHERE name = 'Emily';&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%2Fxwox2o1dlcfjmeow6zb5.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%2Fxwox2o1dlcfjmeow6zb5.jpg" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;br&gt;
Add 500 to Bobby&lt;br&gt;
UPDATE Accounts&lt;br&gt;
SET balance = balance + 500&lt;br&gt;
WHERE name = 'Bob';&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%2Flustxso7iffjp8nbi6gs.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%2Flustxso7iffjp8nbi6gs.jpg" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rollback transaction&lt;/p&gt;

&lt;p&gt;ROLLBACK;&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%2Fb7br741e9kl8jez2ochr.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%2Fb7br741e9kl8jez2ochr.jpg" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check balances**&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SELECT * FROM Accounts;&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%2Ff9jwwnyzp5vs265uqvfu.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%2Ff9jwwnyzp5vs265uqvfu.jpg" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deadlock Simulation&lt;/p&gt;

&lt;p&gt;Deadlocks occur when two transactions wait on each other’s locks. Let’s simulate with two sessions:&lt;/p&gt;

&lt;p&gt;Session 1:&lt;/p&gt;

&lt;p&gt;-- Lock Emily&lt;br&gt;
UPDATE Accounts SET balance = balance - 100 WHERE name = 'Emily';&lt;br&gt;
-- Do NOT commit&lt;/p&gt;

&lt;p&gt;Session 2:&lt;br&gt;
-- Lock Bobby&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance - 200 WHERE name = 'Bobby';&lt;br&gt;
-- Do NOT commit&lt;/p&gt;

&lt;p&gt;Continuing Session 1&lt;br&gt;
-- Try updating Bobby (held by Session2)&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 100 WHERE name = 'Bobby';&lt;/p&gt;

&lt;p&gt;Continuing Session 2&lt;br&gt;
-- Try updating Emily (held by Session 1)&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 200 WHERE name = 'Emily';&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%2F06vxyfpjwek24v7c2607.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%2F06vxyfpjwek24v7c2607.jpg" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Log-Based Recovery&lt;/p&gt;

&lt;p&gt;Modern DBMSs use logs (MySQL → Binary Log, PostgreSQL → WAL) to ensure durability and rollback safety.&lt;/p&gt;

&lt;p&gt;-- Update Caleb&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 300 WHERE name = 'Caleb';&lt;/p&gt;

&lt;p&gt;-- Rollback&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;p&gt;-- Verify balances&lt;br&gt;
SELECT * FROM CustomerAccounts;&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%2Fvh2r582nu7ewpn8bo95m.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%2Fvh2r582nu7ewpn8bo95m.jpg" alt=" " width="800" height="371"&gt;&lt;/a&gt;&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%2Ffutx3xwrhuxcgb55u881.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%2Ffutx3xwrhuxcgb55u881.jpg" alt=" " width="800" height="415"&gt;&lt;/a&gt;&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%2Fot8yssr2hy8xa1omdhwz.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%2Fot8yssr2hy8xa1omdhwz.jpg" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wrap Up&lt;/p&gt;

&lt;p&gt;In this tutorial, we covered:&lt;/p&gt;

&lt;p&gt;Transactions &amp;amp; Rollback → Ensures atomicity&lt;/p&gt;

&lt;p&gt;Deadlock Simulation → Shows concurrency pitfalls&lt;/p&gt;

&lt;p&gt;Log-Based Recovery → Demonstrates how databases ensure durability&lt;/p&gt;

&lt;p&gt;These concepts form the backbone of ACID properties in relational databases.&lt;/p&gt;

&lt;p&gt;Special thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;  Sir for guidance throughout this assignment.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>database</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>ACID Properties with SQL Transactions in DBMS</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Mon, 06 Oct 2025 09:05:53 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/acid-properties-with-sql-transactions-in-dbms-3766</link>
      <guid>https://forem.com/madhumitha_ganesan_/acid-properties-with-sql-transactions-in-dbms-3766</guid>
      <description>&lt;p&gt;Demonstrating ACID Properties with SQL Transactions:-&lt;/p&gt;

&lt;p&gt;Creating a Database in MySql&lt;/p&gt;

&lt;p&gt;CREATE DATABASE acid_demo;&lt;br&gt;
USE acid_demo;&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%2Fct87vq49tzys463dnnxz.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%2Fct87vq49tzys463dnnxz.jpg" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;br&gt;
Create a table Accounts(acc_no INT PRIMARY KEY, name VARCHAR(50), balance INT).&lt;/p&gt;

&lt;p&gt;CREATE TABLE Accounts (&lt;br&gt;
acc_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR(50),&lt;br&gt;
balance INT CHECK (balance &amp;gt;= 0)&lt;br&gt;
) ENGINE=InnoDB;&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%2Fnse37fhlisbrgaaa6nra.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%2Fnse37fhlisbrgaaa6nra.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Insert 3 sample rows.&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES&lt;br&gt;
(1, 'Alice', 5000),&lt;br&gt;
(2, 'Bob', 3000),&lt;br&gt;
(3, 'Charlie', 7000);&lt;/p&gt;

&lt;p&gt;Run it.&lt;br&gt;
👉 Output: 3 rows inserted.&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%2Fav5goltgakbtndmep4s1.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%2Fav5goltgakbtndmep4s1.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the table:&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts;&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%2Fnd8sr63uh5hidk969rce.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%2Fnd8sr63uh5hidk969rce.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Output:&lt;br&gt;
acc_no | name | balance&lt;br&gt;
1 | Alice | 5000&lt;br&gt;
2 | Bob | 3000&lt;br&gt;
3 | Charlie | 7000&lt;/p&gt;

&lt;p&gt;Atomicity (Rollback vs Commit)&lt;/p&gt;

&lt;p&gt;Atomicity: Start a transaction that transfers money. Rollback midway → ensure no partial update remains.&lt;/p&gt;

&lt;p&gt;ROLLBACK:&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 1000 WHERE acc_no = 1;&lt;br&gt;
UPDATE Accounts SET balance = balance + 1000 WHERE acc_no = 2;&lt;br&gt;
ROLLBACK;&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;
balances remain unchanged (Alice=5000, Bob=3000).&lt;br&gt;
This proves atomicity: either all updates happen, or none.&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%2F7abdmfplh9rl6fi2ftx5.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%2F7abdmfplh9rl6fi2ftx5.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
COMMIT:&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE acc_no = 1;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 2;&lt;br&gt;
COMMIT;&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;Output: Alice=4500, Bob=3500.&lt;br&gt;
Committed → permanent update.&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%2Fkf0f5aermhb5zx0pkqvl.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%2Fkf0f5aermhb5zx0pkqvl.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Consistency&lt;/p&gt;

&lt;p&gt;Try inserting a wrong record:&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES (4, 'David', -500);&lt;/p&gt;

&lt;p&gt;Output: Error – CHECK constraint failed.&lt;br&gt;
Database rejects invalid data → consistency is preserved.&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%2Ft5qi5ieirld7yy9310f2.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%2Ft5qi5ieirld7yy9310f2.jpg" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;br&gt;
Isolation (needs 2 query tabs)&lt;/p&gt;

&lt;p&gt;Open two query tabs in Workbench:&lt;/p&gt;

&lt;p&gt;Tab A = Session 1&lt;/p&gt;

&lt;p&gt;Tab B = Session 2&lt;/p&gt;

&lt;p&gt;In Tab A,&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 2000 WHERE acc_no = 1;&lt;br&gt;
-- Do not commit yet&lt;br&gt;
SELECT balance FROM Accounts WHERE acc_no = 1;&lt;/p&gt;

&lt;p&gt;Tab A sees the reduced balance (2500).&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%2Ff22ay8hkc1u9gipws4ts.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%2Ff22ay8hkc1u9gipws4ts.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Tab B,&lt;/p&gt;

&lt;p&gt;SELECT balance FROM Accounts WHERE acc_no = 1;&lt;/p&gt;

&lt;p&gt;If using default isolation (REPEATABLE READ), Tab B still sees old committed value (4500), not Tab A’s uncommitted update.&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%2Ffrcyiavpuska1rzkd69j.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%2Ffrcyiavpuska1rzkd69j.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, back in Tab A:&lt;/p&gt;

&lt;p&gt;ROLLBACK;&lt;/p&gt;

&lt;p&gt;Both sessions see Alice back to 4500.&lt;br&gt;
This shows isolation.&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%2Fgrbup4yz1h58wvkix1xv.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%2Fgrbup4yz1h58wvkix1xv.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durability&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 3;&lt;br&gt;
COMMIT;&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%2Ffaxjq1xuyiu44p4qg7cy.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%2Ffaxjq1xuyiu44p4qg7cy.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Check:&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts WHERE acc_no = 3;&lt;/p&gt;

&lt;p&gt;Charlie’s balance increases (7500).&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%2Fm87rvnv3fphk77vwjlyb.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%2Fm87rvnv3fphk77vwjlyb.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Now restart MySQL server&lt;br&gt;
Reconnect, run again:&lt;/p&gt;

&lt;p&gt;USE acid_demo;&lt;br&gt;
SELECT * FROM Accounts WHERE acc_no = 3;&lt;/p&gt;

&lt;p&gt;Balance is still 7500.&lt;br&gt;
This proves durability: committed changes survive restarts.&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%2F2qzwhcvvl6ojql81aqft.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%2F2qzwhcvvl6ojql81aqft.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conclusion:&lt;/p&gt;

&lt;p&gt;Atomicity: Transactions are “All or Nothing”.&lt;/p&gt;

&lt;p&gt;Consistency: Database enforces valid data.&lt;/p&gt;

&lt;p&gt;Isolation: Concurrent transactions do not interfere.&lt;/p&gt;

&lt;p&gt;Durability: Committed changes are permanent.&lt;/p&gt;

&lt;p&gt;Thanks &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; Sir for his guidance and support and for Everything&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in DBMS</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Mon, 06 Oct 2025 08:52:01 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/indexing-hashing-query-optimization-in-dbms-3p8h</link>
      <guid>https://forem.com/madhumitha_ganesan_/indexing-hashing-query-optimization-in-dbms-3p8h</guid>
      <description>&lt;p&gt;We will focus on enhancing query performance in Oracle SQL by using indexes. We’ll create a Students table, insert sample records, and run optimized queries utilizing B-Tree and B+ Tree indexes.&lt;/p&gt;

&lt;p&gt;Definition:&lt;/p&gt;

&lt;p&gt;Indexing: A database index is a data structure that enhances the speed of data retrieval operations on a table, though it comes with additional costs in terms of writes and storage space.&lt;/p&gt;

&lt;p&gt;Hash Index: Utilizes a hash function to enable rapid equality searches. (Note: In Oracle, true hash indexes are not directly supported; hash-like performance can be achieved through specific functions or clustering techniques.)&lt;/p&gt;

&lt;p&gt;B+ Tree Index: An extension of the B-Tree where all values are stored at the leaf nodes, making it more efficient for range queries.&lt;/p&gt;

&lt;p&gt;B-Tree Index: A balanced tree-based index commonly used for equality and range queries.&lt;/p&gt;

&lt;p&gt;Query Optimization: The process of minimizing query execution time by leveraging indexes and writing efficient SQL statements.&lt;/p&gt;

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

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
roll_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR2(50),&lt;br&gt;
dept VARCHAR2(20),&lt;br&gt;
cgpa NUMBER(3,2)&lt;br&gt;
);&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%2Fefnjouj5vz9basj9v6ub.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%2Fefnjouj5vz9basj9v6ub.jpg" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;br&gt;
Inserting Sample Records&lt;br&gt;
INSERT INTO Student VALUES (101, 'Aarav', 'CSBS', 8.5);&lt;br&gt;
INSERT INTO Student VALUES (102, 'Rhea', 'CSBS', 7.8);&lt;br&gt;
INSERT INTO Student VALUES (103, 'Varun', 'ECE', 9.0);&lt;br&gt;
INSERT INTO Student VALUES (104, 'Simran', 'ME', 8.2);&lt;br&gt;
INSERT INTO Student VALUES (105, 'Kunal', 'CSBS', 8.8);&lt;br&gt;
INSERT INTO Student VALUES (106, 'Devansh', 'ECE', 7.5);&lt;br&gt;
INSERT INTO Student VALUES (107, 'Ishita', 'ME', 8.7);&lt;br&gt;
INSERT INTO Student VALUES (108, 'Aryan', 'CSBS', 6.9);&lt;br&gt;
INSERT INTO Student VALUES (109, 'Neha', 'ECE', 8.0);&lt;br&gt;
INSERT INTO Student VALUES (110, 'Rudra', 'CSBS', 9.2);&lt;br&gt;
INSERT INTO Student VALUES (111, 'Aanya', 'ME', 7.9);&lt;br&gt;
INSERT INTO Student VALUES (112, 'Samar', 'CSBS', 8.3);&lt;br&gt;
INSERT INTO Student VALUES (113, 'Kavya', 'ECE', 9.1);&lt;br&gt;
INSERT INTO Student VALUES (114, 'Harsh', 'ME', 7.7);&lt;br&gt;
INSERT INTO Student VALUES (115, 'Lavanya', 'CSBS', 8.6);&lt;br&gt;
INSERT INTO Student VALUES (116, 'Naveen', 'ECE', 8.4);&lt;br&gt;
INSERT INTO Student VALUES (117, 'Tanvi', 'ME', 8.0);&lt;br&gt;
INSERT INTO Student VALUES (118, 'Yash', 'CSBS', 7.6);&lt;br&gt;
INSERT INTO Student VALUES (119, 'Pallavi', 'ECE', 8.9);&lt;br&gt;
INSERT INTO Student VALUES (120, 'Abhinav', 'ME', 8.1);&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%2Fl40j74xc5xs3fhuxfp83.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%2Fl40j74xc5xs3fhuxfp83.jpg" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
Creating a B-Tree Index on roll_no&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_roll_no ON Students(roll_no);&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%2Fngoiv33ylbgil9ied31p.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%2Fngoiv33ylbgil9ied31p.jpg" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Query: Fetch student with roll_no = 110&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students WHERE roll_no = 110;&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%2F7sjnescspd3u8e99zbx5.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%2F7sjnescspd3u8e99zbx5.jpg" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating a B+ Tree Index on cgpa&lt;/p&gt;

&lt;p&gt;Oracle automatically uses B+ Tree for numeric indexes.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_cgpa ON Students(cgpa);&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%2Fcrggs6w2908n7iszvg80.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%2Fcrggs6w2908n7iszvg80.jpg" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SELECT * FROM Student WHERE cgpa &amp;gt; 8.0;&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%2F4nsz2hgl2tqb2qoogxz8.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%2F4nsz2hgl2tqb2qoogxz8.jpg" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating an Index on dept for Fast Equality Search&lt;/p&gt;

&lt;p&gt;Oracle does not support direct hash indexes for normal tables.&lt;br&gt;
Instead, we use a regular index:&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_dept ON Students(dept);&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%2F6ofwxv8l342f3sw4aaoa.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%2F6ofwxv8l342f3sw4aaoa.jpg" alt=" " width="800" height="468"&gt;&lt;/a&gt;&lt;br&gt;
Query: Retrieve all students from the CSBS department&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students WHERE dept = 'CSBS';&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%2F5ztf8kwqqnm939t9mzi9.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%2F5ztf8kwqqnm939t9mzi9.jpg" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steps Summary:-&lt;/p&gt;

&lt;p&gt;Defined the Students table with columns: roll_no, name, dept, and cgpa.&lt;br&gt;
Added 20 sample records into the table.&lt;br&gt;
Built a B-Tree index on roll_no to enable faster lookups.&lt;br&gt;
Created a B+ Tree index on cgpa to improve range query performance.&lt;br&gt;
Indexed the dept column to accelerate equality-based searches.&lt;br&gt;
Executed queries to test and confirm indexing benefits in performance.&lt;br&gt;
Conclusion:-&lt;/p&gt;

&lt;p&gt;By using indexes, query execution becomes faster and more efficient. Indexing is a vital part of query optimization in DBMS.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;  Sir for guiding me through indexing and query optimization concepts.&lt;/p&gt;

&lt;p&gt;SQL #Oracle #Indexing #BTree #BPlusTree #QueryOptimization #DBMS #Database&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Cursor and trigger in DBMS</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Mon, 06 Oct 2025 08:41:07 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/cursor-and-trigger-in-dbms-1078</link>
      <guid>https://forem.com/madhumitha_ganesan_/cursor-and-trigger-in-dbms-1078</guid>
      <description>&lt;p&gt;Definition of Cursor in DBMS:-&lt;/p&gt;

&lt;p&gt;A cursor in a Database Management System (DBMS) is a special control structure that enables traversal over the records in a result set obtained by executing a query. Unlike traditional SQL statements that operate on the entire set of rows simultaneously, a cursor allows row-by-row retrieval and processing of data. This makes it particularly useful when fine-grained, sequential manipulation of query results is required, such as performing conditional checks, applying calculations, or handling complex business logic on each individual row.&lt;br&gt;
Cursor Example – Retrieving and Displaying Employee Records Where the Salary is Greater Than ₹50,000&lt;/p&gt;

&lt;p&gt;Step 1: Create Employee Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Emp (&lt;br&gt;
Emp_ID NUMBER PRIMARY KEY,&lt;br&gt;
Emp_Name VARCHAR2(50),&lt;br&gt;
Salary NUMBER&lt;br&gt;
);&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%2F7qezuiajvb57j0p67pej.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%2F7qezuiajvb57j0p67pej.jpg" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO Emp (Emp_ID, Emp_Name, Salary) VALUES (1, 'Ramesh', 60000);&lt;br&gt;
INSERT INTO Emp (Emp_ID, Emp_Name, Salary) VALUES (2, 'Suresh', 45000);&lt;br&gt;
INSERT INTO Emp (Emp_ID, Emp_Name, Salary) VALUES (3, 'Anita', 75000);&lt;br&gt;
INSERT INTO Emp (Emp_ID, Emp_Name, Salary) VALUES (4, 'Kavya', 50000);&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%2Fxdf1rx1fyd4ib1jhr0zd.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%2Fxdf1rx1fyd4ib1jhr0zd.jpg" alt=" " width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DECLARE&lt;br&gt;
CURSOR emp_cursor IS&lt;br&gt;
SELECT Emp_Name, Salary FROM Emp WHERE Salary &amp;gt; 50000;&lt;br&gt;
v_EmpName Emp.Emp_Name%TYPE;&lt;br&gt;
v_Salary Emp.Salary%TYPE;&lt;br&gt;
BEGIN&lt;br&gt;
OPEN emp_cursor;&lt;br&gt;
LOOP&lt;br&gt;
FETCH emp_cursor INTO v_EmpName, v_Salary;&lt;br&gt;
EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
DBMS_OUTPUT.PUT_LINE('Emp: ' || v_EmpName || ', Salary: ₹' || v_Salary);&lt;br&gt;
END LOOP;&lt;br&gt;
CLOSE emp_cursor;&lt;br&gt;
END;&lt;br&gt;
/&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%2F6khk72ulr4g4zd73suzx.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%2F6khk72ulr4g4zd73suzx.jpg" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;br&gt;
CREATE TABLE Student (&lt;br&gt;
Student_ID NUMBER PRIMARY KEY,&lt;br&gt;
Student_Name VARCHAR2(50),&lt;br&gt;
Course VARCHAR2(50)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Student_Audit (&lt;br&gt;
Audit_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,&lt;br&gt;
Student_ID NUMBER,&lt;br&gt;
Student_Name VARCHAR2(50),&lt;br&gt;
Action VARCHAR2(50),&lt;br&gt;
Action_Time TIMESTAMP&lt;br&gt;
);&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%2Fq8yw9uqqq1i6d5r3h5bi.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%2Fq8yw9uqqq1i6d5r3h5bi.jpg" alt=" " width="800" height="455"&gt;&lt;/a&gt;&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%2F82vhrfq98y0aflpbcjjp.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%2F82vhrfq98y0aflpbcjjp.jpg" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CREATE OR REPLACE TRIGGER trg_after_student_insert&lt;br&gt;
AFTER INSERT ON Students&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
INSERT INTO Student_Audit (Student_ID, Student_Name, Action, Action_Time)&lt;br&gt;
VALUES (:NEW.Student_ID, :NEW.Student_Name, 'INSERT', SYSTIMESTAMP);&lt;br&gt;
END;&lt;br&gt;
/&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%2Folkglldx7f0nwxbj8f2p.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%2Folkglldx7f0nwxbj8f2p.jpg" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (Student_ID, Student_Name, Course) VALUES (1, 'Ravi', 'Computer Science');&lt;br&gt;
INSERT INTO Students (Student_ID, Student_Name, Course) VALUES (2, 'Meena', 'Electrical Engineering');&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%2Ffmip11g0se0urmc4cudy.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%2Ffmip11g0se0urmc4cudy.jpg" alt=" " width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SELECT * FROM Student_Audit&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%2Fzk6m9onjy0nysubxpn5j.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%2Fzk6m9onjy0nysubxpn5j.jpg" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conclusion:-&lt;/p&gt;

&lt;p&gt;Cursors provide the capability to process query results one row at a time based on specific conditions, enabling detailed and controlled data handling.&lt;br&gt;
Triggers, on the other hand, help in automating actions such as maintaining logs or updating related tables, ensuring that certain tasks are carried out automatically without the need for manual execution.&lt;br&gt;
Together, these features play a vital role in advanced database management by improving efficiency, consistency, and reliability.&lt;/p&gt;

&lt;p&gt;Thank &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;  Sir for his valuable guidance and continuous support in successfully completing this DBMS assignment.&lt;/p&gt;

&lt;p&gt;dbms #sql #oracle #plsql #database #cursors #triggers #programming #assignment #learning&lt;/p&gt;

</description>
      <category>programming</category>
      <category>database</category>
      <category>sql</category>
      <category>coding</category>
    </item>
    <item>
      <title>Database Normalization</title>
      <dc:creator>Madhumitha Ganesan</dc:creator>
      <pubDate>Sun, 05 Oct 2025 16:51:44 +0000</pubDate>
      <link>https://forem.com/madhumitha_ganesan_/database-normalization-4h87</link>
      <guid>https://forem.com/madhumitha_ganesan_/database-normalization-4h87</guid>
      <description>&lt;p&gt;Normalization is one of the most important concepts in database design. In this blog, we’ll walk through normalizing a student-course-instructor dataset step by step — from 1NF to 3NF — using SQL CREATE TABLE and INSERT INTO statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identify Anomalies&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Insertion anomaly&lt;/strong&gt;:&lt;br&gt;
Can’t insert a new course unless a student enrolls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update anomaly&lt;/strong&gt;:&lt;br&gt;
If Dr. Kumar’s phone number changes, we must update multiple rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deletion anomaly&lt;/strong&gt;:&lt;br&gt;
If student S02 drops the course, we lose info about the DBMS course entirely.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Convert to 1NF *&lt;/em&gt;(First Normal Form)&lt;br&gt;
Remove repeating groups, ensure atomic values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creation of table&lt;/strong&gt;&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%2Foi5ixa5lgtouzdcihwqi.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%2Foi5ixa5lgtouzdcihwqi.jpg" alt=" " width="720" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insertion of data&lt;/strong&gt;&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%2F10hws120uuabxz4pn2gr.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%2F10hws120uuabxz4pn2gr.jpg" alt=" " width="720" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&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%2Fetqj97tp8qqdiscsszkw.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%2Fetqj97tp8qqdiscsszkw.jpg" alt=" " width="720" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Convert to 2NF&lt;/strong&gt; (Second Normal Form)&lt;/p&gt;

&lt;p&gt;Remove partial dependency (non-key attributes should depend on the whole key).&lt;/p&gt;

&lt;p&gt;Create separate tables for Students, Courses, Instructors, Studentcourses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create table for Students&lt;/strong&gt;&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%2Fdmooqq3r79192yhxmh2y.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%2Fdmooqq3r79192yhxmh2y.jpg" alt=" " width="720" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insert values into the table&lt;/strong&gt;&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%2F9hb9vfx7oy4utm5s3fvs.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%2F9hb9vfx7oy4utm5s3fvs.jpg" alt=" " width="720" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&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%2F3u5k6plw7d3bkxeq4y6h.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%2F3u5k6plw7d3bkxeq4y6h.jpg" alt=" " width="720" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create table for Courses&lt;/strong&gt;&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%2Fyo63lsbjlvr3gyweiavw.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%2Fyo63lsbjlvr3gyweiavw.jpg" alt=" " width="720" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insertion of values&lt;/strong&gt;&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%2Fop7vbwx01f549jytikl7.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%2Fop7vbwx01f549jytikl7.jpg" alt=" " width="720" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&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%2Fthh7mc30bhue9wxatd0c.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%2Fthh7mc30bhue9wxatd0c.jpg" alt=" " width="720" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create table for Instructors&lt;/strong&gt;&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%2Famuyqhbj1t46uzad3dlb.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%2Famuyqhbj1t46uzad3dlb.jpg" alt=" " width="720" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insertion of values&lt;/strong&gt;&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%2F0vo6jmbzyc1b9z3xvzmn.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%2F0vo6jmbzyc1b9z3xvzmn.jpg" alt=" " width="720" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&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%2Fz9sfaqp5ai6nxe1t1whh.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%2Fz9sfaqp5ai6nxe1t1whh.jpg" alt=" " width="720" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create table for Studentcourses&lt;/strong&gt;&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%2Ft2fjnqt8ah88rmdx7l99.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%2Ft2fjnqt8ah88rmdx7l99.jpg" alt=" " width="720" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insertion of values&lt;/strong&gt;&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%2Fk6ohxyvbnnf6tzwbs56x.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%2Fk6ohxyvbnnf6tzwbs56x.jpg" alt=" " width="720" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&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%2Fe5eimw0zzlrd0iavunwb.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%2Fe5eimw0zzlrd0iavunwb.jpg" alt=" " width="720" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Convert to 3NF&lt;/strong&gt; (Third Normal Form)&lt;br&gt;
Remove transitive dependency (non-key attributes shouldn’t depend on other non-keys).&lt;/p&gt;

&lt;p&gt;👉 In our case, the InstructorPhone depends on Instructor, not directly on Course.&lt;br&gt;
So we already separated Instructors, which makes this 3NF compliant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final tables in 3NF:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Students(StudentID, StudentName)&lt;br&gt;
Instructors(Instructor, InstructorPhone)&lt;br&gt;
Courses(CourseID, CourseName, Instructor)&lt;br&gt;
StudentCourses(StudentID, CourseID)&lt;br&gt;
Query Using JOINs&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%2Fftqagif4wsf3xkxtwcju.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%2Fftqagif4wsf3xkxtwcju.jpg" alt=" " width="720" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple Breakdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By breaking down our initial table step by step:&lt;/p&gt;

&lt;p&gt;1NF → Atomic values&lt;br&gt;
2NF → Remove partial dependencies&lt;br&gt;
3NF → Remove transitive dependencies&lt;br&gt;
We achieved a clean, normalized schema that eliminates anomalies and improves consistency.&lt;/p&gt;

&lt;p&gt;Special thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; for mentoring me on database normalization concepts!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL #Oracle #DBMS #DatabaseNormalization #1NF #2NF #3NF #BCNF #4NF #5NF #DataModeling&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>database</category>
      <category>coding</category>
      <category>sql</category>
    </item>
  </channel>
</rss>
