<?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: Jaswant Karun</title>
    <description>The latest articles on Forem by Jaswant Karun (@jaswant_karun_s_a_37).</description>
    <link>https://forem.com/jaswant_karun_s_a_37</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%2F3449926%2F8ee127a7-2f48-4445-a6f7-2a020849420c.png</url>
      <title>Forem: Jaswant Karun</title>
      <link>https://forem.com/jaswant_karun_s_a_37</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jaswant_karun_s_a_37"/>
    <language>en</language>
    <item>
      <title>🔧 AWS IoT Jobs: Automating Secure Device Management at Scale</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 18 Dec 2025 16:29:45 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/aws-iot-jobs-automating-secure-device-management-at-scale-21nl</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/aws-iot-jobs-automating-secure-device-management-at-scale-21nl</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the modern cloud ecosystem, managing thousands—or even millions—of IoT devices manually is impossible. AWS IoT Jobs solves this challenge by enabling secure, scalable, and automated remote operations on IoT devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This article explores AWS IoT Jobs, its features, role in the cloud and DevOps lifecycle, and why it is a critical service in large-scale IoT deployments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📌 Service Overview:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS IoT Jobs is a managed service under AWS IoT Core that allows you to define, schedule, and track remote operations—called jobs—on IoT devices or groups of devices.&lt;/p&gt;

&lt;p&gt;A job can perform tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Firmware updates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Software installations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configuration changes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security patches&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Diagnostics and maintenance tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jobs are executed securely and reliably, even when devices are intermittently connected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⭐ Key Features:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 1. Scalable Device Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Execute jobs on single devices, groups, or entire fleets&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supports millions of devices simultaneously&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔹 2. Secure Execution&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Uses AWS IoT Core authentication and authorization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jobs are delivered using TLS-encrypted MQTT or HTTPS&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔹 3. Job Scheduling &amp;amp; Targeting&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Schedule jobs immediately or at a later time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target devices using Thing Groups&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔹 4. Job Monitoring &amp;amp; Status Tracking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Track job states such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;QUEUED&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IN_PROGRESS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SUCCEEDED&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FAILED&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provides real-time visibility&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔹 5. Retry &amp;amp; Rollback Support&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automatically retries failed jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Helps maintain device stability&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;☁️ AWS Category / Cloud Domain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Category                   Domain&lt;/strong&gt;&lt;br&gt;
AWS IoT Core                    Internet of Things (IoT)&lt;br&gt;
Device Management           Cloud Operations&lt;br&gt;
Security-Aware Automation   DevSecOps&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔄 Where It Fits in Cloud / DevOps Lifecycle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS IoT Jobs plays a vital role in the Operate &amp;amp; Maintain phase of the cloud lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔁 Cloud Lifecycle Mapping&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Plan → Build → Deploy → Operate → Optimize&lt;br&gt;
                     ↑&lt;br&gt;
               AWS IoT Jobs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 DevOps Perspective&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automates post-deployment operations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enables continuous device updates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduces manual intervention&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🛡️ DevSecOps Perspective&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensures security patches are applied consistently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supports compliance and secure updates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enables “shift-left security” for IoT systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💻 Programming Language / Access Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS IoT Jobs can be accessed using multiple methods:&lt;/p&gt;

&lt;p&gt;🔹** Programming Languages**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python (Boto3 SDK)&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;JavaScript (Node.js)&lt;/li&gt;
&lt;li&gt;C / C++ (for device-side execution)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔹** Access Methods**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Management Console&lt;/li&gt;
&lt;li&gt;AWS CLI&lt;/li&gt;
&lt;li&gt;AWS SDKs&lt;/li&gt;
&lt;li&gt;MQTT topics&lt;/li&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example (AWS CLI):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;aws iot create-job \&lt;br&gt;
  --job-id firmware-update-001 \&lt;br&gt;
  --targets arn:aws:iot:region:account-id:thinggroup/ProductionDevices \&lt;br&gt;
  --document file://job.json&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing Model:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS IoT Jobs follows a pay-as-you-go pricing model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💵 Pricing Factors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Number of job executions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Messaging usage via AWS IoT Core&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No upfront cost or minimum fee&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You pay only for what you use&lt;br&gt;
Cost-efficient for large-scale deployments&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌍 Real-World Use Cases:-&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OTA (Over-The-Air) firmware updates&lt;/li&gt;
&lt;li&gt;Remote security patch deployment&lt;/li&gt;
&lt;li&gt;Configuration changes for smart devices&lt;/li&gt;
&lt;li&gt;Device diagnostics and health checks&lt;/li&gt;
&lt;li&gt;Industrial IoT fleet management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✨ Innovative Insight: AWS IoT Jobs as “CI/CD for Devices”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of AWS IoT Jobs as CI/CD for physical devices:&lt;/p&gt;

&lt;p&gt;Code → Application servers&lt;/p&gt;

&lt;p&gt;Jobs → IoT devices&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Just like Jenkins automates software delivery, AWS IoT Jobs automates device lifecycle management.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;AWS IoT Jobs is a powerful and scalable solution for managing IoT devices securely in the cloud. By integrating automation, monitoring, and security, it becomes a critical component in cloud-native IoT architectures and DevSecOps pipelines.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For organizations managing large IoT fleets, AWS IoT Jobs is not optional—it’s essential.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; Sir for Assigning this Assignment&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>iot</category>
      <category>devops</category>
      <category>automation</category>
    </item>
    <item>
      <title>🔧Jenkins: The Heart of Continuous Integration in DevSecOps</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 18 Dec 2025 15:45:11 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/jenkins-the-heart-of-continuous-integration-in-devsecops-4p47</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/jenkins-the-heart-of-continuous-integration-in-devsecops-4p47</guid>
      <description>&lt;ul&gt;
&lt;li&gt;In the DevOps &amp;amp; DevSecOps Periodic Table, Jenkins stands out as one of the most powerful and widely adopted tools for Continuous Integration and Continuous Delivery (CI/CD).&lt;/li&gt;
&lt;li&gt;It automates repetitive development tasks, ensures faster releases, and improves software quality by integrating security early in the pipeline.&lt;/li&gt;
&lt;li&gt;This blog explores Jenkins—its features, role in DevSecOps, and why it continues to be a backbone tool for modern software teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📌 Overview of Jenkins:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins is an open-source automation server used to automate building, testing, and deploying software projects.&lt;br&gt;
It enables developers to continuously integrate code changes from multiple contributors and detect issues early in the development lifecycle.&lt;/p&gt;

&lt;p&gt;Originally developed as Hudson in 2004, Jenkins evolved into a community-driven project and became one of the most essential tools in DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⭐ Key Features of Jenkins:-&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;🚀 1. Continuous Integration &amp;amp; Continuous Delivery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;ol&gt;
&lt;li&gt;Automatically builds and tests code after every commit&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;ol&gt;
&lt;li&gt;Reduces integration errors&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;ol&gt;
&lt;li&gt;Speeds up release cycles&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔌 2. Plugin Ecosystem (1800+ Plugins)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports Git, GitHub, Docker, Kubernetes, AWS, Azure, SonarQube, OWASP, and more&lt;/li&gt;
&lt;li&gt;Highly customizable for any DevOps workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧩 3. Pipeline as Code&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jenkins pipelines are defined using Jenkinsfile&lt;/li&gt;
&lt;li&gt;Enables version-controlled CI/CD pipelines,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pipeline {&lt;br&gt;
    agent any&lt;br&gt;
    stages {&lt;br&gt;
        stage('Build') {&lt;br&gt;
            steps {&lt;br&gt;
                echo 'Building the application'&lt;br&gt;
            }&lt;br&gt;
        }&lt;br&gt;
        stage('Test') {&lt;br&gt;
            steps {&lt;br&gt;
                echo 'Running tests'&lt;br&gt;
            }&lt;br&gt;
        }&lt;br&gt;
        stage('Deploy') {&lt;br&gt;
            steps {&lt;br&gt;
                echo 'Deploying application'&lt;br&gt;
            }&lt;br&gt;
        }&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 4. DevSecOps Integration:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Integrates security tools like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SonarQube&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OWASP Dependency Check&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trivy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Snyk&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enables shift-left security&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚙️ 5. Distributed Builds&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Supports master-agent architecture&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scales easily across multiple machines&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How Jenkins Fits into DevOps &amp;amp; DevSecOps&lt;br&gt;
Jenkins in DevOps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jenkins acts as the automation backbone:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pulls code from Git&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Builds applications&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Runs automated tests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploys to servers or cloud platforms&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🛡️ Jenkins in DevSecOps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins integrates security checks directly into pipelines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Static code analysis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vulnerability scanning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compliance checks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security testing before deployment&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;➡️ This ensures security is not an afterthought, but part of the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 Programming Languages Used in Jenkins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Java&lt;/strong&gt; – Core Jenkins engine&lt;br&gt;
**&lt;br&gt;
Groovy** – Jenkins Pipeline scripts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shell / Bash&lt;/strong&gt; – Automation scripts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt; – Testing and security tools integration&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏢 Parent Company of Jenkins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original Creator:&lt;/strong&gt; Kohsuke Kawaguchi&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintained by:&lt;/strong&gt; Jenkins Community&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Previously supported by:&lt;/strong&gt; Sun Microsystems &amp;amp; Oracle&lt;/p&gt;

&lt;p&gt;👉 Jenkins is community-driven, not owned by a single company.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Feature                   Jenkins&lt;/strong&gt;&lt;br&gt;
Open Source                  Yes&lt;br&gt;
License                          MIT License&lt;br&gt;
Cost                             Free&lt;br&gt;
Enterprise Support           Available via CloudBees&lt;br&gt;
**&lt;br&gt;
🧪 Jenkins in the DevSecOps Periodic Table:-**&lt;/p&gt;

&lt;p&gt;In the DevSecOps Periodic Table, Jenkins belongs to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; CI/CD &amp;amp; Automation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Role:&lt;/strong&gt; Orchestrator&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Faster, safer, and reliable software delivery&lt;/p&gt;

&lt;p&gt;It acts as the central atom connecting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Source control&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security scanners&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deployment platforms&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🌍 Real-World Use Cases:-&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automating cloud deployments (AWS, Azure, GCP)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microservices CI/CD pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security scanning before production&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Containerized deployments with Docker &amp;amp; Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🚀 Why Jenkins is Still Relevant in 2025&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Despite the rise of GitHub Actions, GitLab CI, and Azure DevOps, Jenkins remains relevant because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Extreme flexibility&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Huge plugin ecosystem&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Strong community support&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud &amp;amp; container readiness&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✨ Innovative Insight:&lt;/strong&gt; Jenkins as the “Control Tower” of DevSecOps&lt;/p&gt;

&lt;p&gt;Think of Jenkins as a control tower:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Every code change reports here&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every test, scan, and deployment is monitored&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every failure is instantly visible&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In DevSecOps, Jenkins ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“No insecure code reaches production unnoticed.”&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Jenkins is more than a CI tool—it is a DevOps and DevSecOps enabler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Its flexibility, open-source nature, and massive ecosystem make it a must-know tool for engineers entering the DevOps world.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you want automation, speed, security, and reliability, Jenkins is still a champion.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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>devops</category>
      <category>jenkins</category>
      <category>devsecops</category>
      <category>cicd</category>
    </item>
    <item>
      <title>DBMS – Transactions, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 02 Oct 2025 11:52:38 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/dbms-transactions-deadlocks-log-based-recovery-2kdd</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/dbms-transactions-deadlocks-log-based-recovery-2kdd</guid>
      <description>&lt;p&gt;We will explore Transactions, Deadlocks, and Log-Based Recovery using SQL.&lt;br&gt;
We use the Accounts table as our base schema and demonstrate ACID concepts with rollback, simulate a deadlock, and discuss log-based recovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create Table &amp;amp; Insert Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE CustomerAccounts (&lt;br&gt;
    acc_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR2(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%2Fj01i3aoj34qldlszz3vm.png" 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%2Fj01i3aoj34qldlszz3vm.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO CustomerAccounts VALUES (1, 'Alice', 1000);&lt;br&gt;
INSERT INTO CustomerAccounts VALUES (2, 'Bob', 1500);&lt;br&gt;
INSERT INTO CustomerAccounts VALUES (3, 'Charlie', 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%2F7zt46c4rbk3ywpchyb2d.png" 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%2F7zt46c4rbk3ywpchyb2d.png" alt=" " width="800" height="386"&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%2Fn3e075saw8dtwsagwu1m.png" 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%2Fn3e075saw8dtwsagwu1m.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transaction – Atomicity &amp;amp; Rollback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task:&lt;/strong&gt; Transfer 500 from Alice to Bob, but rollback before committing.&lt;/p&gt;

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

&lt;p&gt;UPDATE CustomerAccounts&lt;br&gt;
SET balance = balance - 500&lt;br&gt;
WHERE name = 'Alice';&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%2F17a7b513vj8vkwj4d81p.png" 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%2F17a7b513vj8vkwj4d81p.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-- Add 500 to Bob&lt;br&gt;
UPDATE CustomerAccounts&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%2Fbcd2w8f5n9i1kzpclvcm.png" 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%2Fbcd2w8f5n9i1kzpclvcm.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rollback transaction&lt;/strong&gt;&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%2Fgil75s66vil46xekkpr2.png" 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%2Fgil75s66vil46xekkpr2.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check balances&lt;/strong&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%2Fgpkpuvqix4zslz9vk366.png" 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%2Fgpkpuvqix4zslz9vk366.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deadlock Simulation (Conceptual)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session 1 (conceptual)&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Session 2 (conceptual)&lt;/strong&gt;&lt;br&gt;
-- Lock Bob&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance - 200 WHERE name = 'Bob';&lt;br&gt;
-- Do NOT commit&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Expected in a real multi-session DB:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ORA-00060: deadlock detected while waiting for resource&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%2Fq4lbbjag0y5jorh9ij71.png" 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%2Fq4lbbjag0y5jorh9ij71.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Task: Show rollback and explain internal logs (undo/redo).&lt;/p&gt;

&lt;p&gt;-- Update Charlie&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 300 WHERE name = 'Charlie';&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%2Ftwrlgz5463gsxtwn6g75.png" 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%2Ftwrlgz5463gsxtwn6g75.png" alt=" " width="800" height="386"&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%2Fvxjcr4lvlsgfmn9ra69e.png" 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%2Fvxjcr4lvlsgfmn9ra69e.png" alt=" " width="800" height="377"&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%2F59p8sk94ix35149ojfmy.png" 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%2F59p8sk94ix35149ojfmy.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Atomicity:&lt;/strong&gt; Rollback prevents partial updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deadlock:&lt;/strong&gt; Occurs when two sessions wait for each other (conceptual in LiveSQL).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log-Based Recovery:&lt;/strong&gt; Oracle maintains undo/redo logs for safe recovery.&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;

&lt;h1&gt;
  
  
  dbms #oracle #sql #transactions #deadlock #recovery #assignment
&lt;/h1&gt;

</description>
      <category>coding</category>
      <category>sql</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in DBMS</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 02 Oct 2025 11:07:13 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/indexing-hashing-query-optimization-in-dbms-3p07</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/indexing-hashing-query-optimization-in-dbms-3p07</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;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexing:&lt;/strong&gt; 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;&lt;strong&gt;Hash Index:&lt;/strong&gt; 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;&lt;strong&gt;B+ Tree Index:&lt;/strong&gt; 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;&lt;strong&gt;B-Tree Index:&lt;/strong&gt; A balanced tree-based index commonly used for equality and range queries.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Creating the Students Table&lt;/strong&gt;&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%2Fnghf61ncd4lbyzf2bxsz.png" 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%2Fnghf61ncd4lbyzf2bxsz.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inserting Sample Records&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO Students VALUES (101, 'Arjun', 'CSBS', 8.5);&lt;br&gt;
INSERT INTO Students VALUES (102, 'Priya', 'CSBS', 7.8);&lt;br&gt;
INSERT INTO Students VALUES (103, 'Kiran', 'ECE', 9.0);&lt;br&gt;
INSERT INTO Students VALUES (104, 'Anita', 'ME', 8.2);&lt;br&gt;
INSERT INTO Students VALUES (105, 'Vikram', 'CSBS', 8.8);&lt;br&gt;
INSERT INTO Students VALUES (106, 'Ravi', 'ECE', 7.5);&lt;br&gt;
INSERT INTO Students VALUES (107, 'Sneha', 'ME', 8.7);&lt;br&gt;
INSERT INTO Students VALUES (108, 'Nikhil', 'CSBS', 6.9);&lt;br&gt;
INSERT INTO Students VALUES (109, 'Maya', 'ECE', 8.0);&lt;br&gt;
INSERT INTO Students VALUES (110, 'Aditya', 'CSBS', 9.2);&lt;br&gt;
INSERT INTO Students VALUES (111, 'Tanya', 'ME', 7.9);&lt;br&gt;
INSERT INTO Students VALUES (112, 'Rohan', 'CSBS', 8.3);&lt;br&gt;
INSERT INTO Students VALUES (113, 'Divya', 'ECE', 9.1);&lt;br&gt;
INSERT INTO Students VALUES (114, 'Karthik', 'ME', 7.7);&lt;br&gt;
INSERT INTO Students VALUES (115, 'Isha', 'CSBS', 8.6);&lt;br&gt;
INSERT INTO Students VALUES (116, 'Suresh', 'ECE', 8.4);&lt;br&gt;
INSERT INTO Students VALUES (117, 'Meena', 'ME', 8.0);&lt;br&gt;
INSERT INTO Students VALUES (118, 'Aravind', 'CSBS', 7.6);&lt;br&gt;
INSERT INTO Students VALUES (119, 'Pooja', 'ECE', 8.9);&lt;br&gt;
INSERT INTO Students VALUES (120, 'Rahul', '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%2Fpqn15bjneohl38xw0upc.png" 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%2Fpqn15bjneohl38xw0upc.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a B-Tree Index on roll_no&lt;/strong&gt;&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%2Fz67thukiaudpbdbsoalj.png" 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%2Fz67thukiaudpbdbsoalj.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query:&lt;/strong&gt; 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%2Fggq3i4wqv7dmp795olm2.png" 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%2Fggq3i4wqv7dmp795olm2.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a B+ Tree Index on cgpa&lt;/strong&gt;&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%2Fi80mv90vjm9plf6vn0m2.png" 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%2Fi80mv90vjm9plf6vn0m2.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query:&lt;/strong&gt; Display all students with cgpa &amp;gt; 8.0&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students 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%2F7132ho0mg3el8abnqjdd.png" 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%2F7132ho0mg3el8abnqjdd.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating an Index on dept for Fast Equality Search&lt;/strong&gt;&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%2Fy36yh4l9u2yaknp9qos8.png" 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%2Fy36yh4l9u2yaknp9qos8.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query:&lt;/strong&gt; 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%2Fcvptogklyqt7b0ps82ds.png" 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%2Fcvptogklyqt7b0ps82ds.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Conclusion:-&lt;/strong&gt;&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;h1&gt;
  
  
  SQL #Oracle #Indexing #BTree #BPlusTree #QueryOptimization #DBMS #Database
&lt;/h1&gt;

</description>
      <category>programming</category>
      <category>learning</category>
      <category>database</category>
      <category>coding</category>
    </item>
    <item>
      <title>Cursor and Trigger in DBMS</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 02 Oct 2025 09:50:08 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/cursor-and-trigger-in-dbms-5fd5</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/cursor-and-trigger-in-dbms-5fd5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Definition of Cursor in DBMS:-&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&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;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cursor Example&lt;/strong&gt; – Retrieving and Displaying Employee Records Where the Salary is Greater Than ₹50,000&lt;/p&gt;

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

&lt;p&gt;CREATE TABLE Employee (&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%2Fh2jx8yhe73wx7v6cpnxn.png" 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%2Fh2jx8yhe73wx7v6cpnxn.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Insert Sample Data&lt;/p&gt;

&lt;p&gt;INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (1, 'Ramesh', 60000);&lt;br&gt;
INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (2, 'Suresh', 45000);&lt;br&gt;
INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (3, 'Anita', 75000);&lt;br&gt;
INSERT INTO Employee (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%2Fb3bsmdpj1w10qzqgd3uj.png" 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%2Fb3bsmdpj1w10qzqgd3uj.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Create and Process Cursor&lt;/p&gt;

&lt;p&gt;DECLARE&lt;br&gt;
    CURSOR emp_cursor IS&lt;br&gt;
        SELECT Emp_Name, Salary FROM Employee WHERE Salary &amp;gt; 50000;&lt;br&gt;
    v_EmpName Employee.Emp_Name%TYPE;&lt;br&gt;
    v_Salary Employee.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('Employee: ' || 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%2Fea9aznn9krcmcug1c325.png" 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%2Fea9aznn9krcmcug1c325.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cursor emp_cursor selects employees earning more than 50,000.&lt;/p&gt;

&lt;p&gt;DBMS_OUTPUT.PUT_LINE prints each employee’s name and salary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definition of Trigger in DBMS:-&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A trigger in a Database Management System (DBMS) is a special type of stored procedure that is automatically invoked or executed by the system whenever a specific event, such as an insertion, update, or deletion, occurs on a particular table or view. Triggers are mainly used to maintain data integrity, enforce business rules, and keep audit logs without requiring explicit calls from the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trigger Example&lt;/strong&gt; – Executing an AFTER INSERT Operation on the Students Table&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Create Students Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&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;/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%2Fgh1cgmgf6delvx5z0faq.png" 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%2Fgh1cgmgf6delvx5z0faq.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Create Student_Audit Table&lt;/p&gt;

&lt;p&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%2Fyo3dyy0gp9ywctii0465.png" 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%2Fyo3dyy0gp9ywctii0465.png" alt=" " width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Create AFTER INSERT Trigger&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%2Fh352hyoirmj3engsamo5.png" 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%2Fh352hyoirmj3engsamo5.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trigger automatically logs new students into Student_Audit.&lt;br&gt;
NEW references the inserted row, and SYSTIMESTAMP captures insertion time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Test Trigger&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%2Fpev31ftr6rw7we1z14y8.png" 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%2Fpev31ftr6rw7we1z14y8.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Verify Audit Table&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%2Fucjg7nqfv1siusc716hf.png" 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%2Fucjg7nqfv1siusc716hf.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&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;/li&gt;
&lt;li&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;/li&gt;
&lt;li&gt;Together, these features play a vital role in advanced database management by improving efficiency, consistency, and reliability.&lt;/li&gt;
&lt;/ul&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;h1&gt;
  
  
  dbms #sql #oracle #plsql #database #cursors #triggers #programming #assignment #learning
&lt;/h1&gt;

</description>
      <category>learning</category>
      <category>database</category>
      <category>coding</category>
      <category>sql</category>
    </item>
    <item>
      <title>Database Normalization</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 02 Oct 2025 08:00:01 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/database-normalization-1p3h</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/database-normalization-1p3h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database Normalization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database Normalization is the process of organizing data in a relational database to reduce data redundancy (repeated data) and improve data integrity (accuracy and consistency).&lt;/li&gt;
&lt;li&gt;It involves dividing a large, unstructured table into smaller, well-structured tables and establishing relationships between them using keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Base Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The initial unnormalized table includes details of students, their courses, instructors, and corresponding grades.&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%2F024rmi499ae1lp43611a.png" 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%2F024rmi499ae1lp43611a.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Identifying Anomalies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insertion anomaly:&lt;/strong&gt; A new course cannot be added unless it is linked to a student.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update anomaly:&lt;/strong&gt; Modifying a course name requires updating it in several rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deletion anomaly:&lt;/strong&gt; Removing a student may also remove valuable course details if that student was the only enrollee. &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%2Frnsd1c5if9gcur8jdan5.png" 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%2Frnsd1c5if9gcur8jdan5.png" alt=" " width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Converting to 1NF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;First Normal Form (1NF) rules:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every column should hold atomic (indivisible) values.&lt;/p&gt;

&lt;p&gt;Each record must be unique.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Steps applied:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Divided multivalued attributes into individual rows.&lt;/p&gt;

&lt;p&gt;Ensured that each column stores only one value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Table in 1 NF,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students_1NF (&lt;br&gt;
    Student_ID INT,&lt;br&gt;
    Student_Name VARCHAR2(100),&lt;br&gt;
    Course_ID INT,&lt;br&gt;
    Course_Name VARCHAR2(100),&lt;br&gt;
    Instructor VARCHAR2(100),&lt;br&gt;
    Grade CHAR(2),&lt;br&gt;
    PRIMARY KEY (Student_ID, Course_ID)&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%2F706yggqp6dor7zkqfwqp.png" 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%2F706yggqp6dor7zkqfwqp.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Conversion to 2NF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2NF Rule:&lt;/strong&gt; Remove partial dependency, ensuring that non-key attributes rely on the entire composite primary key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Student_Name depends only on Student_ID.&lt;/p&gt;

&lt;p&gt;Course_Name, Instructor, Instructor_Phone depend only on Course_ID.&lt;/p&gt;

&lt;p&gt;Grade (if existed) would depend on both Student_ID + Course_ID.&lt;/p&gt;

&lt;p&gt;Solution: Split into three tables:&lt;/p&gt;

&lt;p&gt;Students → Student_ID, Student_Name&lt;/p&gt;

&lt;p&gt;Courses → Course_ID, Course_Name, Instructor, Instructor_Phone&lt;/p&gt;

&lt;p&gt;Enrollments → Student_ID, Course_ID&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
    StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    StudentName VARCHAR2(100)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses (&lt;br&gt;
    CourseID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    CourseName VARCHAR2(100),&lt;br&gt;
    Instructor VARCHAR2(100),&lt;br&gt;
    InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollments (&lt;br&gt;
    StudentID VARCHAR2(10),&lt;br&gt;
    CourseID VARCHAR2(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Student(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Course(CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Create Tables (2NF):&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%2Fo5skxont4ipaxxi95qry.png" 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%2Fo5skxont4ipaxxi95qry.png" alt=" " width="800" height="376"&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%2F52waa489rw2u8saemtrb.png" 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%2F52waa489rw2u8saemtrb.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Conversion to 3NF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3NF Rule:&lt;/strong&gt; Remove transitive dependencies (non-prime attributes must depend only on primary key).&lt;/p&gt;

&lt;p&gt;Instructor’s phone depends on Instructor, not Course_ID → we can split Courses into:&lt;/p&gt;

&lt;p&gt;Courses → Course_ID, Course_Name, Instructor_ID&lt;/p&gt;

&lt;p&gt;Instructors → Instructor_ID, Instructor_Name, Instructor_Phone&lt;/p&gt;

&lt;p&gt;CREATE TABLE Instructors (&lt;br&gt;
    InstructorID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    InstructorName VARCHAR2(100),&lt;br&gt;
    InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses3NF (&lt;br&gt;
    CourseID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    CourseName VARCHAR2(100),&lt;br&gt;
    InstructorID VARCHAR2(10),&lt;br&gt;
    FOREIGN KEY (InstructorID) REFERENCES Instructor(InstructorID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students3NF (&lt;br&gt;
    StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    StudentName VARCHAR2(100)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollments3NF (&lt;br&gt;
    StudentID VARCHAR2(10),&lt;br&gt;
    CourseID VARCHAR2(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Student3NF(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Course3NF(CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Create Tables (3NF):&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%2Fr7vp88ztsxqtghsq0rdb.png" 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%2Fr7vp88ztsxqtghsq0rdb.png" alt=" " width="800" height="387"&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%2Fd3w56lqyl568jrc6t6hf.png" 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%2Fd3w56lqyl568jrc6t6hf.png" alt=" " width="800" height="380"&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%2Flsh1228kb7qddn8tsss7.png" 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%2Flsh1228kb7qddn8tsss7.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Insert Sample Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-- Instructors&lt;br&gt;
INSERT INTO Instructor VALUES ('I01', 'Dr. Kumar', '9876543210');&lt;br&gt;
INSERT INTO Instructor VALUES ('I02', 'Dr. Mehta', '9123456780');&lt;br&gt;
INSERT INTO Instructor VALUES ('I03', 'Dr. Rao', '9988776655');&lt;/p&gt;

&lt;p&gt;-- Courses&lt;br&gt;
INSERT INTO Course3NF VALUES ('C101', 'DBMS', 'I01');&lt;br&gt;
INSERT INTO Course3NF VALUES ('C102', 'Data Mining', 'I02');&lt;br&gt;
INSERT INTO Course3NF VALUES ('C103', 'AI', 'I03');&lt;/p&gt;

&lt;p&gt;-- Students&lt;br&gt;
INSERT INTO Student3NF VALUES ('S01', 'Arjun');&lt;br&gt;
INSERT INTO Student3NF VALUES ('S02', 'Priya');&lt;br&gt;
INSERT INTO Student3NF VALUES ('S03', 'Kiran');&lt;/p&gt;

&lt;p&gt;-- Enrollment&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S01', 'C101');&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S01', 'C102');&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S02', 'C101');&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S03', 'C103');&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%2F7brkq6fm48l7f1j7w2jd.png" 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%2F7brkq6fm48l7f1j7w2jd.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Query with JOINs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Enrollment3NF e&lt;br&gt;
JOIN Student3NF s ON e.StudentID = s.StudentID&lt;br&gt;
JOIN Course3NF c ON e.CourseID = c.CourseID&lt;br&gt;
JOIN Instructor i ON c.InstructorID = i.InstructorID;&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%2Fhro63l8gjvzgxh2ke6rg.png" 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%2Fhro63l8gjvzgxh2ke6rg.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Normalization helps achieve:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reduced data redundancy&lt;/p&gt;

&lt;p&gt;Improved data integrity&lt;/p&gt;

&lt;p&gt;Simplified maintenance and updates&lt;/p&gt;

&lt;p&gt;Following the progression from 1NF → 2NF → 3NF in Oracle SQL enables the creation of scalable and efficient database designs.&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;h1&gt;
  
  
  SQL #Oracle #DBMS #DatabaseNormalization #1NF #2NF #3NF #BCNF #4NF #5NF #DataModeling
&lt;/h1&gt;

</description>
      <category>programming</category>
      <category>learning</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>ACID Properties with SQL Transactions in DBMS</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 02 Oct 2025 06:28:49 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/acid-properties-with-sql-transactions-in-dbms-40a6</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/acid-properties-with-sql-transactions-in-dbms-40a6</guid>
      <description>&lt;p&gt;&lt;strong&gt;Demonstrating ACID Properties with SQL Transactions:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Database in MySql&lt;/strong&gt;&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%2F1e20b6xbuhu0lng7e0aj.png" 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%2F1e20b6xbuhu0lng7e0aj.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a table Accounts(acc_no INT PRIMARY KEY, name VARCHAR(50), balance INT).&lt;/strong&gt;&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%2Fx4yiorhvr4xqchxcedua.png" 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%2Fx4yiorhvr4xqchxcedua.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insert 3 sample rows.&lt;/strong&gt;&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;&lt;strong&gt;Run it.&lt;/strong&gt;&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%2Fe5nfohw304v7nsbi84zo.png" 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%2Fe5nfohw304v7nsbi84zo.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check the table:&lt;/strong&gt;&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%2Fp6ie9mmxc2vh0zj99m7w.png" 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%2Fp6ie9mmxc2vh0zj99m7w.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&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;&lt;strong&gt;Atomicity (Rollback vs Commit)&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;ROLLBACK:&lt;/strong&gt;&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;&lt;strong&gt;Output:&lt;/strong&gt; &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%2Fst6vcmaky0qgkbw9xjao.png" 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%2Fst6vcmaky0qgkbw9xjao.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COMMIT:&lt;/strong&gt;&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;&lt;strong&gt;Output:&lt;/strong&gt; 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%2Fpxk3l28jqu8tiaynxunf.png" 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%2Fpxk3l28jqu8tiaynxunf.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; 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%2Fa3k479f34ilmwbxrt3x8.png" 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%2Fa3k479f34ilmwbxrt3x8.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Isolation (needs 2 query tabs)&lt;/strong&gt;&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;&lt;strong&gt;In Tab A,&lt;/strong&gt;&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%2Fhl102sfsqga0xt9hhtj9.png" 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%2Fhl102sfsqga0xt9hhtj9.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Tab B,&lt;/strong&gt;&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%2Fbs197d6pqvxx97wzqae4.png" 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%2Fbs197d6pqvxx97wzqae4.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now, back in Tab A:&lt;/strong&gt;&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%2Foey6iegp3wb1b4iok9z5.png" 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%2Foey6iegp3wb1b4iok9z5.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Durability&lt;/strong&gt;&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%2F0xb0ymulks36t4knyogr.png" 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%2F0xb0ymulks36t4knyogr.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt;&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;/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%2Fioq5kudtumhvwim2s5ha.png" 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%2Fioq5kudtumhvwim2s5ha.png" alt=" " width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now restart MySQL server&lt;/strong&gt; &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%2Fhugipycup3nxp4lpewgf.png" 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%2Fhugipycup3nxp4lpewgf.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Durability:&lt;/strong&gt; 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;

&lt;h1&gt;
  
  
  dbms #MySql #oracle #transactions #acid #database #learning
&lt;/h1&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>web</category>
      <category>learning</category>
    </item>
    <item>
      <title>Simple College Student Schema</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Tue, 30 Sep 2025 17:49:56 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/simple-college-student-schema-3861</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/simple-college-student-schema-3861</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MongoDB is one of the most popular NoSQL databases used by developers today for building modern, scalable applications. Unlike traditional relational databases, MongoDB stores data in flexible JSON-like documents, making it easier to work with real-world scenarios.&lt;/p&gt;

&lt;p&gt;In this blog, I’ll walk you through CRUD operations (Create, Read, Update, Delete) in MongoDB using a simple example: a college student database. We’ll insert student details, query them, update academic information, and even delete records.&lt;/p&gt;

&lt;p&gt;To make it more exciting, we’ll run these queries directly on MongoDB Atlas Cluster (cloud-based MongoDB). Along the way, I’ll include screenshots of my MongoDB Atlas dashboard and outputs so you can follow along visually&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How to insert multiple documents into a collection&lt;/p&gt;

&lt;p&gt;How to read and filter records using queries&lt;/p&gt;

&lt;p&gt;How to update documents (single &amp;amp; multiple)&lt;/p&gt;

&lt;p&gt;How to delete documents based on conditions&lt;/p&gt;

&lt;p&gt;How CRUD fits into real-world development&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup: Creating a Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a free MongoDB Atlas account&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%2Fy4dx9xy7bucs0g6h2p59.png" 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%2Fy4dx9xy7bucs0g6h2p59.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a cluster and a database called collegeDB&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%2Fmlf1316vfk3f6i4mkin7.png" 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%2Fmlf1316vfk3f6i4mkin7.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside it, create a collection called students&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%2Fch27mt4ksnuui94xvcpf.png" 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%2Fch27mt4ksnuui94xvcpf.png" alt=" " width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create (Insert):-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Insert at least 5 student records into the students collection.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We cannot start by inserting 5 student records into our students collection together. We can create each student as separate document.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    student_id: "S001",&lt;br&gt;
    name: "Jaswant",&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;{&lt;br&gt;
    student_id: "S002",&lt;br&gt;
    name: "Santhosh",&lt;br&gt;
    age: 21,&lt;br&gt;
    department: "CSE",&lt;br&gt;
    year: 3,&lt;br&gt;
    cgpa: 8.5&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%2Fg45el8y94fzw7pe363al.png" 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%2Fg45el8y94fzw7pe363al.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    student_id: "S003",&lt;br&gt;
    name: "Gangeswara",&lt;br&gt;
    age: 22,&lt;br&gt;
    department: "ECE",&lt;br&gt;
    year: 4,&lt;br&gt;
    cgpa: 7.2&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    student_id: "S004",&lt;br&gt;
    name: "Rakshanth",&lt;br&gt;
    age: 19,&lt;br&gt;
    department: "CSBS",&lt;br&gt;
    year: 1,&lt;br&gt;
    cgpa: 9.3&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%2F96qhmfuw0wcfhjr884gn.png" 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%2F96qhmfuw0wcfhjr884gn.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    student_id: "S005",&lt;br&gt;
    name: "Naveens",&lt;br&gt;
    age: 20,&lt;br&gt;
    department: "Mechanical",&lt;br&gt;
    year: 2,&lt;br&gt;
    cgpa: 6.8&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%2Fnha9hdferuu3cdc5sor3.png" 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%2Fnha9hdferuu3cdc5sor3.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read (Query):-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Display all student records.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Fetch all students: {}&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%2Fqb3xx5nv97ph5xyps4iy.png" 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%2Fqb3xx5nv97ph5xyps4iy.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Find all students with CGPA &amp;gt; 8.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;db.students.find({ cgpa: { $gt: 8 } })&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%2Fn2z0436c538101iu0tg0.png" 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%2Fn2z0436c538101iu0tg0.png" alt=" " width="800" height="404"&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%2Fu9oh1351im86q6jopmxs.png" 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%2Fu9oh1351im86q6jopmxs.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Find students belonging to the Computer Science department.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;db.students.find({ department: "CSE" })&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%2Fpam64jpe34ot1yfd2jxx.png" 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%2Fpam64jpe34ot1yfd2jxx.png" alt=" " width="800" height="405"&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%2F9evns6qjp8n67ya51jap.png" 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%2F9evns6qjp8n67ya51jap.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update the CGPA of a specific student.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{ "student_id": "S005" }&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%2Ft0am9i9mpyp4foctuz1o.png" 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%2Ft0am9i9mpyp4foctuz1o.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Increase the year of study for all 3rd year students by 1.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{ "year": 3 }&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%2Fvdyhrsqsf5dlviquitc5.png" 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%2Fvdyhrsqsf5dlviquitc5.png" alt=" " width="800" height="403"&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%2Fopsnrdh4q4j2z0jwl9ya.png" 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%2Fopsnrdh4q4j2z0jwl9ya.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delete:-&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Delete one student record by student_id.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{ "student_id": "S004" }&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%2Foif5pv8p5hmwtpnh9jvm.png" 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%2Foif5pv8p5hmwtpnh9jvm.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&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%2Fduq1q9heugylpkgbpa9f.png" 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%2Fduq1q9heugylpkgbpa9f.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Delete all students having CGPA &amp;lt; 7.5&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{ "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%2Fmuqhar6147zkzwjc6ywe.png" 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%2Fmuqhar6147zkzwjc6ywe.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&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%2F8yjx5exjn04um42f4tzd.png" 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%2F8yjx5exjn04um42f4tzd.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this blog, we explored how to perform CRUD operations in MongoDB using a real-world example of a student database. Starting from inserting records, querying based on conditions, updating multiple documents, and finally deleting specific records – we’ve covered the foundation of working with MongoDB.&lt;/p&gt;

&lt;p&gt;CRUD operations form the building blocks of every application, whether you’re managing users in a website, products in an e-commerce app, or students in a college system.&lt;/p&gt;

&lt;p&gt;This step-by-step approach gave me a solid understanding of how a database schema works in real-world academic systems&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 and motivating us.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System</title>
      <dc:creator>Jaswant Karun</dc:creator>
      <pubDate>Thu, 21 Aug 2025 12:03:20 +0000</pubDate>
      <link>https://forem.com/jaswant_karun_s_a_37/college-student-course-management-system-2677</link>
      <guid>https://forem.com/jaswant_karun_s_a_37/college-student-course-management-system-2677</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this post, I am sharing a Database Management System (DBMS) small project using SQL (Oracle).&lt;br&gt;
Managing students, courses, and enrollments is a common use case in universities and colleges.&lt;br&gt;
To implement this, we can design a simple database system using SQL.&lt;br&gt;
This post walks through DDL, DML, Joins, Views, Procedures, and Functions step by step with examples.&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%2Fj0lzcwyq7luwex1xlay1.png" 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%2Fj0lzcwyq7luwex1xlay1.png" alt=" " width="800" height="448"&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%2Fj5c47uz4g48m3zbosmvg.png" 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%2Fj5c47uz4g48m3zbosmvg.png" alt=" " width="800" height="449"&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%2F35asoj59bfkxn2zbhx7b.png" 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%2F35asoj59bfkxn2zbhx7b.png" alt=" " width="800" height="450"&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%2Fontrgpy22h60qbwf6pyi.png" 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%2Fontrgpy22h60qbwf6pyi.png" alt=" " width="800" height="430"&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%2Fi3yi29p5uf6tlbuoi93d.png" 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%2Fi3yi29p5uf6tlbuoi93d.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Database Schema&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Students table → stores student details&lt;/p&gt;

&lt;p&gt;Faculty table → stores faculty details&lt;/p&gt;

&lt;p&gt;Courses table → stores courses offered&lt;/p&gt;

&lt;p&gt;Enrollments table → connects students and courses&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;StudentID&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;StudentID → NUMBER, Primary Key&lt;/p&gt;

&lt;p&gt;Name → VARCHAR2(50), NOT NULL&lt;/p&gt;

&lt;p&gt;Dept → VARCHAR2(30)&lt;/p&gt;

&lt;p&gt;DOB → DATE&lt;/p&gt;

&lt;p&gt;Email → VARCHAR2(50), UNIQUE&lt;/p&gt;

&lt;p&gt;PhoneNo → CHAR(10), must be 10 digits&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Courses Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CourseID → NUMBER, Primary Key&lt;/p&gt;

&lt;p&gt;CourseName → VARCHAR2(50), NOT NULL&lt;/p&gt;

&lt;p&gt;Credits → NUMBER(2), must be between 1 and 5&lt;/p&gt;

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

&lt;p&gt;EnrollID → NUMBER, Primary Key&lt;/p&gt;

&lt;p&gt;StudentID → NUMBER, Foreign Key → Students(StudentID)&lt;/p&gt;

&lt;p&gt;CourseID → NUMBER, Foreign Key → Courses(CourseID)&lt;/p&gt;

&lt;p&gt;Grade → CHAR(2)&lt;/p&gt;

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

&lt;p&gt;FacultyID → NUMBER, Primary Key&lt;/p&gt;

&lt;p&gt;FacultyName → VARCHAR2(50), NOT NULL&lt;/p&gt;

&lt;p&gt;Dept → VARCHAR2(30)&lt;/p&gt;

&lt;p&gt;Email → VARCHAR2(50), UNIQUE&lt;/p&gt;

&lt;p&gt;Relationships&lt;/p&gt;

&lt;p&gt;One Student can have many Enrollments&lt;/p&gt;

&lt;p&gt;One Course can have many Enrollments&lt;/p&gt;

&lt;p&gt;Enrollments table = Junction table (Many-to-Many between Students and Courses)&lt;/p&gt;

&lt;p&gt;Faculty can later be linked to Courses&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Relationships&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;One&lt;/strong&gt; Student → &lt;strong&gt;Many&lt;/strong&gt; Enrollments&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One&lt;/strong&gt; Course → &lt;strong&gt;Many&lt;/strong&gt; Enrollments&lt;/p&gt;

&lt;p&gt;Enrollments acts as a junction table (&lt;strong&gt;Many-to-Many&lt;/strong&gt;) between Students and Courses.&lt;/p&gt;

&lt;p&gt;Faculty can be linked later to Courses (&lt;strong&gt;One-to-Many&lt;/strong&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Create Tables (DDL)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&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;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;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;ul&gt;
&lt;li&gt;&lt;strong&gt;Insert Sample Data (DML)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (1, 'Arun Kumar', 'CSE', DATE '2003-05-14', '&lt;a href="mailto:arun.kumar@example.com"&gt;arun.kumar@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (101, 'Database Systems', 4);&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alter &amp;amp; Constraints&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Functions &amp;amp; Aggregates&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SELECT UPPER(Name), LENGTH(Email) FROM Students;&lt;br&gt;
SELECT AVG(Credits) FROM Courses;&lt;br&gt;
SELECT COUNT(DISTINCT StudentID) FROM Enrollments;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Joins &amp;amp; Views&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SELECT s.Name, 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 e.CourseID = c.CourseID;&lt;/p&gt;

&lt;p&gt;CREATE VIEW StudentCoursesView AS&lt;br&gt;
SELECT s.Name, 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 e.CourseID = c.CourseID;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stored Procedure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&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&lt;br&gt;
      AND CourseID  = p_CourseID;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COMMIT;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;END;&lt;br&gt;
/&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This simple College Student &amp;amp; Course Management System demonstrates how SQL can be used to handle real-world scenarios like student registrations, course management, enrollments, grading, and reporting. &lt;br&gt;
By using DDL, DML, Constraints, Aggregates, Joins, Views, and Stored Procedures, we built a robust and structured system.&lt;br&gt;
This step-by-step approach gave me a solid understanding of how a database schema works in real-world academic systems&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 and motivating us.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
