<?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: Deepana</title>
    <description>The latest articles on Forem by Deepana (@deepana_ee9087276132ad19f).</description>
    <link>https://forem.com/deepana_ee9087276132ad19f</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%2F3450704%2Fcc4d2e49-472a-4bef-873e-5a59691a8980.png</url>
      <title>Forem: Deepana</title>
      <link>https://forem.com/deepana_ee9087276132ad19f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/deepana_ee9087276132ad19f"/>
    <language>en</language>
    <item>
      <title>☁️ Amazon S3 (Simple Storage Service)</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Thu, 18 Dec 2025 17:53:28 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/amazon-s3-simple-storage-service-2ahe</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/amazon-s3-simple-storage-service-2ahe</guid>
      <description>&lt;h2&gt;
  
  
  ✨ Introduction
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is one of the most widely used storage services provided by Amazon Web Services (AWS). It is designed to store and retrieve any amount of data at any time from anywhere on the internet 🌍. Because of its scalability, durability, and security, Amazon S3 plays an important role in cloud computing and DevOps workflows.&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%2Fis49qtnowwox58m3c617.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%2Fis49qtnowwox58m3c617.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Amazon S3 (Simple Storage Service) is an object storage service that allows users to store data such as files, images, videos, backups, and logs. It is highly scalable and reliable, making it suitable for both small applications and large enterprise systems.&lt;/p&gt;

&lt;p&gt;In simple terms, Amazon S3 acts like an online storage space in the cloud ☁️.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ Key Features of Amazon S3
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;📦 Object-based storage for any type of data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;♾️ Virtually unlimited storage capacity&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔒 High durability and security&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌍 Accessible from anywhere&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔄 Versioning and lifecycle management&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 Integration with other AWS services&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;AWS Category:&lt;/strong&gt; Storage ☁️&lt;/p&gt;

&lt;p&gt;Amazon S3 belongs to the Storage domain in AWS and is a core service used across many cloud architectures.&lt;/p&gt;

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

&lt;p&gt;In the Cloud and DevOps lifecycle, Amazon S3 is mainly used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;📥 Storing application assets (images, videos, static files)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🗂️ Backup and disaster recovery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 Storing build artifacts in CI/CD pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 Log storage and data archiving&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;S3 supports automation and reliability, which makes it very useful in DevOps environments 🔁.&lt;/p&gt;

&lt;h3&gt;
  
  
  💻 Programming Language / Access Methods
&lt;/h3&gt;

&lt;p&gt;Amazon S3 can be accessed using multiple methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🖥️ AWS Management Console&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⌨️ AWS CLI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧩 AWS SDKs (Python, Java, JavaScript, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌐 REST APIs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💰 Pricing Model
&lt;/h2&gt;

&lt;p&gt;Amazon S3 follows a pay-as-you-go pricing model 💳. Users are charged based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Amount of data stored&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data transfer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Requests made to S3&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also a Free Tier, which provides limited storage for beginners and learners.&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Conclusion
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is a powerful and flexible storage service in AWS. Its high scalability, security, and integration with other AWS services make it an essential part of cloud and DevOps architectures. From simple file storage to complex data backup solutions, Amazon S3 supports a wide range of use cases in modern cloud computing 🚀.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🐳Docker in DevSecOps</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Thu, 18 Dec 2025 16:56:08 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/docker-in-devsecops-aa1</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/docker-in-devsecops-aa1</guid>
      <description>&lt;h2&gt;
  
  
  ✨Introduction
&lt;/h2&gt;

&lt;p&gt;Docker is one of the most popular tools in the DevOps and DevSecOps ecosystem. It helps developers package applications along with all their dependencies into lightweight containers. Because of this, applications run the same way in development, testing, and production environments.&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%2Fgjznctop0ay86x51uvvv.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%2Fgjznctop0ay86x51uvvv.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Overview of Docker
&lt;/h2&gt;

&lt;p&gt;Docker is a containerization platform used to build, ship, and run applications 🛠️. It allows applications to be isolated inside containers, which makes them portable, fast, and consistent across different systems.&lt;/p&gt;

&lt;p&gt;In simple words, “It works on my machine” problem-a Docker solve pannum ✅.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ Key Features of Docker
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;📦 Container-based application deployment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚡ Lightweight and faster than virtual machines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌍 Platform independent (runs on any OS with Docker support)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📈 Easy application scaling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔄 Faster CI/CD pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🏷️ Image-based versioning&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fnhi27uuncxhbonfy3st7.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%2Fnhi27uuncxhbonfy3st7.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  🔗 How Docker Fits into DevOps / DevSecOps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🧑‍💻 In DevOps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;📦 Packaging applications&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔁 Ensuring environment consistency&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 Faster deployment using CI/CD pipelines&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔐 In DevSecOps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🛡️ Scanning container images for vulnerabilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔍 Integrating security checks early in the pipeline&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚫 Reducing security risks by isolating applications&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thus, Docker plays a key role in automation 🤖, consistency 🔁, and security 🔐.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Programming Language Used in Docker
&lt;/h2&gt;

&lt;p&gt;Docker is mainly developed using Go (Golang) 🧩. Go helps Docker achieve high performance ⚡ and efficient concurrency.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏢 Parent Company
&lt;/h2&gt;

&lt;p&gt;Docker is developed and maintained by Docker Inc. 🏗️&lt;/p&gt;

&lt;h2&gt;
  
  
  💰 Open Source or Paid?
&lt;/h2&gt;

&lt;p&gt;Docker is open source 🆓, and anyone can use Docker Community Edition for free. Docker also provides paid enterprise solutions 💼 like Docker Enterprise for large organizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Conclusion
&lt;/h2&gt;

&lt;p&gt;Docker is a powerful tool in the DevSecOps periodic table 🧪. It simplifies application deployment 🚀, improves consistency 🔁, and supports secure development practices 🔐. Because of its speed ⚡, portability 📦, and strong ecosystem 🌐, Docker has become an essential tool in modern software development.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>📝 Understanding Transactions, Deadlocks &amp; Log-Based Recovery in SQL 💾</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Mon, 27 Oct 2025 17:14:14 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/understanding-transactions-deadlocks-log-based-recovery-in-sql-266m</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/understanding-transactions-deadlocks-log-based-recovery-in-sql-266m</guid>
      <description>&lt;h2&gt;
  
  
  👋 Introduction
&lt;/h2&gt;

&lt;p&gt;Have you ever wondered what happens when two people try to withdraw money from the same bank account at the same time?&lt;br&gt;
Databases handle such cases using &lt;strong&gt;transactions&lt;/strong&gt;, &lt;strong&gt;locks&lt;/strong&gt;, and &lt;strong&gt;recovery logs&lt;/strong&gt;&lt;br&gt;
 to make sure data always stays consistent.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How transactions maintain atomicity&lt;/li&gt;
&lt;li&gt;What a deadlock is and how it’s detected&lt;/li&gt;
&lt;li&gt;How log-based recovery ensures data safety after a crash
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE Accounts (
    acc_no INT PRIMARY KEY,
    name VARCHAR(50),
    balance INT
);

INSERT INTO Accounts VALUES
(1, 'Alice', 1000),
(2, 'Bob', 1500),
(3, 'Charlie', 2000);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  ⚙️ 2️⃣ Transaction – Atomicity &amp;amp; Rollback
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🧠 Concept:&lt;/strong&gt;&lt;br&gt;
A transaction ensures that &lt;strong&gt;all steps succeed or none at all&lt;/strong&gt;.&lt;br&gt;
If any step fails, the database will &lt;strong&gt;rollback&lt;/strong&gt; to the previous stable state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START TRANSACTION;
UPDATE Accounts
SET balance = balance - 500
WHERE name = 'Alice';
UPDATE Accounts
SET balance = balance + 500
WHERE name = 'Bob';
SELECT * FROM Accounts;
ROLLBACK;
SELECT * FROM Accounts;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Result:&lt;/strong&gt;&lt;br&gt;
All updates are undone after rollback → no partial transaction is saved.&lt;br&gt;
This proves &lt;strong&gt;Atomicity&lt;/strong&gt; — either &lt;strong&gt;all&lt;/strong&gt; or &lt;strong&gt;none&lt;/strong&gt; of the operations take effect.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔄 3️⃣ Deadlock Simulation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🧠 Concept:&lt;/strong&gt;&lt;br&gt;
A &lt;strong&gt;deadlock&lt;/strong&gt; happens when two transactions wait forever because each holds a lock the other needs.&lt;br&gt;
Let’s simulate it using two SQL sessions.&lt;br&gt;
&lt;strong&gt;🪟 Session 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START TRANSACTION;
UPDATE Accounts SET balance = balance - 100 WHERE name = 'Alice'; 
UPDATE Accounts SET balance = balance + 100 WHERE name = 'Bob';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🪟 Session 2:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START TRANSACTION;
UPDATE Accounts SET balance = balance - 50 WHERE name = 'Bob';
UPDATE Accounts SET balance = balance + 50 WHERE name = 'Alice';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📜 4️⃣ Log-Based Recovery
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🧠 Concept:&lt;/strong&gt;&lt;br&gt;
Every database maintains &lt;strong&gt;logs&lt;/strong&gt; (like MySQL Binary Logs or PostgreSQL WAL) that record each change.&lt;br&gt;
If a crash happens, the DB can &lt;strong&gt;redo committed&lt;/strong&gt; and &lt;strong&gt;undo uncommitted&lt;/strong&gt; transactions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SHOW VARIABLES LIKE 'log_bin';
START TRANSACTION;
UPDATE Accounts SET balance = 900 WHERE name = 'Alice';
ROLLBACK;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then check the logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SHOW BINLOG EVENTS LIMIT 10;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see records for the update and rollback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Result:&lt;/strong&gt;&lt;br&gt;
The undo operation is recorded, ensuring the database can recover correctly after any failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Conclusion
&lt;/h2&gt;

&lt;p&gt;Through this activity, we learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transactions&lt;/strong&gt; ensure data integrity (Atomicity, Consistency)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deadlocks&lt;/strong&gt; are automatically detected and handled by DBMS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs&lt;/strong&gt; help recover data during failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💡 Key takeaway:&lt;/strong&gt; Databases are smart enough to protect your data even when things go wrong!&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%2Fm6i9zxttymn43k0jo015.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6i9zxttymn43k0jo015.jpg" alt=" " width="800" height="430"&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%2F3mtbcpngun8537plb7gd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mtbcpngun8537plb7gd.jpg" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1047g7xvfr7cdof067o6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1047g7xvfr7cdof067o6.jpg" alt=" " width="800" height="428"&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%2F8tnrzaow7sttn1je8fl6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tnrzaow7sttn1je8fl6.jpg" alt=" " width="800" height="431"&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%2F3m69fs8kcx4zqkvrgzv8.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%2F3m69fs8kcx4zqkvrgzv8.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>database</category>
    </item>
    <item>
      <title>ACID properties with SQL transactions</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Wed, 08 Oct 2025 15:40:35 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/acid-properties-with-sql-transactions-2a6n</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/acid-properties-with-sql-transactions-2a6n</guid>
      <description>&lt;h2&gt;
  
  
  Step 1: Create the Accounts Table &amp;amp; Insert Sample Data
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE Accounts (
    acc_no INT PRIMARY KEY,
    name VARCHAR(50),
    balance INT CHECK (balance &amp;gt;= 0) -- prevents negative balance
);

INSERT INTO Accounts (acc_no, name, balance) VALUES
(101, 'Alice', 5000),
(102, 'Bob', 3000),
(103, 'Charlie', 7000);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Atomicity
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt;: Transfer money from Alice → Bob, but rollback midway to prevent partial update.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START TRANSACTION;
UPDATE Accounts SET balance = balance - 1000 WHERE acc_no = 101;
UPDATE Accounts SET balance = balance + 1000 WHERE acc_no = 102;
ROLLBACK;
SELECT * FROM Accounts;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Result:&lt;/strong&gt; No changes happen. Alice still has 5000, Bob 3000.&lt;br&gt;
This shows &lt;strong&gt;atomicity&lt;/strong&gt; — either all updates succeed, or none do.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Consistency
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Reject invalid state (negative balance).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES (104, 'David', -500);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Result:&lt;/strong&gt; Error due to CHECK (balance &amp;gt;= 0).&lt;br&gt;
This preserves &lt;strong&gt;data consistency&lt;/strong&gt; — database rules are enforced.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4: Isolation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Observe isolation between concurrent transactions.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START TRANSACTION;
UPDATE Accounts SET balance = balance + 2000 WHERE acc_no = 103;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Session 2 (another terminal/session):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM Accounts WHERE acc_no = 103;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Result:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Depending on isolation level (REPEATABLE READ default in MySQL), Session 2 may &lt;strong&gt;not see uncommitted changes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Session 1 commits → changes become visible.
&lt;/li&gt;
&lt;/ul&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;This shows &lt;strong&gt;isolation&lt;/strong&gt; — transactions do not interfere unexpectedly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Durability
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Data persists after commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START TRANSACTION;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 102;
COMMIT;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Restart the database.&lt;/li&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM Accounts WHERE acc_no = 102;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Result:&lt;/strong&gt; Bob’s balance is updated permanently. ✅&lt;br&gt;
This demonstrates &lt;strong&gt;durability&lt;/strong&gt; — committed transactions survive crashes.&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%2Fe25mxbfm0tflyq22ljw8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe25mxbfm0tflyq22ljw8.jpg" alt=" " width="800" height="431"&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%2Ftk7clb12a1eqq1ltthq8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftk7clb12a1eqq1ltthq8.jpg" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpqt4fsspsovtonnqiuw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpqt4fsspsovtonnqiuw.jpg" alt=" " width="800" height="448"&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%2Fat2ptd8w4hyv6m5poxeu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fat2ptd8w4hyv6m5poxeu.jpg" alt=" " width="800" height="537"&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%2Fvmj5wmocwudlvtmhkbar.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmj5wmocwudlvtmhkbar.jpg" alt=" " width="800" height="537"&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%2F9e9wcn68wbsgmmq7ab72.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e9wcn68wbsgmmq7ab72.jpg" alt=" " width="800" height="498"&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%2Fwc10c51rztod6tgzi24v.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc10c51rztod6tgzi24v.jpg" alt=" " width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;ACID properties ensure reliable and consistent database transactions. Atomicity prevents partial updates, Consistency enforces rules, Isolation keeps transactions independent, and Durability makes changes permanent. Practicing these ensures your data is always safe and trustworthy.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Wed, 08 Oct 2025 13:55:13 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/indexing-hashing-query-optimization-1hn9</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/indexing-hashing-query-optimization-1hn9</guid>
      <description>&lt;h2&gt;
  
  
  🎯 Objective
&lt;/h2&gt;

&lt;p&gt;To understand how to improve query performance using &lt;strong&gt;B-Tree, B+ Tree, and Hash indexing&lt;/strong&gt; in MySQL.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Step 1: Create the Students Table
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE Students (
    roll_no INT PRIMARY KEY,
    name VARCHAR(50),
    dept VARCHAR(20),
    cgpa DECIMAL(3,2)
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧾 Step 2: Insert Sample Records
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO Students (roll_no, name, dept, cgpa) VALUES
(101, 'Alice', 'CSBS', 8.7),
(102, 'Rahul', 'ECE', 7.9),
(103, 'Priya', 'IT', 8.1),
(104, 'Kavin', 'CSBS', 9.0),
(105, 'Meena', 'EEE', 7.5),
(106, 'Deepak', 'CIVIL', 8.0),
(107, 'Sathya', 'MECH', 6.9),
(108, 'Ravi', 'IT', 7.8),
(109, 'Sneha', 'CSBS', 8.9),
(110, 'Manoj', 'ECE', 8.3),
(111, 'Divya', 'CSBS', 9.1),
(112, 'Hari', 'MECH', 7.4),
(113, 'Nithya', 'EEE', 7.8),
(114, 'Karthik', 'CIVIL', 8.2),
(115, 'Anu', 'CSBS', 8.4),
(116, 'Gokul', 'IT', 7.7),
(117, 'Vishnu', 'ECE', 8.0),
(118, 'Saran', 'EEE', 8.5),
(119, 'Preethi', 'CIVIL', 7.6),
(120, 'Varun', 'CSBS', 9.3);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌳 Step 3: Create a B-Tree Index on roll_no
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE INDEX idx_roll_no ON Students(roll_no);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Query:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM Students WHERE roll_no = 110;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💡 Explanation:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;B-Tree indexes help in range-based and sorted searches efficiently.&lt;/li&gt;
&lt;li&gt;The lookup time reduces from O(n) to O(log n).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌿 Step 4: Create a B+ Tree Index on cgpa
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE INDEX idx_cgpa ON Students(cgpa);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Query:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM Students WHERE cgpa &amp;gt; 8.0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Step 5: Create a Hash Index on dept
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE INDEX idx_dept_hash USING HASH ON Students(dept);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Query:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM Students WHERE dept = 'CSBS';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💡 Explanation:
&lt;/h2&gt;

&lt;p&gt;-Hash Index is best for exact match lookups (e.g., =).&lt;br&gt;
-It is not used for range queries like &amp;gt; or &amp;lt;.&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%2Fknfpf63ksejwdsrnyq94.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknfpf63ksejwdsrnyq94.jpg" alt=" " width="800" height="478"&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%2Fiqbpyi8ctj8p9subwtqd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqbpyi8ctj8p9subwtqd.jpg" alt=" " width="800" height="465"&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%2F65g75hsw3nd5q1u0ydw4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65g75hsw3nd5q1u0ydw4.jpg" alt=" " width="800" height="490"&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%2Fw58yeezghsu725kkbq8f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw58yeezghsu725kkbq8f.jpg" alt=" " width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Conclusion
&lt;/h2&gt;

&lt;p&gt;In this experiment, we learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to create and use B-Tree, B+ Tree, and Hash indexes&lt;/li&gt;
&lt;li&gt;How these indexes improve query performance&lt;/li&gt;
&lt;li&gt;Which index type fits each kind of query&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sql</category>
      <category>performance</category>
      <category>mysql</category>
      <category>database</category>
    </item>
    <item>
      <title>🔹 CRUD Operations in MongoDB – A Hands-on College Student Example</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Mon, 06 Oct 2025 16:57:56 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/crud-operations-in-mongodb-a-hands-on-college-student-example-3gjg</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/crud-operations-in-mongodb-a-hands-on-college-student-example-3gjg</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📘 Objective
&lt;/h2&gt;

&lt;p&gt;In this post, we’ll explore how to perform CRUD (Create, Read, Update, Delete) operations in MongoDB using a simple College Student schema.&lt;br&gt;
This activity helped me understand how MongoDB stores data in collections and how to interact with it using queries.&lt;/p&gt;
&lt;h2&gt;
  
  
  🧩 Schema – Collection: &lt;strong&gt;students&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Each document in the collection follows this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "student_id": "S001",
  "name": "Santhosh",
  "age": 20,
  "department": "CSBS",
  "year": 2,
  "cgpa": 9
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ 1️⃣ Create (Insert)
&lt;/h2&gt;

&lt;p&gt;Insert multiple student records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.insertMany([
  { "student_id": "S001", "name": "Santhosh", "age": 20, "department": "CSBS", "year": 2, "cgpa": 9 },
  { "student_id": "S002", "name": "Deepa", "age": 19, "department": "CSE", "year": 1, "cgpa": 8.7 },
  { "student_id": "S003", "name": "Meena", "age": 21, "department": "IT", "year": 3, "cgpa": 7.9 },
  { "student_id": "S004", "name": "Kavin", "age": 22, "department": "CSBS", "year": 3, "cgpa": 8.4 },
  { "student_id": "S005", "name": "Arun", "age": 20, "department": "EEE", "year": 2, "cgpa": 6.9 }
])

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔍 2️⃣ Read (Query)
&lt;/h2&gt;

&lt;p&gt;📌 Display all student records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.find()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnmds3r04d4d3r5m3kudt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmds3r04d4d3r5m3kudt.jpg" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 Find students with &lt;strong&gt;CGPA &amp;gt; 8&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.find({ cgpa: { $gt: 8 } })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F76shdibqcobz599hh9sl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76shdibqcobz599hh9sl.jpg" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 Find students belonging to the &lt;strong&gt;Computer Science&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.find({ department: { $regex: "CS", $options: "i" } })

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fcp5yucddsquponx7m51g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcp5yucddsquponx7m51g.jpg" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✏️ 3️⃣ Update
&lt;/h2&gt;

&lt;p&gt;📌 Update the CGPA of a specific student:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.updateOne({ student_id: "S002" }, { $set: { cgpa: 9.1 } })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Feyzb9fgvxzr8xjnzqma9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feyzb9fgvxzr8xjnzqma9.jpg" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 Increase the year of study for all &lt;strong&gt;3rd year&lt;/strong&gt; students by 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.updateMany({ year: 3 }, { $inc: { year: 1 } })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F99gf2hx42ik92e3omt05.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99gf2hx42ik92e3omt05.jpg" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🗑️ 4️⃣ Delete
&lt;/h2&gt;

&lt;p&gt;📌 Delete one student record by student_id:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.deleteOne({ student_id: "S005" })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fr4g19x8cjuffnc74druk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4g19x8cjuffnc74druk.jpg" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;br&gt;
📌 Delete all students having &lt;strong&gt;CGPA &amp;lt; 7.5&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.students.deleteMany({ cgpa: { $lt: 7.5 } })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📤 Deliverables
&lt;/h2&gt;

&lt;p&gt;✅ MongoDB queries (insert, find, update, delete)&lt;br&gt;
✅ Screenshots from &lt;strong&gt;MongoDB Atlas&lt;/strong&gt; showing query outputs&lt;br&gt;
✅ Export of the final students collection in &lt;strong&gt;JSON/CSV format&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Summary
&lt;/h2&gt;

&lt;p&gt;Through this exercise, I learned how MongoDB handles data in a &lt;strong&gt;document-based structure&lt;/strong&gt; and how CRUD operations can be done easily using built-in commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙏 Special Thanks
&lt;/h2&gt;

&lt;p&gt;A special thanks to &lt;strong&gt;Santhosh NC Sir&lt;/strong&gt; for his guidance and continuous support in this DBMS learning journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏷️ Tags
&lt;/h2&gt;

&lt;h1&gt;
  
  
  mongodb #dbms #crud #students #database #learning
&lt;/h1&gt;

</description>
      <category>mongodb</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>database</category>
    </item>
    <item>
      <title>🧾 Transactions, Deadlocks &amp; Log-Based Recovery in DBMS – A Practical Guide</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Sat, 04 Oct 2025 16:47:58 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/transactions-deadlocks-log-based-recovery-in-dbms-a-practical-guide-22j1</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/transactions-deadlocks-log-based-recovery-in-dbms-a-practical-guide-22j1</guid>
      <description>&lt;h2&gt;
  
  
  🧩 Schema Setup
&lt;/h2&gt;

&lt;p&gt;We’ll use a single table called Accounts.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Student_Fees (&lt;br&gt;
    acc_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(50),&lt;br&gt;
    balance INT&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO Student_Fees VALUES (1, 'Alice', 1000);&lt;br&gt;
INSERT INTO Student_Fees VALUES (2, 'Bob', 1500);&lt;br&gt;
INSERT INTO Student_Fees VALUES (3, 'Charlie', 2000);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check your table:&lt;/strong&gt;&lt;br&gt;
SELECT * FROM Student_Fees;&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%2Fx1l3ekmbit8g1iwqy2hk.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%2Fx1l3ekmbit8g1iwqy2hk.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ 1️⃣ Transaction – Atomicity &amp;amp; Rollback
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;
Atomicity ensures that a transaction is all or nothing.&lt;br&gt;
If any part fails or if we manually rollback, all changes are undone.&lt;/p&gt;

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

&lt;p&gt;SAVEPOINT start_point;&lt;br&gt;
UPDATE Student_Fees SET balance = balance - 500 WHERE name = 'Alice';&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE name = 'Bob';&lt;br&gt;
ROLLBACK TO start_point;&lt;br&gt;
SELECT * FROM Student_Fees;&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%2Fke0zz5gtpy9xe8d9dqwv.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%2Fke0zz5gtpy9xe8d9dqwv.png" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;✅ Result:&lt;/strong&gt;&lt;br&gt;
Balances remain unchanged → proves Atomicity works!&lt;/p&gt;

&lt;h2&gt;
  
  
  🔁 2️⃣ Deadlock Simulation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;
A deadlock happens when two transactions hold locks that each other needs.&lt;/p&gt;

&lt;p&gt;Even though Oracle LiveSQL doesn’t support two sessions, we can understand the concept using example code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 Session 1:&lt;/strong&gt;&lt;br&gt;
UPDATE Student_Fees SET fees_balance = fees_balance - 500 WHERE stud_name = 'Deepa';&lt;br&gt;
UPDATE Student_Fees SET fees_balance = fees_balance + 500 WHERE stud_name = 'Meena';&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 Session 2:&lt;/strong&gt;&lt;br&gt;
UPDATE Student_Fees SET fees_balance = fees_balance - 700 WHERE stud_name = 'Meena';&lt;br&gt;
UPDATE Student_Fees SET fees_balance = fees_balance + 700 WHERE stud_name = 'Deepa';&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%2F7oegenn3bhh7y1bby36w.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%2F7oegenn3bhh7y1bby36w.png" alt=" " width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Result:&lt;/em&gt;&lt;/strong&gt; Both transactions wait on each other → &lt;strong&gt;deadlock detected&lt;/strong&gt; → DBMS automatically rolls back one transaction.&lt;/p&gt;

&lt;p&gt;Note: In LiveSQL, updates are sequential, so no deadlock error appears.&lt;br&gt;
This section is for &lt;strong&gt;conceptual understanding&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 3️⃣ Log-Based Recovery (Undo Demonstration)
&lt;/h2&gt;

&lt;p&gt;Oracle automatically maintains undo/redo logs. Rollback uses undo logs to restore old data.&lt;/p&gt;

&lt;p&gt;SAVEPOINT log_demo;&lt;br&gt;
UPDATE Student_Fees &lt;br&gt;
SET fees_balance = fees_balance + 1000 &lt;br&gt;
WHERE stud_name = 'Meena';&lt;br&gt;
ROLLBACK TO log_demo;&lt;br&gt;
SELECT * FROM Student_Fees;&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%2Fl0p2sczy6us1nhpo93qz.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%2Fl0p2sczy6us1nhpo93qz.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Explanation&lt;/em&gt;: Undo logs restored the previous state → log-based recovery works.&lt;/p&gt;

&lt;h2&gt;
  
  
  📘 What You’ll Learn
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ How &lt;strong&gt;atomicity&lt;/strong&gt; prevents partial updates&lt;/li&gt;
&lt;li&gt;⚡ How &lt;strong&gt;deadlocks&lt;/strong&gt; can occur in multi-session environments&lt;/li&gt;
&lt;li&gt;🔄 How &lt;strong&gt;log-based&lt;/strong&gt; recovery restores data safely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🙏 Special Thanks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A heartfelt &lt;strong&gt;thank you to Santhosh NC Sir&lt;/strong&gt; for his guidance and continuous support throughout this DBMS assignment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏷️ Tags&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  dbms #oracle #sql #transactions #database #students #learning
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Cursor + Trigger in SQL: A Beginner-Friendly Guide</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Sat, 04 Oct 2025 09:26:15 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/cursor-trigger-in-sql-a-beginner-friendly-guide-577a</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/cursor-trigger-in-sql-a-beginner-friendly-guide-577a</guid>
      <description>&lt;h2&gt;
  
  
  Cursor + Trigger in SQL
&lt;/h2&gt;

&lt;p&gt;In this blog, we will clearly understand &lt;strong&gt;Cursor&lt;/strong&gt; and &lt;strong&gt;Trigger&lt;/strong&gt; with step-by-step explanation and examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Part 1: Cursor Example
&lt;/h2&gt;

&lt;h2&gt;
  
  
  📌 What is a Cursor?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;cursor&lt;/strong&gt; is like a pointer which allows us to &lt;strong&gt;fetch rows one by one&lt;/strong&gt; from a query result.
&lt;/li&gt;
&lt;li&gt;Useful when we want to &lt;strong&gt;process each record individually&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📝 Task
&lt;/h2&gt;

&lt;p&gt;Create a cursor that displays employee names whose salary is greater than &lt;code&gt;50,000&lt;/code&gt; from the &lt;strong&gt;Employee&lt;/strong&gt; table.  &lt;/p&gt;

&lt;h2&gt;
  
  
  💻 SQL Code
&lt;/h2&gt;

&lt;p&gt;DECLARE&lt;br&gt;
  CURSOR emp_cursor IS&lt;br&gt;
    SELECT EmployeeName&lt;br&gt;
    FROM Employee&lt;br&gt;
    WHERE Salary &amp;gt; 50000;&lt;br&gt;
  v_emp_name Employee.EmployeeName%TYPE;&lt;br&gt;
BEGIN&lt;br&gt;
  OPEN emp_cursor;&lt;br&gt;
  LOOP&lt;br&gt;
    FETCH emp_cursor INTO v_emp_name;&lt;br&gt;
    EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
    DBMS_OUTPUT.PUT_LINE('Employee: ' || v_emp_name);&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%2F44obyu59z3k3iq1ifjsq.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%2F44obyu59z3k3iq1ifjsq.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Explanation (Step by Step)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DECLARE Cursor&lt;/strong&gt; → We define a cursor to select employees with salary &amp;gt; 50,000.&lt;br&gt;
&lt;strong&gt;Variable&lt;/strong&gt; → v_emp_name stores each fetched employee name.&lt;br&gt;
&lt;strong&gt;OPEN Cursor&lt;/strong&gt; → Cursor execution starts.&lt;br&gt;
&lt;strong&gt;LOOP + FETCH&lt;/strong&gt; → Each row is fetched and displayed.&lt;br&gt;
&lt;strong&gt;EXIT WHEN NOTFOUND&lt;/strong&gt; → Loop stops when no rows left.&lt;br&gt;
&lt;strong&gt;CLOSE Cursor&lt;/strong&gt; → Cursor is closed to release memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Part 2: Trigger Example
&lt;/h2&gt;

&lt;h2&gt;
  
  
  📌 What is a Trigger?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;trigger&lt;/strong&gt; is a stored program that is &lt;strong&gt;automatically executed&lt;/strong&gt; when a specific event (INSERT, UPDATE, DELETE) occurs on a table.&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Task
&lt;/h2&gt;

&lt;p&gt;Whenever a new &lt;strong&gt;student&lt;/strong&gt; is added to the Students table, automatically insert a log entry into the &lt;strong&gt;Student_Audit&lt;/strong&gt; table.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 SQL Code
&lt;/h2&gt;

&lt;p&gt;CREATE OR REPLACE TRIGGER trg_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(StudentID, Action, ActionDate)&lt;br&gt;
  VALUES(:NEW.StudentID, 'INSERT', SYSDATE);&lt;br&gt;
END;&lt;br&gt;
/&lt;br&gt;
INSERT INTO Students (StudentID, StudentName)&lt;br&gt;
VALUES (102, 'Divya');&lt;br&gt;
COMMIT;&lt;br&gt;
SELECT * FROM Student_Audit;&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Explanation:
&lt;/h2&gt;

&lt;p&gt;This trigger fires &lt;strong&gt;AFTER INSERT&lt;/strong&gt; on Students.&lt;/p&gt;

&lt;p&gt;For each new student, a record is automatically added in Student_Audit with date &amp;amp; action type.&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%2Ftg5mtqjveefg1zlxetta.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%2Ftg5mtqjveefg1zlxetta.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ That’s it!&lt;/strong&gt;&lt;br&gt;
With these two examples, we learned:&lt;br&gt;
How to use a &lt;strong&gt;Cursor with condition&lt;/strong&gt;.&lt;br&gt;
How to create an &lt;strong&gt;AFTER INSERT Trigger&lt;/strong&gt; to maintain audit logs.&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>Normalization in DBMS with SQL Examples (1NF 2NF 3NF)</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Fri, 03 Oct 2025 11:37:35 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/normalization-in-dbms-with-sql-examples-1nf-2nf-3nf-3o6g</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/normalization-in-dbms-with-sql-examples-1nf-2nf-3nf-3o6g</guid>
      <description>&lt;p&gt;In this blog, I am sharing my learnings about Normalization in DBMS. &lt;br&gt;
As part of my coursework, I implemented 1NF, 2NF, and 3NF using SQL.&lt;br&gt;
This blog will explain step by step with tables and queries.&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Anomalies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Insertion Anomaly&lt;/em&gt;&lt;/strong&gt;: Cannot add a course without student.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update Anomaly&lt;/em&gt;&lt;/strong&gt;: Instructor’s phone number must be updated in many rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Deletion Anomaly&lt;/em&gt;&lt;/strong&gt;: If last student leaves, course info also deleted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 1: 1NF (First Normal Form)&lt;/strong&gt;&lt;br&gt;
👉 Condition: No repeating groups / multivalued attributes.&lt;br&gt;
Already table is in 1NF (since all fields atomic).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL (2NF Tables)&lt;/strong&gt;&lt;br&gt;
CREATE TABLE StudentCourse (&lt;br&gt;
  StudentID VARCHAR(10),&lt;br&gt;
  StudentName VARCHAR(50),&lt;br&gt;
  CourseID VARCHAR(10),&lt;br&gt;
  CourseName VARCHAR(50),&lt;br&gt;
  Instructor VARCHAR(50),&lt;br&gt;
  InstructorPhone VARCHAR(15),&lt;br&gt;
  PRIMARY KEY (StudentID, 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%2Fjogww4gbzrn4sy9rxf0h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjogww4gbzrn4sy9rxf0h.jpg" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: 2NF (Second Normal Form)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Condition&lt;/strong&gt;: No partial dependency (non-key attribute should depend on full primary key).&lt;br&gt;
Here StudentName depends only on StudentID,&lt;br&gt;
and CourseName, Instructor, InstructorPhone depend only on CourseID.&lt;/p&gt;

&lt;p&gt;So we split:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student&lt;/strong&gt; table&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Course&lt;/strong&gt; table&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enrollment&lt;/strong&gt; (Student-Course relation) table&lt;br&gt;
CREATE TABLE Student (&lt;br&gt;
  StudentID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
  StudentName VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Course (&lt;br&gt;
  CourseID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
  CourseName VARCHAR(50),&lt;br&gt;
  Instructor VARCHAR(50),&lt;br&gt;
  InstructorPhone VARCHAR(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollment (&lt;br&gt;
  StudentID VARCHAR(10),&lt;br&gt;
  CourseID VARCHAR(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%2Fycd1xwyn6ngter3t0bkg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycd1xwyn6ngter3t0bkg.jpg" alt=" " width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: 3NF (Third Normal Form)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Condition&lt;/strong&gt;: No transitive dependency.&lt;br&gt;
Here InstructorPhone depends on Instructor, not on CourseID.&lt;/p&gt;

&lt;p&gt;So we separate Instructor into another table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL (3NF Tables)&lt;/strong&gt;&lt;br&gt;
CREATE TABLE Student (&lt;br&gt;
  StudentID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
  StudentName VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Instructor (&lt;br&gt;
  InstructorID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
  InstructorName VARCHAR(50),&lt;br&gt;
  InstructorPhone VARCHAR(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Course (&lt;br&gt;
  CourseID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
  CourseName VARCHAR(50),&lt;br&gt;
  InstructorID VARCHAR(10),&lt;br&gt;
  FOREIGN KEY (InstructorID) REFERENCES Instructor(InstructorID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollment (&lt;br&gt;
  StudentID VARCHAR(10),&lt;br&gt;
  CourseID VARCHAR(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%2F8bbqktido14riijg7xs7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bbqktido14riijg7xs7.jpg" alt=" " width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 4:Sample Data&lt;/strong&gt;&lt;br&gt;
INSERT INTO Student VALUES ('S01','Arjun'), ('S02','Priya'), ('S03','Kiran');&lt;br&gt;
INSERT INTO Instructor VALUES ('I01','Dr. Kumar','9876543210'), ('I02','Dr. Mehta','9123456780'), ('I03','Dr. Rao','9988776655');&lt;br&gt;
INSERT INTO Course VALUES ('C101','DBMS','I01'), ('C102','Data Mining','I02'), ('C103','AI','I03');&lt;br&gt;
INSERT INTO Enrollment VALUES ('S01','C101'), ('S01','C102'), ('S02','C101'), ('S03','C103');&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 5:Query with JOIN&lt;/strong&gt;&lt;br&gt;
SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Enrollment e&lt;br&gt;
JOIN Student s ON e.StudentID = s.StudentID&lt;br&gt;
JOIN Course c ON e.CourseID = c.CourseID&lt;br&gt;
JOIN Instructor i ON c.InstructorID = i.InstructorID;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Through Normalization, we reduced redundancy and avoided anomalies. &lt;br&gt;
1NF ensured atomicity, 2NF removed partial dependency, and 3NF removed transitive dependency.&lt;br&gt;
This is how databases remain consistent and efficient.&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System</title>
      <dc:creator>Deepana</dc:creator>
      <pubDate>Fri, 22 Aug 2025 09:01:08 +0000</pubDate>
      <link>https://forem.com/deepana_ee9087276132ad19f/college-student-course-management-system-15kj</link>
      <guid>https://forem.com/deepana_ee9087276132ad19f/college-student-course-management-system-15kj</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Managing students, courses, and enrollments is one of the most common real-world applications of databases. To understand how these concepts work in practice, I have created a simple College Student &amp;amp; Course Management System using Oracle LiveSQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defining tables with constraints (DDL)&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;Inserting Data (DML)&lt;/strong&gt;&lt;br&gt;
INSERT INTO Students VALUES (1, 'Arun Kumar', 'CSE', DATE '2003-05-12', '&lt;a href="mailto:arun@gmail.com"&gt;arun@gmail.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding and modifying data (DML &amp;amp; ALTER)&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Students&lt;br&gt;
ADD PhoneNo NUMBER(10);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defining Constraints – Credits Between 1 and 5&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Courses&lt;br&gt;
MODIFY Credits CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SELECT with Functions&lt;/strong&gt;&lt;br&gt;
SELECT UPPER(Name) AS StudentName, LENGTH(Email) AS EmailLength&lt;br&gt;
FROM Students;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregate Functions&lt;/strong&gt;&lt;br&gt;
SELECT AVG(Credits) AS AvgCredits FROM Courses;&lt;br&gt;
SELECT COUNT(*) AS TotalStudents FROM Students;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JOIN Operation&lt;/strong&gt;&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;p&gt;&lt;strong&gt;GROUP BY with HAVING&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;View – StudentCoursesView&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 – UpdateGrade&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;
)&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;/p&gt;

&lt;p&gt;&lt;strong&gt;output&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;📌 Conclusion&lt;/strong&gt;&lt;br&gt;
In this blog, I demonstrated the implementation of a simple College Student &amp;amp; Course Management System on Oracle LiveSQL.&lt;br&gt;
The queries covered:&lt;/p&gt;

&lt;p&gt;DDL, DML, ALTER, and Constraints&lt;br&gt;
SELECT with functions&lt;br&gt;
Aggregates and GROUP BY with HAVING&lt;br&gt;
Joins and Views&lt;br&gt;
Stored Procedure&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%2Fhfz01j5npey04kn0f8fv.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%2Fhfz01j5npey04kn0f8fv.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
