<?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: SASHMITHA G 24CB054</title>
    <description>The latest articles on Forem by SASHMITHA G 24CB054 (@sashmitha_g24cb054_f8624).</description>
    <link>https://forem.com/sashmitha_g24cb054_f8624</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%2F3450493%2F2b3a0597-e18b-4581-bc5a-24a2f159ff24.png</url>
      <title>Forem: SASHMITHA G 24CB054</title>
      <link>https://forem.com/sashmitha_g24cb054_f8624</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sashmitha_g24cb054_f8624"/>
    <language>en</language>
    <item>
      <title>Hands-On MongoDB CRUD Operations with a College Student Schema</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Sat, 04 Oct 2025 10:19:01 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/hands-on-mongodb-crud-operations-with-a-college-student-schema-3onj</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/hands-on-mongodb-crud-operations-with-a-college-student-schema-3onj</guid>
      <description>&lt;p&gt;MongoDB is a powerful NoSQL database that allows flexible storage of JSON-like documents. In this blog, we’ll explore CRUD operations — Create, Read, Update, and Delete — using a simple college students collection.&lt;/p&gt;

&lt;p&gt;🧱 Step 1: Create (Insert)&lt;/p&gt;

&lt;p&gt;We start by inserting student records into the students collection. Each document follows this structure:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "student_id": "S001",&lt;br&gt;
  "name": "Soniya",&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;Insert five students:&lt;/p&gt;

&lt;p&gt;db.students.insertMany([&lt;br&gt;
  { "student_id": "S001", "name": "Soniya", "age": 20, "department": "CSBS", "year": 2, "cgpa": 9 },&lt;br&gt;
  { "student_id": "S002", "name": "Isha", "age": 21, "department": "CSE", "year": 3, "cgpa": 8.5 },&lt;br&gt;
  { "student_id": "S003", "name": "Sashmi", "age": 22, "department": "ECE", "year": 4, "cgpa": 7.2 },&lt;br&gt;
  { "student_id": "S004", "name": "Priya", "age": 19, "department": "CSBS", "year": 1, "cgpa": 9.3 },&lt;br&gt;
  { "student_id": "S005", "name": "Alice", "age": 20, "department": "Mechanical", "year": 2, "cgpa": 6.8 }&lt;br&gt;
]);&lt;/p&gt;

&lt;p&gt;🔍 Step 2: Read (Query)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Display all student records:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;db.students.find().pretty();&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find students with CGPA &amp;gt; 8:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;db.students.find({ cgpa: { $gt: 8 } }).pretty();&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find students from the Computer Science department (CSBS):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;db.students.find({ department: "CSBS" }).pretty();&lt;/p&gt;

&lt;p&gt;✏ Step 3: Update&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update CGPA of a specific student (e.g., student_id = "S002"):&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Increase the year of study for all 3rd year students by 1:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;db.students.updateMany(&lt;br&gt;
  { year: 3 },&lt;br&gt;
  { $inc: { year: 1 } }&lt;br&gt;
);&lt;/p&gt;




&lt;p&gt;🗑 Step 4: Delete&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Delete a student by student_id (e.g., "S005"):&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Delete all students with CGPA &amp;lt; 7.5:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;db.students.deleteMany({ cgpa: { $lt: 7.5 } });&lt;/p&gt;




&lt;p&gt;🧠 Key Takeaways&lt;/p&gt;

&lt;p&gt;Create: Insert documents using insertOne or insertMany.&lt;/p&gt;

&lt;p&gt;Read: Use find with filters to query documents.&lt;/p&gt;

&lt;p&gt;Update: Modify single or multiple documents using updateOne/updateMany.&lt;/p&gt;

&lt;p&gt;Delete: Remove documents with deleteOne or deleteMany.&lt;/p&gt;

&lt;p&gt;MongoDB makes CRUD operations intuitive and flexible, especially for JSON-like data structures, making it perfect for applications like student management systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvj8vrmdq333mb5uztrl.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%2Fnvj8vrmdq333mb5uztrl.jpg" alt=" " width="800" height="346"&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%2F5mso5f9k9nve1qbfvw32.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%2F5mso5f9k9nve1qbfvw32.jpg" alt=" " width="800" height="345"&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%2F3bvny47eisr51zc8mgs9.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%2F3bvny47eisr51zc8mgs9.jpg" alt=" " width="800" height="355"&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%2Fawj7d1hy85rhu60c0slu.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%2Fawj7d1hy85rhu60c0slu.jpg" alt=" " width="800" height="361"&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%2Fglrwxfi7a81d4evr6yv8.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%2Fglrwxfi7a81d4evr6yv8.jpg" alt=" " width="800" height="355"&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%2Ft3c980excmuerqusi9q7.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%2Ft3c980excmuerqusi9q7.jpg" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding me..&lt;/p&gt;

&lt;h1&gt;
  
  
  MongoDB #NoSQL #CRUD #DatabaseLearning #DataEngineering #DevCommunity
&lt;/h1&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>mongodb</category>
      <category>beginners</category>
    </item>
    <item>
      <title>SQL Indexing, Hashing &amp; Query Optimization with a Students Table</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Sat, 04 Oct 2025 09:48:16 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/sql-indexing-hashing-query-optimization-with-a-students-table-30a0</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/sql-indexing-hashing-query-optimization-with-a-students-table-30a0</guid>
      <description>&lt;p&gt;Indexes are one of the most powerful tools in SQL databases for improving query performance. In this blog, we’ll explore B-Tree Index, B+ Tree Index, and Hash Index using a simple Students table in Oracle LiveSQL.&lt;/p&gt;




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

&lt;p&gt;We start by creating a table Students with fields for roll number, name, department, and CGPA.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
    ROLL_NO NUMBER 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;💡 Step 2: Insert Sample Records&lt;/p&gt;

&lt;p&gt;Let’s insert 20 sample students across various departments with different CGPAs.&lt;/p&gt;

&lt;p&gt;INSERT INTO Students VALUES (101, 'Alice', 'CSBS', 8.5);&lt;br&gt;
INSERT INTO Students VALUES (102, 'Bob', 'ECE', 7.9);&lt;br&gt;
INSERT INTO Students VALUES (103, 'Charlie', 'MECH', 8.2);&lt;br&gt;
INSERT INTO Students VALUES (104, 'David', 'CIVIL', 7.0);&lt;br&gt;
INSERT INTO Students VALUES (105, 'Eva', 'CSBS', 9.0);&lt;br&gt;
INSERT INTO Students VALUES (106, 'Frank', 'EEE', 6.8);&lt;br&gt;
INSERT INTO Students VALUES (107, 'Grace', 'ECE', 8.3);&lt;br&gt;
INSERT INTO Students VALUES (108, 'Hank', 'MECH', 7.2);&lt;br&gt;
INSERT INTO Students VALUES (109, 'Ivy', 'CIVIL', 8.1);&lt;br&gt;
INSERT INTO Students VALUES (110, 'Jack', 'CSBS', 9.0);&lt;br&gt;
INSERT INTO Students VALUES (111, 'Kim', 'EEE', 7.5);&lt;br&gt;
INSERT INTO Students VALUES (112, 'Leo', 'CSBS', 9.2);&lt;br&gt;
INSERT INTO Students VALUES (113, 'Mia', 'MECH', 6.9);&lt;br&gt;
INSERT INTO Students VALUES (114, 'Nina', 'ECE', 8.7);&lt;br&gt;
INSERT INTO Students VALUES (115, 'Oscar', 'CSBS', 9.4);&lt;br&gt;
INSERT INTO Students VALUES (116, 'Paul', 'EEE', 7.8);&lt;br&gt;
INSERT INTO Students VALUES (117, 'Quinn', 'MECH', 8.0);&lt;br&gt;
INSERT INTO Students VALUES (118, 'Rose', 'CIVIL', 7.3);&lt;br&gt;
INSERT INTO Students VALUES (119, 'Sam', 'ECE', 8.8);&lt;br&gt;
INSERT INTO Students VALUES (120, 'Tina', 'CSBS', 9.1);&lt;/p&gt;




&lt;p&gt;⚡ Step 3: Create a B-Tree Index&lt;/p&gt;

&lt;p&gt;B-Tree indexes are efficient for point queries and range queries.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_rollno_btree ON Students(ROLL_NO);&lt;/p&gt;

&lt;p&gt;-- Fetch a student with a specific roll number&lt;br&gt;
SELECT * FROM Students WHERE ROLL_NO = 110;&lt;/p&gt;

&lt;p&gt;✅ Output: Jack, CSBS, 9.0&lt;br&gt;
The B-Tree index ensures this query runs efficiently without scanning the entire table.&lt;/p&gt;




&lt;p&gt;⚡ Step 4: Create a B+ Tree Index on CGPA&lt;/p&gt;

&lt;p&gt;B+ Tree indexes are ideal for range queries.&lt;/p&gt;

&lt;p&gt;-- Example: fetch students with CGPA &amp;gt; 8.0&lt;br&gt;
SELECT * FROM Students WHERE CGPA &amp;gt; 8.0;&lt;/p&gt;

&lt;p&gt;This allows the database to quickly locate all students satisfying the CGPA condition.&lt;/p&gt;




&lt;p&gt;⚡ Step 5: Create a Hash Index on Department&lt;/p&gt;

&lt;p&gt;Hash indexes are perfect for exact match lookups.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_dept_hash ON Students(DEPT);&lt;/p&gt;

&lt;p&gt;-- Fetch all students from the CSBS department&lt;br&gt;
SELECT * FROM Students WHERE DEPT = 'CSBS';&lt;/p&gt;

&lt;p&gt;✅ Result: All CSBS students are returned efficiently, leveraging the hash index.&lt;/p&gt;




&lt;p&gt;🧠 Key Takeaways&lt;/p&gt;

&lt;p&gt;B-Tree Index: Fast for exact lookups and sorted range queries.&lt;/p&gt;

&lt;p&gt;B+ Tree Index: Optimized for range scans; all values stored at leaf nodes.&lt;/p&gt;

&lt;p&gt;Hash Index: Excellent for equality comparisons (e.g., department = 'CSBS').&lt;/p&gt;

&lt;p&gt;Proper indexing dramatically improves query performance, especially with large datasets.&lt;/p&gt;




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

&lt;p&gt;Understanding and using indexes effectively is crucial for query optimization. By combining B-Tree, B+ Tree, and Hash indexes, you can make your database queries faster and more efficient — a key skill for any data engineer or developer.&lt;/p&gt;

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

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62kugraga0vastxj8dza.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%2F62kugraga0vastxj8dza.jpg" alt=" " width="800" height="375"&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%2Fj80pm5g3w2mkcid4e0uc.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%2Fj80pm5g3w2mkcid4e0uc.jpg" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;
Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding and supporting me..&lt;/p&gt;

&lt;h1&gt;
  
  
  SQL #Database #Indexing #QueryOptimization #BTree #HashIndex #DataEngineering #DevCommunity
&lt;/h1&gt;




</description>
      <category>oracle</category>
      <category>database</category>
      <category>performance</category>
      <category>sql</category>
    </item>
    <item>
      <title>Exploring SQL Transactions, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Sat, 04 Oct 2025 09:26:29 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/exploring-sql-transactions-deadlocks-log-based-recovery-2l77</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/exploring-sql-transactions-deadlocks-log-based-recovery-2l77</guid>
      <description>&lt;p&gt;Databases are designed to be reliable and consistent even in complex operations. Understanding transactions, deadlocks, and log-based recovery is key to mastering database management.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore these concepts using a simple Accounts table.&lt;/p&gt;




&lt;p&gt;🧱 Step 1: Create the Accounts Table&lt;/p&gt;

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

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

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

&lt;p&gt;✅ Output:&lt;/p&gt;

&lt;p&gt;acc_no  name    balance&lt;/p&gt;

&lt;p&gt;1   Alice   1000&lt;br&gt;
2   Bob 1500&lt;br&gt;
3   Charlie 2000&lt;/p&gt;




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

&lt;p&gt;Atomicity ensures that a transaction is treated as a single unit — either fully executed or not executed at all.&lt;/p&gt;

&lt;p&gt;Let’s simulate a money transfer from Alice to Bob and roll it back before committing.&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Transfer 500 from Alice to Bob&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;/p&gt;

&lt;p&gt;-- Cancel the transaction&lt;br&gt;
ROLLBACK;&lt;/p&gt;

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

&lt;p&gt;✅ After rollback, balances remain unchanged, confirming no partial update occurs.&lt;/p&gt;




&lt;p&gt;2️⃣ Deadlock Simulation&lt;/p&gt;

&lt;p&gt;Deadlocks happen when two transactions wait indefinitely for each other’s locks.&lt;/p&gt;

&lt;p&gt;Simulate using two sessions:&lt;/p&gt;

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

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 100 WHERE acc_no = 1; -- Locks Alice&lt;br&gt;
-- Try to update Bob&lt;br&gt;
UPDATE Accounts SET balance = balance - 100 WHERE acc_no = 2;&lt;/p&gt;

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

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 200 WHERE acc_no = 2; -- Locks Bob&lt;br&gt;
-- Try to update Alice&lt;br&gt;
UPDATE Accounts SET balance = balance - 200 WHERE acc_no = 1;&lt;/p&gt;

&lt;p&gt;⏳ Both sessions wait on each other — a deadlock occurs.&lt;br&gt;
Most DBMS detect this and abort one transaction automatically.&lt;/p&gt;




&lt;p&gt;3️⃣ Log-Based Recovery&lt;/p&gt;

&lt;p&gt;Databases maintain logs (binary log in MySQL, WAL in PostgreSQL) to recover from crashes.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;/p&gt;

&lt;p&gt;UPDATE Accounts SET balance = balance + 300 WHERE acc_no = 3;&lt;/p&gt;

&lt;p&gt;-- Rollback instead of commit&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ The rollback is recorded in the log. If the database crashes, the system can undo uncommitted changes and restore consistency.
&lt;/h2&gt;

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

&lt;p&gt;Understanding transactions, deadlocks, and recovery mechanisms is crucial for building robust and reliable database applications.&lt;/p&gt;

&lt;p&gt;Experimenting with these SQL operations gives hands-on insight into how real-world DBMS maintain data integrity and availability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumhvcanlwhbh073udttu.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%2Fumhvcanlwhbh073udttu.jpg" alt=" " width="800" height="526"&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%2Ftzu726ce0sqpiw1pxwat.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%2Ftzu726ce0sqpiw1pxwat.jpg" alt=" " width="800" height="471"&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%2Fmqyupvapnjqeh4jui2m4.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%2Fmqyupvapnjqeh4jui2m4.jpg" alt=" " width="800" height="296"&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%2Fk5s4xhrz57872jhson7i.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%2Fk5s4xhrz57872jhson7i.jpg" alt=" " width="800" height="332"&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%2Fu8zxa6vu5tc7v7m150sj.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%2Fu8zxa6vu5tc7v7m150sj.jpg" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;br&gt;
Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding me..&lt;/p&gt;

&lt;h1&gt;
  
  
  SQL #Database #Transactions #Deadlocks #Recovery #DevCommunity #LearningByDoing
&lt;/h1&gt;

</description>
      <category>computerscience</category>
      <category>database</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>Exploring ACID Properties in SQL with Practical Queries</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Sat, 04 Oct 2025 09:03:43 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/exploring-acid-properties-in-sql-with-practical-queries-1oeg</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/exploring-acid-properties-in-sql-with-practical-queries-1oeg</guid>
      <description>&lt;p&gt;Databases are designed to ensure that data remains accurate, reliable, and consistent even in the face of failures.&lt;br&gt;
This reliability comes from the ACID properties — Atomicity, Consistency, Isolation, and Durability.&lt;/p&gt;

&lt;p&gt;In this blog, let’s understand each property using a simple example: a bank Accounts table.&lt;/p&gt;




&lt;p&gt;🧱 Step 1: Create the Accounts Table&lt;/p&gt;

&lt;p&gt;We’ll begin by creating a table with three columns — account number, name, and balance.&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) -- prevents negative balance&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;The CHECK constraint ensures that no record can have a negative balance — maintaining data consistency.&lt;/p&gt;




&lt;p&gt;💡 Step 2: Insert Sample Records&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;SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;✅ Output:&lt;/p&gt;

&lt;p&gt;acc_no  name    balance&lt;/p&gt;

&lt;p&gt;1   Alice   1000&lt;br&gt;
2   Bob 1500&lt;br&gt;
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%2Frrrsg9gcprz7s13xdj33.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%2Frrrsg9gcprz7s13xdj33.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;⚙ Step 3: Atomicity&lt;/p&gt;

&lt;p&gt;Atomicity ensures that a transaction is treated as a single unit — either all changes happen, or none do.&lt;/p&gt;

&lt;p&gt;Let’s simulate a money transfer between two accounts, then roll it back to ensure no partial changes occur.&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;/p&gt;

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

&lt;p&gt;-- Cancel the transaction&lt;br&gt;
ROLLBACK;&lt;/p&gt;

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

&lt;p&gt;✅ After rollback, both balances return to their original state.&lt;br&gt;
That’s Atomicity in action — preventing partial updates.&lt;/p&gt;




&lt;p&gt;🧭 Step 4: Consistency&lt;/p&gt;

&lt;p&gt;Now, let’s check if our table enforces consistency by rejecting invalid data.&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts VALUES (104, 'David', -2000);&lt;/p&gt;

&lt;p&gt;❌ This statement will fail because of the CHECK (balance &amp;gt;= 0) constraint.&lt;/p&gt;

&lt;p&gt;This demonstrates Consistency, ensuring that all data adheres to predefined rules.&lt;/p&gt;




&lt;p&gt;⚔ Step 5: Isolation&lt;/p&gt;

&lt;p&gt;Isolation ensures that concurrent transactions don’t interfere with each other.&lt;/p&gt;

&lt;p&gt;Try this in two different sessions:&lt;/p&gt;

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

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 3;&lt;br&gt;
-- Keep this transaction open&lt;/p&gt;

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

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

&lt;p&gt;Depending on your isolation level (e.g., READ COMMITTED, REPEATABLE READ), Session 2 may or may not see the uncommitted change.&lt;br&gt;
That’s how Isolation controls visibility between transactions.&lt;/p&gt;




&lt;p&gt;🔒 Step 6: Durability&lt;/p&gt;

&lt;p&gt;Once a transaction is committed, its changes are permanent — even if the system crashes.&lt;/p&gt;

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

&lt;p&gt;SELECT acc_no, name, balance FROM Accounts WHERE acc_no = 3;&lt;/p&gt;

&lt;p&gt;✅ After restarting your database, the updated balance for Charlie remains.&lt;br&gt;
That’s Durability — ensuring committed data is never lost.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnimr4dacsxplqjucy6u.jpg" alt=" " width="800" height="363"&gt;
&lt;/h2&gt;

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

&lt;p&gt;ACID properties form the foundation of reliable database systems.&lt;br&gt;
By experimenting with simple SQL transactions, you can clearly see how Atomicity, Consistency, Isolation, and Durability maintain data integrity — even in complex systems.&lt;br&gt;
Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding me.&lt;/p&gt;

&lt;h1&gt;
  
  
  SQL #Database #ACID #Transactions #LearningByDoing #DevCommunity
&lt;/h1&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>SQL Cursor and Trigger Implementation</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Sat, 04 Oct 2025 08:33:45 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/sql-cursor-and-trigger-implementation-49a7</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/sql-cursor-and-trigger-implementation-49a7</guid>
      <description>&lt;p&gt;In this post, we’ll explore two key SQL programming concepts:&lt;br&gt;
1️⃣ Cursor with condition and 2️⃣ AFTER INSERT Trigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Both examples are implemented in Oracle Live SQL.
&lt;/h2&gt;

&lt;p&gt;🌀 1️⃣ Cursor: Display Employees with Salary Greater than 50,000&lt;/p&gt;

&lt;p&gt;A cursor is used to process each record returned by a query, one row at a time.&lt;/p&gt;

&lt;p&gt;✅ Step 1: Create a Cursor&lt;/p&gt;

&lt;p&gt;DECLARE&lt;br&gt;
    CURSOR emp_cursor IS&lt;br&gt;
        SELECT EmpName, Salary &lt;br&gt;
        FROM Employee &lt;br&gt;
        WHERE Salary &amp;gt; 50000;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;emp_record emp_cursor%ROWTYPE;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;BEGIN&lt;br&gt;
    OPEN emp_cursor;&lt;br&gt;
    LOOP&lt;br&gt;
        FETCH emp_cursor INTO emp_record;&lt;br&gt;
        EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
        DBMS_OUTPUT.PUT_LINE('Employee: ' || emp_record.EmpName || &lt;br&gt;
                             ', Salary: ' || emp_record.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;🧠 Explanation:&lt;/p&gt;

&lt;p&gt;CURSOR emp_cursor IS → Defines the SQL query.&lt;/p&gt;

&lt;p&gt;emp_record emp_cursor%ROWTYPE → Declares a record to store fetched rows.&lt;/p&gt;

&lt;p&gt;OPEN, FETCH, CLOSE → Manage cursor operations.&lt;/p&gt;

&lt;p&gt;DBMS_OUTPUT.PUT_LINE → Displays each result.&lt;/p&gt;

&lt;p&gt;🖥 Output:&lt;/p&gt;

&lt;p&gt;Employee: Arjun, Salary: 60000&lt;br&gt;
Employee: Kiran, Salary: 80000&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxt0e9qr8fhcvyzi1351.jpg" alt=" " width="800" height="367"&gt;
&lt;/h2&gt;

&lt;p&gt;⚡ 2️⃣ AFTER INSERT Trigger — Student Registration Audit&lt;/p&gt;

&lt;p&gt;A trigger automatically performs an action when a specified database event occurs.&lt;/p&gt;

&lt;p&gt;✅ Step 2: Create AFTER INSERT Trigger&lt;/p&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, StudentName)&lt;br&gt;
    VALUES (:NEW.StudentID, :NEW.StudentName);&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

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

&lt;p&gt;AFTER INSERT ON Students → Trigger runs after a new record is inserted.&lt;/p&gt;

&lt;p&gt;:NEW → Refers to the new row being added.&lt;/p&gt;

&lt;p&gt;Student_Audit Table → Logs inserted student records automatically.&lt;/p&gt;

&lt;p&gt;✅ Step 3: Test the Trigger&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, StudentName)&lt;br&gt;
VALUES ('S01', 'Arjun');&lt;/p&gt;

&lt;p&gt;🖥 Output:&lt;/p&gt;

&lt;p&gt;Trigger TRG_STUDENT_INSERT compiled&lt;br&gt;
1 row inserted&lt;/p&gt;

&lt;p&gt;And a new log entry will appear in the Student_Audit table 🎯&lt;/p&gt;

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

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivv6hdd81e9zio1nukaq.jpg" alt=" " width="800" height="397"&gt;
&lt;/h2&gt;

&lt;p&gt;🏁 Summary&lt;/p&gt;

&lt;p&gt;Feature Description Example&lt;/p&gt;

&lt;p&gt;Cursor  Used for row-by-row processing  Displays employees earning &amp;gt; ₹50,000&lt;br&gt;
Trigger Executes automatically after table events   Logs new student registrations&lt;/p&gt;




&lt;p&gt;💡 Conclusion&lt;/p&gt;

&lt;p&gt;Cursors and Triggers are essential for database automation and record handling.&lt;br&gt;
By using them effectively, you can make your SQL programs more powerful, reliable, and dynamic! 🚀&lt;br&gt;
Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding and supporting me..&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>Understanding 1NF, 2NF, and 3NF in DBMS with SQL Examples</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Sat, 04 Oct 2025 08:00:49 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/understanding-1nf-2nf-and-3nf-in-dbms-with-sql-examples-5edd</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/understanding-1nf-2nf-and-3nf-in-dbms-with-sql-examples-5edd</guid>
      <description>&lt;p&gt;When designing databases, normalization is essential to remove redundancy and anomalies (insertion, update, deletion). In this post, we’ll take a sample base table, identify anomalies, and step-by-step normalize it into 1NF, 2NF, and 3NF using SQL CREATE TABLE statements.&lt;/p&gt;

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

&lt;p&gt;Let’s assume a base table with student-course-instructor details:&lt;/p&gt;

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

&lt;p&gt;🚨 Anomalies in this table&lt;/p&gt;

&lt;p&gt;Insertion anomaly: Cannot add a new course until a student enrolls.&lt;/p&gt;

&lt;p&gt;Update anomaly: If instructor’s email changes, must update multiple rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deletion anomaly: Deleting the last student in a course removes course and instructor details too.
&lt;/h2&gt;

&lt;p&gt;✅ Step 1: Convert to 1NF (First Normal Form)&lt;/p&gt;

&lt;p&gt;➡ Eliminate repeating groups and ensure atomic values.&lt;/p&gt;

&lt;p&gt;CREATE TABLE StudentCourses_1NF (&lt;br&gt;
    StudentID INT,&lt;br&gt;
    StudentName VARCHAR(100),&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    CourseName VARCHAR(100),&lt;br&gt;
    Instructor VARCHAR(100),&lt;br&gt;
    InstructorEmail VARCHAR(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%2Fru8xgqofgbak9ew6ahi8.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%2Fru8xgqofgbak9ew6ahi8.jpg" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;✅ Step 2: Convert to 2NF (Second Normal Form)&lt;/p&gt;

&lt;p&gt;➡ Remove partial dependency (attributes depending only on part of composite key).&lt;br&gt;
We separate Students, Courses, and Enrollments.&lt;/p&gt;

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

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

&lt;p&gt;CREATE TABLE Enrollments (&lt;br&gt;
    StudentID INT,&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Courses(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%2Fmmguuhtu9pgkf3lb10f8.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%2Fmmguuhtu9pgkf3lb10f8.jpg" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;✅ Step 3: Convert to 3NF (Third Normal Form)&lt;/p&gt;

&lt;p&gt;➡ Remove transitive dependency (InstructorEmail depends on Instructor, not CourseID).&lt;br&gt;
So, we create a separate Instructors table.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Instructors (&lt;br&gt;
    InstructorID INT PRIMARY KEY,&lt;br&gt;
    InstructorName VARCHAR(100),&lt;br&gt;
    InstructorEmail VARCHAR(100)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses (&lt;br&gt;
    CourseID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    CourseName VARCHAR(100),&lt;br&gt;
    InstructorID INT,&lt;br&gt;
    FOREIGN KEY (InstructorID) REFERENCES Instructors(InstructorID)&lt;br&gt;
);&lt;/p&gt;




&lt;p&gt;📝 Insert Sample Data&lt;/p&gt;

&lt;p&gt;INSERT INTO Students VALUES (1, 'Alice'), (2, 'Bob');&lt;br&gt;
INSERT INTO Instructors VALUES (1, 'Dr. Smith', '&lt;a href="mailto:smith@uni.edu"&gt;smith@uni.edu&lt;/a&gt;'),&lt;br&gt;
                               (2, 'Dr. Lee', '&lt;a href="mailto:lee@uni.edu"&gt;lee@uni.edu&lt;/a&gt;'),&lt;br&gt;
                               (3, 'Dr. Clark', '&lt;a href="mailto:clark@uni.edu"&gt;clark@uni.edu&lt;/a&gt;');&lt;br&gt;
INSERT INTO Courses VALUES ('C101', 'DBMS', 1),&lt;br&gt;
                           ('C102', 'Networks', 2),&lt;br&gt;
                           ('C103', 'AI', 3);&lt;br&gt;
INSERT INTO Enrollments VALUES (1, 'C101'), (2, 'C102'), (1, 'C103');&lt;/p&gt;




&lt;p&gt;🔗 Query with JOINS&lt;/p&gt;

&lt;p&gt;List all students with their courses and instructors:&lt;/p&gt;

&lt;p&gt;SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Enrollments e&lt;br&gt;
JOIN Students s ON e.StudentID = s.StudentID&lt;br&gt;
JOIN Courses c ON e.CourseID = c.CourseID&lt;br&gt;
JOIN Instructors 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%2Fjw46tt9f12x363hkgj51.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%2Fjw46tt9f12x363hkgj51.jpg" alt=" " width="800" height="347"&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%2Frik1a3259piilrqrqezq.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%2Frik1a3259piilrqrqezq.jpg" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;Database normalization helps eliminate redundancy, prevent anomalies, and improve efficiency. By following 1NF → 2NF → 3NF, we created a robust schema ready for real-world applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  SQL #DBMS #DatabaseDesign #Normalization #BackendDevelopment
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding me...
&lt;/h2&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>computerscience</category>
      <category>sql</category>
    </item>
    <item>
      <title>COLLEGE STUDENT AND COURSE MANAGEMENT SYSTEM</title>
      <dc:creator>SASHMITHA G 24CB054</dc:creator>
      <pubDate>Thu, 21 Aug 2025 14:46:41 +0000</pubDate>
      <link>https://forem.com/sashmitha_g24cb054_f8624/college-student-and-course-management-system-37e2</link>
      <guid>https://forem.com/sashmitha_g24cb054_f8624/college-student-and-course-management-system-37e2</guid>
      <description>&lt;p&gt;Building a Simple Student Management Schema in Oracle SQL&lt;br&gt;
In this post, I will walk you through a straightforward example of creating a small database schema for managing students, courses, and enrollments using Oracle SQL. This example covers table creation, constraints, data insertion, and simple queries — perfect for beginners or those looking to refresh their SQL basics.&lt;/p&gt;

&lt;p&gt;Step 1: Creating the Tables&lt;br&gt;
The schema consists of three tables: Students, Courses, and Enrollments.&lt;br&gt;
Students table stores information about each student such as their ID, name, department, date of birth, email, and later a phone number.&lt;br&gt;
Courses table keeps details about different courses including their ID, name, and credits.&lt;br&gt;
Enrollments bridges students and courses, showing which student is enrolled in which course and the grade they received.&lt;br&gt;
Here is the SQL to create these tables with appropriate primary keys and foreign key relationships:&lt;/p&gt;

&lt;p&gt;sql&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;CREATE TABLE Courses (&lt;br&gt;
  CourseID NUMBER PRIMARY KEY,&lt;br&gt;
  CourseName VARCHAR2(50) NOT NULL,&lt;br&gt;
  Credits NUMBER(2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Enrollments (&lt;br&gt;
  EnrollID NUMBER PRIMARY KEY,&lt;br&gt;
  StudentID NUMBER REFERENCES Students(StudentID),&lt;br&gt;
  CourseID NUMBER REFERENCES Courses(CourseID),&lt;br&gt;
  Grade CHAR(2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Step 2: Inserting Sample Data&lt;br&gt;
Next, we add some sample student records. Notice how the date format is handled using TO_DATE with the date format YYYY-MM-DD. Also, emails are kept unique as per table constraint:&lt;br&gt;
sql&lt;br&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (2, 'Aruna', 'Electrical Engineering', TO_DATE('2005-11-22', 'YYYY-MM-DD'), '&lt;a href="mailto:aruna.ee@example.com"&gt;aruna.ee@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (3, 'Navya', 'Mechanical Engineering', TO_DATE('2008-07-09', 'YYYY-MM-DD'), '&lt;a href="mailto:navya.mech@example.com"&gt;navya.mech@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (1, 'Preetha', 'Computer Science', TO_DATE('2007-03-15', 'YYYY-MM-DD'), '&lt;a href="mailto:preetha.cs@example.com"&gt;preetha.cs@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;Step 3: Altering Tables to Add New Features&lt;br&gt;
We then extend the Students table to include a phone number column:&lt;br&gt;
sql&lt;br&gt;
ALTER TABLE Students&lt;br&gt;
ADD PhoneNo VARCHAR2(10);&lt;br&gt;
And add a constraint on the Courses table to ensure the credits are between 1 and 5:&lt;br&gt;
sql&lt;br&gt;
ALTER TABLE Courses&lt;br&gt;
ADD CHECK (Credits BETWEEN 1 AND 5);&lt;br&gt;
This ensures data integrity by restricting invalid credit values.&lt;/p&gt;

&lt;p&gt;Step 4: Adding Courses&lt;br&gt;
Courses are inserted similarly, specifying their IDs, names, and credits. The credits must comply with our check constraint:&lt;br&gt;
sql&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (101, 'DBMS', 3);&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (102, 'OS', 4);&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (103, 'Data Structures', 5);&lt;br&gt;
Step 5: Committing the Changes&lt;br&gt;
Since Oracle requires explicit commits to make the transactions permanent, we run:&lt;br&gt;
sql&lt;br&gt;
COMMIT;&lt;br&gt;
Step 6: Querying the Data&lt;br&gt;
Finally, we run some queries to retrieve useful information:&lt;/p&gt;

&lt;p&gt;Display student names in uppercase and the length of their emails:&lt;br&gt;
sql&lt;br&gt;
SELECT&lt;br&gt;
  UPPER(Name) AS Student_Name,&lt;br&gt;
  LENGTH(Email) AS Email_Length&lt;br&gt;
FROM Students;&lt;br&gt;
List all available courses along with their credits:&lt;br&gt;
sql&lt;br&gt;
SELECT CourseID, CourseName, Credits&lt;br&gt;
FROM Courses;&lt;br&gt;
Show all student details including the newly added phone number:&lt;br&gt;
sql&lt;br&gt;
SELECT StudentID, Name, Dept, DOB, Email, PhoneNo&lt;br&gt;
FROM 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%2Fk8m82hmgc8mmmmco67t8.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%2Fk8m82hmgc8mmmmco67t8.png" alt=" " width="800" height="410"&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%2Fmlyk8htb8m3hz921y3i1.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%2Fmlyk8htb8m3hz921y3i1.png" alt=" " width="800" height="398"&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%2F8vc0dg5cn4de8lmovvzw.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%2F8vc0dg5cn4de8lmovvzw.png" alt=" " width="800" height="407"&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%2F3f5nbqwwgsaj9yauuk8z.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%2F3f5nbqwwgsaj9yauuk8z.png" alt=" " width="800" height="408"&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%2F2ufcdvqahljsolpxnrvz.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%2F2ufcdvqahljsolpxnrvz.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
Conclusion&lt;br&gt;
This simple example covers core SQL concepts like table creation, constraints, relationships, data insertion, date formatting, table alteration, and querying in Oracle SQL. It’s a solid base for building more complex educational management systems or practicing SQL skills.&lt;br&gt;
Thank you &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding me.&lt;/p&gt;

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