<?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: Jai Surya</title>
    <description>The latest articles on Forem by Jai Surya (@jai_surya_m).</description>
    <link>https://forem.com/jai_surya_m</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%2F3456122%2Fce5511bd-a338-4c82-8660-671473757513.png</url>
      <title>Forem: Jai Surya</title>
      <link>https://forem.com/jai_surya_m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jai_surya_m"/>
    <language>en</language>
    <item>
      <title>Amazon Athena in the AWS Periodic Table</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Thu, 18 Dec 2025 16:07:49 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/amazon-athena-in-the-aws-periodic-table-5g4m</link>
      <guid>https://forem.com/jai_surya_m/amazon-athena-in-the-aws-periodic-table-5g4m</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon Athena in the AWS Periodic Table&lt;/strong&gt; ☁️
&lt;/h2&gt;

&lt;p&gt;In the AWS Periodic Table, Amazon Athena stands out as a powerful, serverless analytics service. It enables users to analyze large volumes of data stored in Amazon S3 using standard SQL—without managing any infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Service Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon Athena is an interactive query service that makes it easy to analyze data directly in Amazon S3 using SQL. It is completely serverless, meaning there is no need to provision, configure, or manage servers. Athena is commonly used for ad-hoc querying, log analysis, and data exploration.&lt;/p&gt;

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

&lt;p&gt;*Serverless – no infrastructure to manage&lt;/p&gt;

&lt;p&gt;*SQL-based querying (Presto / Trino engine)&lt;/p&gt;

&lt;p&gt;*Directly queries data in Amazon S3&lt;/p&gt;

&lt;p&gt;*Supports CSV, JSON, Parquet, ORC, Avro formats&lt;/p&gt;

&lt;p&gt;*Fast query execution with parallel processing&lt;/p&gt;

&lt;p&gt;*Integrates with AWS Glue Data Catalog&lt;/p&gt;

&lt;p&gt;*Built-in security and access control using IAM&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AWS Category / Cloud Domain&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;*Category: Analytics&lt;/p&gt;

&lt;p&gt;*Cloud Domain: Big Data, Data Analytics, Data Warehousing&lt;/p&gt;

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

&lt;p&gt;Amazon Athena fits into the data analysis and monitoring phase of the Cloud and DevOps lifecycle.&lt;br&gt;
It is widely used for:&lt;/p&gt;

&lt;p&gt;*Log analysis and troubleshooting&lt;/p&gt;

&lt;p&gt;*Security auditing and compliance reporting&lt;/p&gt;

&lt;p&gt;*Data validation in CI/CD pipelines&lt;/p&gt;

&lt;p&gt;*Ad-hoc analysis during development and operations&lt;/p&gt;

&lt;p&gt;In DevOps and DevSecOps workflows, Athena helps teams quickly gain insights from operational and security data without deploying additional tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Programming Language / Access Methods&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Query Language: SQL&lt;/p&gt;

&lt;p&gt;Access Methods:&lt;/p&gt;

&lt;p&gt;*AWS Management Console&lt;/p&gt;

&lt;p&gt;*AWS CLI&lt;/p&gt;

&lt;p&gt;*AWS SDKs (Java, Python, JavaScript, etc.)&lt;/p&gt;

&lt;p&gt;*JDBC / ODBC drivers&lt;/p&gt;

&lt;p&gt;*Integration with BI tools like Amazon QuickSight&lt;/p&gt;

&lt;p&gt;##&lt;strong&gt;Pricing Model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Athena follows a pay-per-query pricing model.&lt;/p&gt;

&lt;p&gt;*You are charged per amount of data scanned by each query&lt;/p&gt;

&lt;p&gt;*No upfront costs or minimum fees&lt;/p&gt;

&lt;p&gt;*Costs can be optimized by using compressed and columnar data formats like Parquet and ORC&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon Athena is a simple yet powerful analytics service that allows teams to query massive datasets with ease. Its serverless nature, SQL support, and seamless integration with other AWS services make it an essential component in modern cloud-based data analytics and DevOps environments.&lt;/p&gt;

&lt;p&gt;I would like to sincerely thank my professor, &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;, for his guidance and encouragement in learning cloud technologies and AWS services like Amazon Athena.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Jenkins in DevSecOps Periodic Table</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Thu, 18 Dec 2025 13:51:08 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/jenkins-in-devsecops-periodic-table-9gj</link>
      <guid>https://forem.com/jai_surya_m/jenkins-in-devsecops-periodic-table-9gj</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Jenkins in the DevSecOps Periodic Table&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In the DevSecOps Periodic Table, Jenkins holds a vital position as one of the most widely adopted automation tools. It plays a key role in enabling Continuous Integration and Continuous Delivery (CI/CD), making software development faster, reliable, and more secure. &lt;/p&gt;

&lt;p&gt;##&lt;strong&gt;Overview of the Tool:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins is an open-source automation server that helps developers build, test, and deploy applications automatically. It acts as a central hub where code changes are continuously integrated, tested, and prepared for release. By automating repetitive tasks, Jenkins reduces human error and accelerates the development lifecycle. &lt;/p&gt;

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

&lt;p&gt;*Continuous Integration &amp;amp; Continuous Delivery (CI/CD) automation&lt;/p&gt;

&lt;p&gt;*Extensive plugin ecosystem (1800+ plugins)&lt;/p&gt;

&lt;p&gt;*Easy integration with Git, Docker, Kubernetes, Maven, and more&lt;/p&gt;

&lt;p&gt;*Pipeline-as-Code using Jenkinsfile&lt;/p&gt;

&lt;p&gt;*Distributed builds using master-agent architecture&lt;/p&gt;

&lt;p&gt;*Security integrations for DevSecOps workflows&lt;/p&gt;

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

&lt;p&gt;In DevOps, Jenkins automates the build and deployment process, ensuring faster feedback and continuous delivery.&lt;/p&gt;

&lt;p&gt;In DevSecOps, Jenkins integrates security tools such as:&lt;/p&gt;

&lt;p&gt;*SAST (Static Application Security Testing)&lt;/p&gt;

&lt;p&gt;*DAST (Dynamic Application Security Testing)&lt;/p&gt;

&lt;p&gt;*Dependency scanning&lt;/p&gt;

&lt;p&gt;*Container image scanning&lt;/p&gt;

&lt;p&gt;By embedding security checks directly into the CI/CD pipeline, Jenkins helps shift security left, making applications more secure from the early stages of development.&lt;/p&gt;

&lt;p&gt;💻 ##&lt;strong&gt;Programming Language:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins is primarily written in Java.&lt;br&gt;
Pipeline scripts are commonly written using Groovy, along with support for shell scripts, Python, and other languages depending on the project needs.&lt;/p&gt;

&lt;p&gt;🏢 ##&lt;strong&gt;Parent Company:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins was originally developed by Kohsuke Kawaguchi at Sun Microsystems.&lt;br&gt;
Today, Jenkins is maintained by the Jenkins open-source community under the Continuous Delivery Foundation (CDF), which is part of the Linux Foundation.&lt;/p&gt;

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

&lt;p&gt;✅ Jenkins is completely open source and free to use.&lt;br&gt;
However, enterprises can opt for paid support and managed services from third-party vendors if required.&lt;/p&gt;

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

&lt;p&gt;Jenkins remains a cornerstone of the DevSecOps ecosystem due to its flexibility, scalability, and strong community support. Whether you are automating builds, deployments, or security checks, Jenkins continues to be a powerful and reliable choice in modern software development pipelines.&lt;/p&gt;

&lt;p&gt;I would like to sincerely thank my professor, &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;, for guiding and inspiring me to explore DevOps and DevSecOps tools like Jenkins and helping me grow my technical knowledge.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>github</category>
      <category>git</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Simple College Student Schema</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Wed, 08 Oct 2025 10:15:57 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/simple-college-student-schema-38fo</link>
      <guid>https://forem.com/jai_surya_m/simple-college-student-schema-38fo</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%2F5snh7gg27qfcrq33di76.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%2F5snh7gg27qfcrq33di76.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Insert at least 5 student records into the students collection.&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: "Santhosh",&lt;br&gt;
age: 20,&lt;br&gt;
department: "CSE",&lt;br&gt;
year: 2,&lt;br&gt;
cgpa: 9&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%2F7tcwubnjqhyi8hedjpvi.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%2F7tcwubnjqhyi8hedjpvi.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S002",&lt;br&gt;
name: "Jai surya",&lt;br&gt;
age: 21,&lt;br&gt;
department: "CSE",&lt;br&gt;
year: 3,&lt;br&gt;
cgpa: 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%2F5zgogn7suh8ah9z0g3ql.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%2F5zgogn7suh8ah9z0g3ql.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S003",&lt;br&gt;
name: "Dinesh",&lt;br&gt;
age: 22,&lt;br&gt;
department: "ECE",&lt;br&gt;
year: 4,&lt;br&gt;
cgpa: 9&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%2Fovs9p5y78qbnjlt035pg.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%2Fovs9p5y78qbnjlt035pg.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S004",&lt;br&gt;
name: "siva",&lt;br&gt;
age: 19,&lt;br&gt;
department: "AD",&lt;br&gt;
year: 1,&lt;br&gt;
cgpa: 9&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%2Fwvflnygjc241xgi0hgwp.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%2Fwvflnygjc241xgi0hgwp.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;Display all student records.&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%2Fp49ftejxg93u6e90lc8g.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%2Fp49ftejxg93u6e90lc8g.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find all students with CGPA &amp;gt; 8.&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%2Ffrxvlsm96gkeiq6nbkcu.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%2Ffrxvlsm96gkeiq6nbkcu.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find students belonging to the Computer Science department.&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%2F6219y6yhiy8pk6dajkdu.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%2F6219y6yhiy8pk6dajkdu.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;{ "year": 3 }&lt;/p&gt;

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

&lt;p&gt;Delete one student record by student_id.&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%2F9pwv86d48kd141658hru.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%2F9pwv86d48kd141658hru.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;{ "cgpa": { "$lt": 7.5 } }&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result:&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%2Fglszu6bq1k5iae3usako.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%2Fglszu6bq1k5iae3usako.png" alt=" " width="800" height="453"&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>ai</category>
      <category>devops</category>
      <category>database</category>
      <category>news</category>
    </item>
    <item>
      <title>Transactions, Deadlocks &amp; Log Based Recovery in SQL</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Tue, 07 Oct 2025 14:18:23 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/transactions-deadlocks-log-based-recovery-in-sql-3eia</link>
      <guid>https://forem.com/jai_surya_m/transactions-deadlocks-log-based-recovery-in-sql-3eia</guid>
      <description>&lt;p&gt;&lt;strong&gt;In this assignment, 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;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;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%2Fq9th7v3jsk8cm82fyk8i.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%2Fq9th7v3jsk8cm82fyk8i.png" alt=" " width="800" height="327"&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%2Fikzmj2t0uwzhe4h7pel9.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%2Fikzmj2t0uwzhe4h7pel9.png" alt=" " width="800" height="333"&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%2Frk0cxb3igq3iun597cg7.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%2Frk0cxb3igq3iun597cg7.png" alt=" " width="800" height="323"&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;Task: 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%2F5hbn2pk9y8udaue297ra.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%2F5hbn2pk9y8udaue297ra.png" alt=" " width="800" height="323"&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%2Fn822ijllj70hf6vxb4hl.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%2Fn822ijllj70hf6vxb4hl.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyseaif3clsgjkbmjx492.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%2Fyseaif3clsgjkbmjx492.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;`Deadlock Simulation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Session 1 (conceptual)&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;Session 2 (conceptual)&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;Expected in a real multi-session DB:&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%2F9rlk5kfuyaw86fkycln6.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%2F9rlk5kfuyaw86fkycln6.png" alt=" " width="800" height="324"&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%2Fw482pckywliekmv8uvf3.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%2Fw482pckywliekmv8uvf3.png" alt=" " width="800" height="325"&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%2Fp3vjka1dnev06mo45ip8.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%2Fp3vjka1dnev06mo45ip8.png" alt=" " width="800" height="324"&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%2F5hiqo4vtc2fz6krkac03.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%2F5hiqo4vtc2fz6krkac03.png" alt=" " width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

&lt;p&gt;*Log-Based Recovery: 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;p&gt;&lt;strong&gt;dbms #oracle #sql #transactions #deadlock #recovery #assignment&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>performance</category>
      <category>coding</category>
      <category>development</category>
    </item>
    <item>
      <title>ACID Properties with SQL Transactions in DBMS</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Tue, 07 Oct 2025 13:57:21 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/acid-properties-with-sql-transactions-in-dbms-20mo</link>
      <guid>https://forem.com/jai_surya_m/acid-properties-with-sql-transactions-in-dbms-20mo</guid>
      <description>&lt;p&gt;&lt;strong&gt;ACID properties ensure reliability and correctness of database transactions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Accounts Table:&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES (101, 'Ravi', 5000);&lt;br&gt;
INSERT INTO Accounts (acc_no, name, balance) VALUES (102, 'Meena', 7000);&lt;br&gt;
INSERT INTO Accounts (acc_no, name, balance) VALUES (103, 'Kumar', 6000);&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%2Fyje357jhqf5xo2fei2sp.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%2Fyje357jhqf5xo2fei2sp.png" alt=" " width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Atomicity:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Atomicity ensures that a transaction is treated as a single, indivisible unit of work.&lt;/p&gt;

&lt;p&gt;Either all the operations within a transaction are completed successfully, or none are applied.&lt;/p&gt;

&lt;p&gt;Scenario: Transfer ₹1000 from Ravi to Meena. If an error occurs, rollback to prevent partial updates.&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

&lt;p&gt;-- Deduct ₹1000 from Ravi_&lt;br&gt;
UPDATE Accounts&lt;br&gt;
SET balance = balance - 1000&lt;br&gt;
WHERE acc_no = 101;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-- Simulate an error&lt;/em&gt;&lt;br&gt;
INSERT INTO Accounts (acc_no, name, balance) VALUES (101, 'ErrorTest', 1000);&lt;/p&gt;

&lt;p&gt;-&lt;em&gt;- Add ₹1000 to Meena&lt;/em&gt;&lt;br&gt;
UPDATE Accounts&lt;br&gt;
SET balance = balance + 1000&lt;br&gt;
WHERE acc_no = 102;&lt;/p&gt;

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

&lt;p&gt;-- Verify final balances&lt;br&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%2Fe9cy2tlh7jrloziyofvj.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%2Fe9cy2tlh7jrloziyofvj.png" alt=" " width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explanation:&lt;br&gt;
_&lt;br&gt;
If an error occurs during transfer, ROLLBACK ensures no partial changes remain.&lt;/p&gt;

&lt;p&gt;Atomicity ensures transactions are all-or-nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Consistency:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consistency ensures that a transaction brings the database from one valid state to another, maintaining all defined rules, constraints, and relationships.&lt;/p&gt;

&lt;p&gt;Scenario: Database should reject invalid data like negative balance.&lt;/p&gt;

&lt;p&gt;-- Fix existing negative balances if any&lt;br&gt;
UPDATE Accounts&lt;br&gt;
SET balance = 0&lt;br&gt;
WHERE balance &amp;lt; 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%2Fb6akrstx1mey9hqpe0rt.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%2Fb6akrstx1mey9hqpe0rt.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-- Add CHECK constraint&lt;br&gt;
ALTER TABLE Accounts&lt;br&gt;
ADD CONSTRAINT chk_balance CHECK (balance &amp;gt;= 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%2Fpa2gkwul69uk9mqzz6q8.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%2Fpa2gkwul69uk9mqzz6q8.png" alt=" " width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-- Test invalid insert&lt;br&gt;
INSERT INTO Accounts (acc_no, name, balance) VALUES (104, 'Anita', -500);&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%2Ft36cpa1as5fycujv1qzs.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%2Ft36cpa1as5fycujv1qzs.png" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;br&gt;
_Explanation:&lt;br&gt;
_&lt;br&gt;
Constraint prevents negative balances, maintaining data consistency.&lt;/p&gt;

&lt;p&gt;Anita’s balance is set to 0 to satisfy the constraint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Isolation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Isolation ensures that concurrent transactions do not interfere with each other.&lt;br&gt;
Each transaction should execute as if it were the only one running, preventing issues like dirty reads, lost updates, or uncommitted data access.&lt;/p&gt;

&lt;p&gt;Scenario: Observe concurrent transactions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Session 1: Update Kumar’s balance&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;UPDATE Accounts&lt;br&gt;
SET balance = balance + 500&lt;br&gt;
WHERE acc_no = 103;&lt;br&gt;
-- Do not commit yet&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%2Fxqdqopjul06yp3rd4gs5.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%2Fxqdqopjul06yp3rd4gs5.png" alt=" " width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Session 2: Read Kumar’s balance&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts&lt;br&gt;
WHERE acc_no = 103;&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%2Fys8yri7bczgegmx7dc96.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%2Fys8yri7bczgegmx7dc96.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;br&gt;
Explanation:&lt;/p&gt;

&lt;p&gt;Session 2 does not see uncommitted changes from Session 1.&lt;/p&gt;

&lt;p&gt;Isolation ensures concurrent transactions do not interfere incorrectly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Durability:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Durability guarantees that once a transaction has been committed, its results are permanently saved in the database, even if the system crashes or power fails.&lt;/p&gt;

&lt;p&gt;Scenario: Commit a transaction and ensure changes persist after DB restart.&lt;/p&gt;

&lt;p&gt;UPDATE Accounts&lt;br&gt;
SET balance = balance + 200&lt;br&gt;
WHERE acc_no = 101;&lt;/p&gt;

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

&lt;p&gt;-- After reconnecting/restarting DB&lt;br&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%2F01pr0he013ex0c3h9iv9.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%2F01pr0he013ex0c3h9iv9.png" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Changes persist permanently after commit.&lt;/p&gt;

&lt;p&gt;Durability ensures committed data survives failures.&lt;/p&gt;

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

&lt;p&gt;The ACID properties — Atomicity, Consistency, Isolation, and Durability — form the foundation of reliable transaction management in database systems.&lt;br&gt;
They ensure that all transactions are accurate, consistent, isolated, and permanent, protecting data integrity and maintaining trust in the system. Together, these principles make database operations robust, even in cases of errors, concurrent access, or failures.&lt;/p&gt;

&lt;p&gt;I would like to thank &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; for his guidance and support in completing this DBMS assignment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dbms #sql #oracle #plsql #transactions #acid #database #assignment #learning&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in DBMS</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Tue, 07 Oct 2025 13:29:56 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/indexing-hashing-query-optimization-in-dbms-4kgm</link>
      <guid>https://forem.com/jai_surya_m/indexing-hashing-query-optimization-in-dbms-4kgm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Definiton:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexing:&lt;/strong&gt; Indexing is a data structure technique used in databases to quickly locate and access the data in a table without having to search every row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hash Index:&lt;/strong&gt; A hash index uses a hash function to convert a search key into a hash value, which points directly to the location of the data record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B+ Tree Index:&lt;/strong&gt; A B+ tree index is a balanced tree data structure where all data records are stored at the leaf nodes, and internal nodes only store keys for navigation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B- Tree Index:&lt;/strong&gt; A B-tree index is a balanced tree where keys and data pointers can appear in both internal and leaf nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query Optimization:&lt;/strong&gt; Query optimization is the process of choosing the most efficient way to execute a database query.&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%2Fpnmj5yx33c1m3debgfad.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%2Fpnmj5yx33c1m3debgfad.png" alt=" " width="800" height="316"&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%2Fs2j28i37vgrsr1kuerq6.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%2Fs2j28i37vgrsr1kuerq6.png" alt=" " width="800" height="316"&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%2Fcewj7g27n2akph6ga86u.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%2Fcewj7g27n2akph6ga86u.png" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;SELECT * FROM Students WHERE roll_no = 110;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3z44yot3bgujf5v519x.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%2Fn3z44yot3bgujf5v519x.png" alt=" " width="800" height="326"&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%2Fz8qe00cx5n9zoil39d0x.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%2Fz8qe00cx5n9zoil39d0x.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Query: 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%2Fs2z2vel8rltjhtr3iy0u.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%2Fs2z2vel8rltjhtr3iy0u.png" alt=" " width="800" height="310"&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%2Flf3ljavh0ix8gm2tg2mr.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%2Flf3ljavh0ix8gm2tg2mr.png" alt=" " width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Query: Retrieve all students from the CSBS department&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students WHERE dept = 'CSBS';&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedxq639twzk1ams3g231.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%2Fedxq639twzk1ams3g231.png" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Indexing is a crucial technique in databases that enhances the speed and efficiency of data retrieval. Different types of indexes—such as Hash Index, B-Tree Index, and B+ Tree Index—serve different purposes depending on the query type.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Hash Indexes are best for exact match queries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;B-Tree and B+ Tree Indexes are ideal for both range and equality searches, with B+ Trees being the most widely used in modern databases due to their efficiency in sequential access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, Query Optimization ensures that the database executes queries in the most efficient way possible, making full use of indexes and other optimization strategies. Together, indexing and query optimization greatly improve database performance and responsiveness.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

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

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>performance</category>
      <category>development</category>
    </item>
    <item>
      <title>cursor and trigger in DBMS</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Tue, 07 Oct 2025 13:01:29 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/cursor-and-trigger-in-dbms-2fij</link>
      <guid>https://forem.com/jai_surya_m/cursor-and-trigger-in-dbms-2fij</guid>
      <description>&lt;p&gt;&lt;strong&gt;Definition of cursor in DBMS:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A cursor in DBMS is a database object used to retrieve, manipulate, and navigate through a result set row by row.&lt;br&gt;
It acts like a pointer that allows you to process individual rows returned by an SQL query.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 1: Create Employee Table&lt;/strong&gt;&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%2F9xlytfa80ua6bfpiuuhz.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%2F9xlytfa80ua6bfpiuuhz.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Insert Sample Data&lt;/strong&gt;&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%2Fntci8xn83ta52j9vdrni.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%2Fntci8xn83ta52j9vdrni.png" alt=" " width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create and Process Cursor&lt;/strong&gt;&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;/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%2Frk6rchtpiuw9gfxk7nby.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%2Frk6rchtpiuw9gfxk7nby.png" alt=" " width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explanation:&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;Defintion of trigger in DBMS:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A trigger is a stored procedure that automatically executes (fires) in response to certain events on a table such as INSERT, UPDATE, or DELETE.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 1: Create Students Table&lt;/strong&gt;&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%2F2dy1eg4g2uqv4ftf9spy.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%2F2dy1eg4g2uqv4ftf9spy.png" alt=" " width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create Student_Audit Table&lt;/strong&gt;&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%2Fh4gorobbhdkl6qtl0its.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%2Fh4gorobbhdkl6qtl0its.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create AFTER INSERT Trigger&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;INSERT INTO Students (Student_ID, Student_Name, Course) VALUES (1, 'Ravi', 'Computer Science');&lt;br&gt;
INSERT INTO Students (Student_ID, Student_Name, Course) VALUES (2, 'Meena', 'Electrical Engineering');&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nmphmmsipif1rl1ix2k.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%2F6nmphmmsipif1rl1ix2k.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Verify Audit Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SELECT * FROM Student_Audit;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqjeo8u91ndakcmwhhhs.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%2Fpqjeo8u91ndakcmwhhhs.png" alt=" " width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;*Cursors help in row-by-row processing of query results when set-based operations are not sufficient.&lt;/p&gt;

&lt;p&gt;*Triggers automate database tasks by responding to data modification events automatically.&lt;/p&gt;

&lt;p&gt;*Both cursors and triggers enhance database functionality, control, and automation but should be used carefully to maintain performance and data integrity.&lt;/p&gt;

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

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

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>design</category>
      <category>database</category>
    </item>
    <item>
      <title>DATABASE NORMALIZATION</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Tue, 07 Oct 2025 12:30:31 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/database-normalization-208c</link>
      <guid>https://forem.com/jai_surya_m/database-normalization-208c</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction to database Normalization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Database normalization is a systematic process of organizing data in a database to reduce redundancy and improve data integrity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It involves dividing large, complex tables into smaller, related ones to eliminate anomalies and ensure consistent, efficient data storage.&lt;/p&gt;&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%2Fzvmvw0xcfaunu9pu0g9n.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%2Fzvmvw0xcfaunu9pu0g9n.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;Insertion Anomaly :Can’t add a new course unless a student is enrolled in it.&lt;/p&gt;

&lt;p&gt;Update Anomaly  :If Prof. Rao changes department, we must update multiple rows.&lt;/p&gt;

&lt;p&gt;Deletion Anomaly :If Alice drops “OS,” we lose data about that course/instructor&lt;/p&gt;

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

&lt;p&gt;1NF Rule:&lt;/p&gt;

&lt;p&gt;Each cell should contain atomic values (no repeating groups).&lt;/p&gt;

&lt;p&gt;Each record must be unique.&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%2Frky6du4vos9ugu00s774.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%2Frky6du4vos9ugu00s774.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;2NF Rule:&lt;/p&gt;

&lt;p&gt;The table must already be in 1NF.&lt;/p&gt;

&lt;p&gt;Remove partial dependencies — every non-key attribute must depend on the whole primary key, not just part of it.&lt;/p&gt;

&lt;p&gt;Observations:&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;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%2Fdam16vnzlc8a6annajsj.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%2Fdam16vnzlc8a6annajsj.png" alt=" " width="800" height="326"&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%2Fq4sordpxezylz5hrbu4g.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%2Fq4sordpxezylz5hrbu4g.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Rule:&lt;/p&gt;

&lt;p&gt;The table must already be in 2NF.&lt;/p&gt;

&lt;p&gt;Remove transitive dependencies — non-key attributes must not depend on other non-key attributes.&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;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%2Fnaheov566j9e93upbx8p.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%2Fnaheov566j9e93upbx8p.png" alt=" " width="800" height="319"&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%2F6yl23dx57xi0g8zjbv8m.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%2F6yl23dx57xi0g8zjbv8m.png" alt=" " width="800" height="319"&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%2Fvikkc41h5nbj1f51vh2a.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%2Fvikkc41h5nbj1f51vh2a.png" alt=" " width="800" height="322"&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%2Fqywoo3v4whaczfwfa2lp.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%2Fqywoo3v4whaczfwfa2lp.png" alt=" " width="800" height="338"&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%2F2oc58s5esd7cget1co2u.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%2F2oc58s5esd7cget1co2u.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;By following these normalization steps — 1NF → 2NF → 3NF — we’ve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eliminated redundancy&lt;/li&gt;
&lt;li&gt;Prevented anomalies&lt;/li&gt;
&lt;li&gt;Improved data consistency&lt;/li&gt;
&lt;li&gt;Made queries easier and more efficient&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; for mentoring me on database normalization concepts!&lt;/p&gt;

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

</description>
      <category>database</category>
      <category>sql</category>
      <category>softwaredevelopment</category>
      <category>github</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System using Oracle SQL</title>
      <dc:creator>Jai Surya</dc:creator>
      <pubDate>Sun, 24 Aug 2025 15:41:05 +0000</pubDate>
      <link>https://forem.com/jai_surya_m/college-student-course-management-system-using-oracle-sql-32nn</link>
      <guid>https://forem.com/jai_surya_m/college-student-course-management-system-using-oracle-sql-32nn</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article presents the implementation of a College Student &amp;amp; Course Management System using Oracle SQL. The system demonstrates key relational database concepts including table creation, constraints, data insertion, queries, views, and stored procedures.&lt;/p&gt;

&lt;p&gt;The schema supports student information, course details, faculty records, and student-course enrollments, making it suitable for academic institution management.&lt;/p&gt;

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

&lt;p&gt;The database consists of four primary entities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Students – Student details.&lt;/li&gt;
&lt;li&gt;Courses – Course metadata.&lt;/li&gt;
&lt;li&gt;Enrollments – Student–Course relationships with grades.&lt;/li&gt;
&lt;li&gt;Faculty – Faculty information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Students Table&lt;/strong&gt;&lt;br&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;&lt;strong&gt;Courses Table&lt;/strong&gt;&lt;br&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;&lt;strong&gt;Enrollments Table&lt;/strong&gt;&lt;br&gt;
CREATE TABLE Enrollments (&lt;br&gt;
  EnrollID NUMBER PRIMARY KEY,&lt;br&gt;
  StudentID NUMBER REFERENCES Students(StudentID),&lt;br&gt;
  CourseID NUMBER REFERENCES Courses(CourseID),&lt;br&gt;
  Grade CHAR(2)&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Data Insertion&lt;/strong&gt;&lt;br&gt;
INSERT INTO Students VALUES (1, 'Siva', 'CSE', DATE '2003-03-12', '&lt;a href="mailto:siva@gmail.com"&gt;siva@gmail.com&lt;/a&gt;');&lt;br&gt;
INSERT INTO Students VALUES (2, 'Surya', 'ECE', DATE '2002-04-11', '&lt;a href="mailto:surya@gmail.com"&gt;surya@gmail.com&lt;/a&gt;');&lt;br&gt;
INSERT INTO Students VALUES (3, 'Dinesh', 'MECH', DATE '2001-10-25', '&lt;a href="mailto:dinesh@gmail.com"&gt;dinesh@gmail.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses VALUES (101, 'DBMS', 4);&lt;br&gt;
INSERT INTO Courses VALUES (102, 'OS', 3);&lt;br&gt;
INSERT INTO Courses VALUES (103, 'Networks', 5);&lt;/p&gt;

&lt;p&gt;INSERT INTO Enrollments VALUES (1, 1, 101, 'A');&lt;br&gt;
INSERT INTO Enrollments VALUES (2, 1, 102, 'B');&lt;br&gt;
INSERT INTO Enrollments VALUES (3, 2, 101, 'A');&lt;br&gt;
INSERT INTO Enrollments VALUES (4, 3, 103, 'C');&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table Alterations and Constraints&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Students ADD PhoneNo VARCHAR2(10);&lt;br&gt;
ALTER TABLE Courses&lt;br&gt;
ADD CONSTRAINT chk_credits CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query Operations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;String Functions and Length Calculation&lt;br&gt;
SELECT UPPER(Name) AS StudentName, LENGTH(Email) AS EmailLength&lt;br&gt;
FROM Students;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Aggregate Functions Across Tables&lt;br&gt;
SELECT AVG(Credits) AS AvgCredits, COUNT(*) AS TotalStudents&lt;br&gt;
FROM Students, Courses;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Grouping and Filtering&lt;/strong&gt;&lt;br&gt;
SELECT Dept, COUNT(&lt;em&gt;) AS StudentCount&lt;br&gt;
FROM Students&lt;br&gt;
GROUP BY Dept&lt;br&gt;
HAVING COUNT(&lt;/em&gt;) &amp;gt; 2;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
This system forms the foundation for an extensible academic management solution, which can be expanded to support attendance tracking, fee management, and academic analytics.&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%2Fqcg2r8gughr6nlymou75.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%2Fqcg2r8gughr6nlymou75.png" alt=" " width="800" height="336"&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%2F7r1z5dtb7k54j4fs7bil.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%2F7r1z5dtb7k54j4fs7bil.png" alt=" " width="800" height="373"&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%2Fmfxglxrej334rdy75zpf.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%2Fmfxglxrej334rdy75zpf.png" alt=" " width="800" height="337"&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%2Frl3r48er4ir1dqd0clc0.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%2Frl3r48er4ir1dqd0clc0.png" alt=" " width="800" height="336"&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%2F2rmbv5bh9b3dp2g6ft7l.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%2F2rmbv5bh9b3dp2g6ft7l.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

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