<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: MBEWE CATHERINE 24CB068</title>
    <description>The latest articles on DEV Community by MBEWE CATHERINE 24CB068 (@mbewe_catherine24cb068_6).</description>
    <link>https://dev.to/mbewe_catherine24cb068_6</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%2F3458136%2Fb4dda5d7-7b65-403a-9dc3-caefbacc65e4.png</url>
      <title>DEV Community: MBEWE CATHERINE 24CB068</title>
      <link>https://dev.to/mbewe_catherine24cb068_6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mbewe_catherine24cb068_6"/>
    <language>en</language>
    <item>
      <title>ACID Properties with SQL Transactions in DBMS</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Tue, 07 Oct 2025 14:06:49 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/acid-properties-with-sql-transactions-in-dbms-48kc</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/acid-properties-with-sql-transactions-in-dbms-48kc</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction: Understanding ACID Properties through SQL Transactions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the world of database management, ensuring data reliability and consistency is paramount. This is where the ACID properties Atomicity, Consistency, Isolation, and Durability come into play. These principles form the backbone of transaction management, guaranteeing that database operations are executed safely, even in the face of errors, system crashes, or concurrent access.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore how to demonstrate each of the ACID properties practically using SQL transactions in MySQL. Starting from creating a simple database, we'll walk through examples that showcase how ACID principles maintain data integrity and provide a robust framework for handling complex operations.&lt;/p&gt;

&lt;p&gt;Let’s dive in by setting up our demo environment and then uncover the power of ACID in action.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demonstrating ACID Properties with SQL Transactions:-&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;CREATE DATABASE acid_demo;&lt;br&gt;
USE acid_demo;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Create a table Accounts(acc_no INT PRIMARY KEY, name VARCHAR(50), balance INT).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE Accounts (&lt;br&gt;
acc_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR(50),&lt;br&gt;
balance INT CHECK (balance &amp;gt;= 0)&lt;br&gt;
) ENGINE=InnoDB;&lt;/p&gt;

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

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

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

&lt;p&gt;Output: 3 rows inserted.&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
acc_no | name | balance&lt;br&gt;
1 | Alice | 5000&lt;br&gt;
2 | Bob | 3000&lt;br&gt;
3 | Charlie | 7000&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
balances remain unchanged (Alice=5000, Bob=3000).&lt;br&gt;
This proves atomicity: either all updates happen, or none.&lt;br&gt;
COMMIT:&lt;/p&gt;

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

&lt;p&gt;Output: Alice=4500, Bob=3500.&lt;br&gt;
Committed → permanent update.&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; Error – CHECK constraint failed.&lt;br&gt;
Database rejects invalid data → consistency is preserved.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;isolation (needs 2 query tabs)&lt;/strong&gt;&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;Tab A sees the reduced balance (2500).&lt;/p&gt;

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

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

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

&lt;p&gt;If using default isolation (REPEATABLE READ), Tab B still sees old committed value (4500), not Tab A’s uncommitted update.&lt;/p&gt;

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

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

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

&lt;p&gt;Both sessions see Alice back to 4500.&lt;br&gt;
This shows isolation.&lt;/p&gt;

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

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

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 3;&lt;br&gt;
COMMIT;&lt;/p&gt;

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

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

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

&lt;p&gt;Charlie’s balance increases (7500).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Now restart MySQL server&lt;/strong&gt;&lt;br&gt;
Reconnect, run again:&lt;/p&gt;

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

&lt;p&gt;Balance is still 7500.&lt;br&gt;
This proves durability: committed changes survive restarts.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Conclusion: The Power of ACID in Reliable Database Transactions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACID properties are fundamental to ensuring that database transactions are processed reliably and securely. By guaranteeing atomicity, consistency, isolation, and durability, databases can handle complex operations without risking data corruption or loss even under concurrent access or unexpected failures.&lt;/p&gt;

&lt;p&gt;Through practical examples in MySQL, we've seen how these principles work behind the scenes to protect data integrity and provide a stable environment for applications. Whether you're a developer, database administrator, or tech enthusiast, understanding and leveraging ACID properties is essential for building trustworthy and efficient data-driven systems.&lt;/p&gt;

&lt;p&gt;Embracing ACID transactions means embracing confidence in your data and that’s a critical step toward scalable, robust applications.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>DBMS – Transactions, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Sun, 05 Oct 2025 19:16:59 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/dbms-transactions-deadlocks-log-based-recovery-39b7</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/dbms-transactions-deadlocks-log-based-recovery-39b7</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Transactions, Deadlocks &amp;amp; Log-Based Recovery in Databases
&lt;/h2&gt;

&lt;p&gt;Databases handle lots of operations all at once, and keeping everything running smoothly is no easy task. That’s why concepts like transactions, deadlocks, and log-based recovery are so important in database management systems (DBMS).&lt;/p&gt;

&lt;p&gt;A transaction is a group of actions that happen together as a single unit, ensuring data stays accurate and consistent.&lt;/p&gt;

&lt;p&gt;Sometimes, transactions can get stuck waiting for each other, causing a deadlock think of it like two people blocking each other in a hallway.&lt;/p&gt;

&lt;p&gt;To keep data safe even if things go wrong, log-based recovery keeps a detailed record of changes so the database can bounce back quickly after crashes or errors.&lt;/p&gt;

&lt;p&gt;Understanding these concepts helps make sure your data stays reliable, even when multiple users and complex operations are happening at the same time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create Table &amp;amp; Insert Data&lt;/strong&gt;&lt;br&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%2Fn4clkiabgjmxoc12ngkh.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%2Fn4clkiabgjmxoc12ngkh.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts VALUES (1, 'Alice', 1000);&lt;br&gt;
INSERT INTO Accounts VALUES (2, 'Bob', 1500);&lt;br&gt;
INSERT INTO Accounts 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%2F7rceeve9hks38ewk68f5.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%2F7rceeve9hks38ewk68f5.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;UPDATE Accounts&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%2Fat268x09787760wyfa7t.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%2Fat268x09787760wyfa7t.png" alt=" " width="670" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add 500 to Bob&lt;br&gt;
UPDATE Accounts&lt;br&gt;
SET balance = balance + 500&lt;br&gt;
WHERE name = 'Bob';&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Check balances&lt;/strong&gt;&lt;/p&gt;

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

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

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

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

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

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

&lt;p&gt;&lt;strong&gt;Continuing Session 2&lt;/strong&gt;&lt;br&gt;
Try updating Alice (held by Session 1)&lt;br&gt;
UPDATE Accounts SET balance = balance + 200 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%2Fn4eoc6s3elmtctz3y8tv.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%2Fn4eoc6s3elmtctz3y8tv.png" alt=" " width="800" height="461"&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%2Fv4xfzt45wo5zeysita9f.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%2Fv4xfzt45wo5zeysita9f.png" alt=" " width="800" height="452"&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%2F043jn9utxxx3t8iapxh7.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%2F043jn9utxxx3t8iapxh7.png" alt=" " width="800" height="465"&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 Accounts 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 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%2Fwial5e8xsjqs9emprjzk.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%2Fwial5e8xsjqs9emprjzk.png" alt=" " width="800" height="475"&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%2Fhp4zbv8at3jvxpmwz69s.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%2Fhp4zbv8at3jvxpmwz69s.png" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;conclusion&lt;/strong&gt;&lt;br&gt;
Transactions, deadlocks, and log-based recovery are the backbone of reliable and efficient database management. They work together to keep your data accurate, prevent system freezes, and recover smoothly from unexpected problems. By understanding these key concepts, you can appreciate how databases handle complex operations behind the scenes — ensuring your information is always safe and accessible.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>beginners</category>
      <category>database</category>
    </item>
    <item>
      <title>Cursor and Trigger in DBMS</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Sun, 05 Oct 2025 18:41:03 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/cursor-and-trigger-in-dbms-4fl3</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/cursor-and-trigger-in-dbms-4fl3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction to Cursors and Triggers in Databases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When working with databases, sometimes you need more control over how data is handled behind the scenes. That’s where cursors and triggers come in handy!&lt;/p&gt;

&lt;p&gt;A cursor lets you work with data row-by-row, giving you the ability to process or manipulate individual records one at a time — kind of like flipping through a book page by page.&lt;/p&gt;

&lt;p&gt;A trigger is like an automatic helper that responds to certain events in the database, such as when data is added, updated, or deleted. It acts immediately to enforce rules or perform tasks without you having to manually intervene.&lt;/p&gt;

&lt;p&gt;Together, cursors and triggers make databases smarter and more responsive, helping to manage complex operations smoothly and efficiently.&lt;/p&gt;

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

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

&lt;p&gt;CREATE TABLE Employee (&lt;br&gt;
Emp_ID NUMBER PRIMARY KEY,&lt;br&gt;
Emp_Name VARCHAR2(50),&lt;br&gt;
Salary NUMBER&lt;br&gt;
);&lt;/p&gt;

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

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

&lt;p&gt;INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (1, 'Cathy', 60000);&lt;br&gt;
INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (2, 'Faith', 45000);&lt;br&gt;
INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (3, 'Lee', 75000);&lt;br&gt;
INSERT INTO Employee (Emp_ID, Emp_Name, Salary) VALUES (4, 'Grace', 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%2F88v7bcapqjecvrebgmm2.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%2F88v7bcapqjecvrebgmm2.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;DECLARE&lt;br&gt;
CURSOR emp_cursor IS&lt;br&gt;
SELECT Emp_Name, Salary FROM Employee WHERE Salary &amp;gt; 50000;&lt;br&gt;
v_EmpName Employee.Emp_Name%TYPE;&lt;br&gt;
v_Salary Employee.Salary%TYPE;&lt;br&gt;
BEGIN&lt;br&gt;
OPEN emp_cursor;&lt;br&gt;
LOOP&lt;br&gt;
FETCH emp_cursor INTO v_EmpName, v_Salary;&lt;br&gt;
EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
DBMS_OUTPUT.PUT_LINE('Employee: ' || v_EmpName || ', Salary: ₹' || v_Salary);&lt;br&gt;
END LOOP;&lt;br&gt;
CLOSE emp_cursor;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;CREATE TABLE Studen_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%2F4gfmah2pcyu72rf4tf38.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%2F4gfmah2pcyu72rf4tf38.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;CREATE OR REPLACE TRIGGER trg_after_student_insert&lt;br&gt;
AFTER INSERT ON Students&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
INSERT INTO Studen_Audit (Student_ID, Student_Name, Action, Action_Time)&lt;br&gt;
VALUES (:NEW.Student_ID, :NEW.Student_Name, 'INSERT', SYSTIMESTAMP);&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Test Trigger&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (Student_ID, Student_Name, Course) VALUES (1, 'Cathy', 'Computer Science');&lt;br&gt;
INSERT INTO Students (Student_ID, Student_Name, Course) VALUES (2, 'Grace', '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%2Fdzs5bmlrs534tay8usm3.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%2Fdzs5bmlrs534tay8usm3.png" alt=" " width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

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

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

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in DBMS</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Sun, 05 Oct 2025 18:16:43 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/indexing-hashing-query-optimization-in-dbms-3818</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/indexing-hashing-query-optimization-in-dbms-3818</guid>
      <description>&lt;p&gt;&lt;strong&gt;INTRODUCTION&lt;/strong&gt;&lt;br&gt;
When working with databases, speed and efficiency matter a lot especially when you have tons of data. That’s where indexing, hashing, and query optimization come into play.&lt;/p&gt;

&lt;p&gt;Indexing is like the index in a book; it helps the database find information quickly without scanning every single record.&lt;/p&gt;

&lt;p&gt;Hashing is a smart way to organize data so you can jump straight to what you need using a unique key.&lt;/p&gt;

&lt;p&gt;And query optimization is the brainpower behind the scenes, figuring out the fastest way to get the data you asked for.&lt;/p&gt;

&lt;p&gt;Together, these techniques make databases faster and more efficient, saving time and resources whether you’re searching, sorting, or managing large amounts of data.&lt;/p&gt;

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

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
roll_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR2(50),&lt;br&gt;
dept VARCHAR2(20),&lt;br&gt;
cgpa NUMBER(3,2)&lt;br&gt;
);&lt;/p&gt;

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

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

&lt;p&gt;SELECT * FROM Students WHERE roll_no = 117;&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%2Fkmbgr8qb7aur2ajcy0ob.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%2Fkmbgr8qb7aur2ajcy0ob.png" alt=" " width="741" height="412"&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%2Fpd0rce1cb8zuvwye5m4t.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%2Fpd0rce1cb8zuvwye5m4t.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;SELECT * FROM Students WHERE cgpa &amp;gt; 8.0;&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Defined the Students table with columns roll_no, name, dept, and cgpa.&lt;br&gt;
Added 20 sample records into the table. Built a B-Tree index on roll_no to enable faster lookups. Created a B+ Tree index on cgpa to improve range query performance. Indexed the dept column to accelerate equality-based searches. Executed queries to test and confirm indexing benefits in performance.&lt;br&gt;
By using indexes, query execution becomes faster and more efficient. Indexing is a vital part of query optimization in DBMS.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Database Normalization</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Sun, 05 Oct 2025 17:48:08 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/database-normalization-571c</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/database-normalization-571c</guid>
      <description>&lt;h2&gt;
  
  
  INTRODUCTION
&lt;/h2&gt;

&lt;p&gt;Database normalization is like tidying up your data so everything is neat, organized, and easy to find. It’s a way of designing your database so that there’s no duplicate information, and everything is stored in the right place. This makes your database faster, easier to update, and less likely to run into problems later. Think of it as giving your data a clean, clutter-free home .It involves dividing a large, unstructured table into smaller, well-structured tables and establishing relationships between them using keys.&lt;/p&gt;

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

&lt;p&gt;Above is the initial unnormalized table includes details of students, their courses, instructors, and corresponding grades.&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Deletion anomaly&lt;/strong&gt;:&lt;br&gt;
 Removing a student may also remove valuable course details if that student was the only person who enrolled.&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%2Fhp4urahn670jalai0u2x.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%2Fhp4urahn670jalai0u2x.png" alt=" " width="633" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;_First Normal Form (1NF) rules:&lt;br&gt;
_&lt;br&gt;
Every column should hold atomic (indivisible) values.&lt;br&gt;
Each record must be unique.&lt;/p&gt;

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

&lt;p&gt;Divided multivalued attributes into individual rows.&lt;br&gt;
Ensured that each column stores only one value.&lt;/p&gt;

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

&lt;p&gt;CREATE TABLE Students_1NF (&lt;br&gt;
Student_ID INT,&lt;br&gt;
Student_Name VARCHAR2(100),&lt;br&gt;
Course_ID INT,&lt;br&gt;
Course_Name VARCHAR2(100),&lt;br&gt;
Instructor VARCHAR2(100),&lt;br&gt;
Grade CHAR(2),&lt;br&gt;
PRIMARY KEY (Student_ID, Course_ID)&lt;br&gt;
);&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Observations:&lt;/strong&gt;&lt;br&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 Students1 (&lt;br&gt;
StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
StudentName VARCHAR2(100)&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%2Fhj3otiy2aery2f7g4sfw.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%2Fhj3otiy2aery2f7g4sfw.png" alt=" " width="551" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;CREATE TABLE Enrollments1 (&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 Students1(StudentID),&lt;br&gt;
FOREIGN KEY (CourseID) REFERENCES Courses1(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%2Fo087vu5ncnyq3mino8s0.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%2Fo087vu5ncnyq3mino8s0.png" alt=" " width="593" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;Instructor’s phone depends on Instructor, not Course_ID → we can split Courses into:&lt;br&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;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewuulfx4xd4fujfsoo1n.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%2Fewuulfx4xd4fujfsoo1n.png" alt=" " width="587" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses13NF (&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 Instructors(InstructorID)&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%2Fa07aoc3hw84di20fn1t4.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%2Fa07aoc3hw84di20fn1t4.png" alt=" " width="665" height="568"&gt;&lt;/a&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;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mpg9dllzamxxhn89vvq.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%2F9mpg9dllzamxxhn89vvq.png" alt=" " width="673" height="530"&gt;&lt;/a&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%2Ffarh2jwryn8jv4vz35q9.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%2Ffarh2jwryn8jv4vz35q9.png" alt=" " width="800" height="511"&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. Kay', '9876543210');&lt;br&gt;
INSERT INTO Instructor VALUES ('I02', 'Dr. Mia', '9123456780');&lt;br&gt;
INSERT INTO Instructor VALUES ('I03', 'Dr. Ray', '9988776655');&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%2F6oap2wpsjrzp2c6lkoyf.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%2F6oap2wpsjrzp2c6lkoyf.png" alt=" " width="650" height="520"&gt;&lt;/a&gt;&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;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0frso5w1avc2mi6c5gyf.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%2F0frso5w1avc2mi6c5gyf.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&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;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F921srn10gtedpx3ca9d0.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%2F921srn10gtedpx3ca9d0.png" alt=" " width="800" height="467"&gt;&lt;/a&gt;&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%2Fbar7yedcjithewbrxd0e.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%2Fbar7yedcjithewbrxd0e.png" alt=" " width="800" height="504"&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 &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%2Fxvb7b5pbj1skv5cundbn.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%2Fxvb7b5pbj1skv5cundbn.png" alt=" " width="667" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Normalization helps achieve reduced data redundancy, improved data integrity simplified maintenance and updates .Following the progression from 1NF → 2NF → 3NF in Oracle SQL enables the creation of efficient designs.&lt;/p&gt;

</description>
      <category>database</category>
      <category>computerscience</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Simple College Student Schema</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Sun, 05 Oct 2025 16:49:40 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/simple-college-student-schema-3egi</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/simple-college-student-schema-3egi</guid>
      <description>&lt;h2&gt;
  
  
  INTRODUCTION
&lt;/h2&gt;

&lt;p&gt;When it comes to building modern ,high performance applications MongoDB is one of the most popular NoSQL databases used by developers today for it is developer friendly, 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, we will walk 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;h2&gt;
  
  
  OUTCOME:
&lt;/h2&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;Setup: Creating a Cluster&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%2F2bac4jx716z6losk2o4i.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%2F2bac4jx716z6losk2o4i.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Create (Insert):-
&lt;/h2&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;h2&gt;
  
  
  Code:-
&lt;/h2&gt;

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

&lt;p&gt;{&lt;br&gt;
student_id: "S002",&lt;br&gt;
name: "Lee",&lt;br&gt;
age: 20,&lt;br&gt;
department: "Chemical",&lt;br&gt;
year: 3,&lt;br&gt;
cgpa: 8.5&lt;br&gt;
}&lt;/p&gt;

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

&lt;p&gt;student_id: "S003",&lt;br&gt;
name: "Faith",&lt;br&gt;
age: 20,&lt;br&gt;
department: "CSBS",&lt;br&gt;
year: 2,&lt;br&gt;
cgpa: 7&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S004",&lt;br&gt;
name: "Shalom",&lt;br&gt;
age: 19,&lt;br&gt;
department: "Mechatronics",&lt;br&gt;
year: 2,&lt;br&gt;
cgpa: 7.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%2Fjb06wlsxfpekf664f3lf.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%2Fjb06wlsxfpekf664f3lf.png" alt=" " width="800" height="236"&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%2F932d33sh4gy5a5d55eg0.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%2F932d33sh4gy5a5d55eg0.png" alt=" " width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S005",&lt;br&gt;
name: "Grace",&lt;br&gt;
age: 22,&lt;br&gt;
department: "CSE",&lt;br&gt;
year: 2,&lt;br&gt;
cgpa: 9.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%2Fr9o27kaquzxql02b8u4l.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%2Fr9o27kaquzxql02b8u4l.png" alt=" " width="800" height="298"&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%2Ffcys5e2zw0qos823m15j.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%2Ffcys5e2zw0qos823m15j.png" alt=" " width="800" height="333"&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%2Furwa62mt03rerbtmn08c.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%2Furwa62mt03rerbtmn08c.png" alt=" " width="800" height="318"&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%2Fxrgq83ardwut64lgtfon.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%2Fxrgq83ardwut64lgtfon.png" alt=" " width="800" height="289"&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","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%2Fo5nwi88z1svi646iz9g8.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%2Fo5nwi88z1svi646iz9g8.png" alt=" " width="800" height="327"&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%2Fbyaiph36q9e7mg6cx5k5.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%2Fbyaiph36q9e7mg6cx5k5.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;{ "student_id": "S005" }&lt;/p&gt;

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

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

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

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System</title>
      <dc:creator>MBEWE CATHERINE 24CB068</dc:creator>
      <pubDate>Mon, 25 Aug 2025 16:38:33 +0000</pubDate>
      <link>https://dev.to/mbewe_catherine24cb068_6/college-student-course-management-system-31hm</link>
      <guid>https://dev.to/mbewe_catherine24cb068_6/college-student-course-management-system-31hm</guid>
      <description>&lt;h2&gt;
  
  
  INTRODUCTION
&lt;/h2&gt;

&lt;p&gt;Hi everyone&lt;/p&gt;

&lt;p&gt;I’m a college student currently learning about databases, and I recently worked on an assignment where I had to build a Student &amp;amp; Course Management System using SQL. It was a great hands-on way to practice what i have been learning in class like creating tables, inserting data, using joins, writing queries, and even building stored procedures.&lt;/p&gt;

&lt;p&gt;In this blog post, I will  walk you through everything I did step by step. If you're also learning SQL or working on a similar project, I hope this helps you understand the concepts more clearly.&lt;/p&gt;

&lt;p&gt;📘 Assignment Objective&lt;/p&gt;

&lt;p&gt;Design and create tables for Students, Courses, Enrollments, and Faculty&lt;/p&gt;

&lt;p&gt;Use DDL, DML, constraints, joins, views, and a stored procedure&lt;/p&gt;

&lt;p&gt;Demonstrate data manipulation, querying, and basic database programming&lt;/p&gt;

&lt;p&gt;While applying what we learned in class to build a real world style database schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating the Core Tables&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I started by creating the base tables:&lt;/p&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;Insight: Creating relationships between tables helped me understand the concept of foreign keys and how they maintain referential integrity.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inserting Sample Data&lt;/strong&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email) VALUES 
(1, 'CATHERINE', 'Computer Science', TO_DATE('2001-05-15', 'YYYY-MM-DD'), '&lt;a href="mailto:cathy@example.com"&gt;cathy@example.com&lt;/a&gt;');&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email) VALUES &lt;br&gt;
(2, 'FAITH', 'Mechanical Engineering', TO_DATE('2000-08-22', 'YYYY-MM-DD'), '&lt;a href="mailto:fay@example.com"&gt;fay@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email) VALUES &lt;br&gt;
(3, 'Charlie Brown', 'Physics', TO_DATE('2002-01-10', 'YYYY-MM-DD'), '&lt;a href="mailto:charlie@example.com"&gt;charlie@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;Insight: Practicing DML helped me get more comfortable with date formats and inserting accurate test data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Altering the Table&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Students &lt;br&gt;
ADD PhoneNo NUMBER(10);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining Constraints&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Courses &lt;br&gt;
MODIFY Credits NUMBER(2) CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Insight: Adding constraints felt like writing rules into the database. It prevents errors before they happen.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Using SQL Functions&lt;/strong&gt;
SELECT 
UPPER(Name) AS UpperCaseName,
LENGTH(Email) AS EmailLength
FROM Students;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;6.&lt;strong&gt;Aggregate Functions&lt;/strong&gt;&lt;br&gt;
SELECT AVG(Credits) AS AvgCredits FROM Courses;&lt;br&gt;
SELECT COUNT(DISTINCT StudentID) AS TotalStudentsEnrolled FROM Enrollments;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JOIN Operation&lt;/strong&gt;
SELECT 
S.Name AS StudentName,
C.CourseName,
E.Grade
FROM Students S
JOIN Enrollments E ON S.StudentID = E.StudentID
JOIN Courses C ON C.CourseID = E.CourseID;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Insight: This was the "aha!" moment where everything connected. I saw how normalized tables work together through joins.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GROUP BY with HAVING&lt;/strong&gt;
SELECT 
Dept,
COUNT(&lt;em&gt;) AS StudentCount
FROM Students
GROUP BY Dept
HAVING COUNT(&lt;/em&gt;) &amp;gt; 2;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;9.&lt;strong&gt;Creating a View&lt;/strong&gt;&lt;br&gt;
CREATE VIEW StudentCoursesView AS&lt;br&gt;
SELECT &lt;br&gt;
    S.Name AS StudentName,&lt;br&gt;
    C.CourseName,&lt;br&gt;
    E.Grade&lt;br&gt;
FROM Students S&lt;br&gt;
JOIN Enrollments E ON S.StudentID = E.StudentID&lt;br&gt;
JOIN Courses C ON C.CourseID = E.CourseID;&lt;/p&gt;

&lt;p&gt;Insight: Views make it easy to create simplified representations of complex joins. Perfect for reporting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stored Procedure to Update Grades&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 AND CourseID = p_CourseID;&lt;/p&gt;

&lt;p&gt;COMMIT;&lt;br&gt;
END;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Insight: Writing procedures was new for me. I learned how SQL can include some logic — not just data manipulation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;what i learnt&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;How normalization and foreign keys maintain database integrity&lt;/p&gt;

&lt;p&gt;Importance of constraints for data validation&lt;/p&gt;

&lt;p&gt;Power of joins and how they reflect real-world relationships&lt;/p&gt;

&lt;p&gt;Views and procedures make data handling cleaner and more reusable&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a student, doing this assignment really helped me understand SQL beyond just the syntax. I got to apply it to a mini real-world use case, and it made concepts like joins, constraints, and stored procedures click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o21c6ccw6upldmor5gyq.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h000f0769n7damcxy0rk.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/owu0zvnjcqttajafhgc4.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ur9xnei89n2xjwboj4lk.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hi13ucfacb2dzuawjn5w.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rymik4hmgsmsfgsd3skm.png" rel="noopener noreferrer"&gt;image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cti29osff11oouwox81f.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vjn15u6yeq94yt1zym8t.png" rel="noopener noreferrer"&gt;Image&lt;/a&gt;&lt;/p&gt;

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