<?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: SANCHAYAA S 24CB052</title>
    <description>The latest articles on DEV Community by SANCHAYAA S 24CB052 (@sanchayaa_s24cb052_9f4dd).</description>
    <link>https://dev.to/sanchayaa_s24cb052_9f4dd</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%2F3449342%2Fc76b5504-a9df-47b8-be65-fd40ee123207.png</url>
      <title>DEV Community: SANCHAYAA S 24CB052</title>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanchayaa_s24cb052_9f4dd"/>
    <language>en</language>
    <item>
      <title>🌱 Hands-on with MongoDB CRUD Operations:</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Sat, 04 Oct 2025 15:12:35 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/hands-on-with-mongodb-crud-operations-4l71</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/hands-on-with-mongodb-crud-operations-4l71</guid>
      <description>&lt;p&gt;🎯 Objective&lt;/p&gt;

&lt;p&gt;To gain hands-on experience in performing CRUD (Create, Read, Update, Delete) operations in MongoDB using a simple college student schema.&lt;/p&gt;

&lt;p&gt;MongoDB, a popular NoSQL database, stores data in flexible, JSON-like documents. This makes it ideal for projects that require scalability, real-time analytics, and easy data handling.&lt;/p&gt;

&lt;p&gt;🧩 Schema Design&lt;/p&gt;

&lt;p&gt;We’ll use a collection called students.&lt;br&gt;
Each student document follows this structure:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "student_id": "S001",&lt;br&gt;
  "name": "Sanchayaa",&lt;br&gt;
  "age": 20,&lt;br&gt;
  "department": "CSBS",&lt;br&gt;
  "year": 2,&lt;br&gt;
  "cgpa": 9&lt;br&gt;
}&lt;br&gt;
🔹 1️⃣ CREATE (Insert Data)&lt;/p&gt;

&lt;p&gt;Let’s add 5 sample student records.&lt;br&gt;
use collegeDB;&lt;/p&gt;

&lt;p&gt;db.students.insertMany([&lt;br&gt;
  { "student_id": "S001", "name": "San", "age": 20, "department": "CSBS", "year": 2, "cgpa": 9 },&lt;br&gt;
  { "student_id": "S002", "name": "Meena", "age": 21, "department": "CSE", "year": 3, "cgpa": 8.5 },&lt;br&gt;
  { "student_id": "S003", "name": "Arun", "age": 19, "department": "ECE", "year": 1, "cgpa": 7.2 },&lt;br&gt;
  { "student_id": "S004", "name": "Divya", "age": 22, "department": "CSE", "year": 3, "cgpa": 9.1 },&lt;br&gt;
  { "student_id": "S005", "name": "Vikram", "age": 20, "department": "MECH", "year": 2, "cgpa": 8 }&lt;br&gt;
]);&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ahuluh1cl4dkc8zr8ua.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ahuluh1cl4dkc8zr8ua.jpeg" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;br&gt;
🔹 2️⃣ READ (Query Data)&lt;br&gt;
➤ Display all student records&lt;br&gt;
db.students.find().pretty();&lt;/p&gt;

&lt;p&gt;➤ Find all students with CGPA &amp;gt; 8&lt;br&gt;
db.students.find({ cgpa: { $gt: 8 } });&lt;/p&gt;

&lt;p&gt;➤ Find students belonging to the Computer Science department&lt;br&gt;
db.students.find({ department: "CSE" });&lt;/p&gt;

&lt;p&gt;✅ Result: MongoDB displays only the filtered student documents that match the criteria.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82z0rs53wpdm5vmf5fut.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82z0rs53wpdm5vmf5fut.jpeg" alt=" " width="623" height="500"&gt;&lt;/a&gt;&lt;br&gt;
🔹 3️⃣ UPDATE (Modify Data)&lt;br&gt;
➤ Update the CGPA of a specific student&lt;br&gt;
db.students.updateOne(&lt;br&gt;
  { student_id: "S002" },&lt;br&gt;
  { $set: { cgpa: 8.9 } }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;➤ Increase the year of study for all 3rd-year students by 1&lt;br&gt;
db.students.updateMany(&lt;br&gt;
  { year: 3 },&lt;br&gt;
  { $inc: { year: 1 } }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;✅ Result: CGPA updated and all third-year students promoted to the next year.&lt;br&gt;
🔹 4️⃣ DELETE (Remove Data)&lt;br&gt;
➤ Delete one student record by student_id&lt;br&gt;
db.students.deleteOne({ student_id: "S005" });&lt;/p&gt;

&lt;p&gt;➤ Delete all students having CGPA &amp;lt; 7.5&lt;br&gt;
db.students.deleteMany({ cgpa: { $lt: 7.5 } });&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv683iwku68skqmnu0l1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv683iwku68skqmnu0l1.jpeg" alt=" " width="631" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Result: Low-performing student records removed from the collection.&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>mongodb</category>
      <category>beginners</category>
    </item>
    <item>
      <title>⚡ Mastering Indexing, Hashing &amp; Query Optimization in SQL</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Sat, 04 Oct 2025 13:47:10 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/mastering-indexing-hashing-query-optimization-in-sql-87o</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/mastering-indexing-hashing-query-optimization-in-sql-87o</guid>
      <description>&lt;p&gt;🎯 Objective:&lt;br&gt;
To gain hands-on experience with Indexing, Hashing, and Query Optimization techniques using Oracle SQL.&lt;br&gt;
You’ll learn how different index types (B-Tree, B+ Tree, Hash) improve query performance.&lt;/p&gt;

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

&lt;p&gt;Let’s start with our base schema for the lab.&lt;br&gt;
-- Drop old table if exists&lt;br&gt;
BEGIN&lt;br&gt;
   EXECUTE IMMEDIATE 'DROP TABLE Students';&lt;br&gt;
EXCEPTION&lt;br&gt;
   WHEN OTHERS THEN NULL;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;-- Create Students table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    roll_no NUMBER PRIMARY KEY,&lt;br&gt;
    name VARCHAR2(50),&lt;br&gt;
    dept VARCHAR2(10),&lt;br&gt;
    cgpa NUMBER(3,2)&lt;br&gt;
);&lt;br&gt;
📥 Step 2: Insert Sample Data&lt;br&gt;
INSERT INTO Students VALUES (101, 'Alice', 'CSBS', 8.5);&lt;br&gt;
INSERT INTO Students VALUES (102, 'Bob', 'ECE', 7.8);&lt;br&gt;
INSERT INTO Students VALUES (103, 'Charlie', 'ME', 8.2);&lt;br&gt;
INSERT INTO Students VALUES (104, 'David', 'CSBS', 9.0);&lt;br&gt;
INSERT INTO Students VALUES (105, 'Eva', 'ECE', 7.5);&lt;br&gt;
INSERT INTO Students VALUES (106, 'Frank', 'ME', 8.1);&lt;br&gt;
INSERT INTO Students VALUES (107, 'Grace', 'CSBS', 9.2);&lt;br&gt;
INSERT INTO Students VALUES (108, 'Hannah', 'ECE', 6.9);&lt;br&gt;
INSERT INTO Students VALUES (109, 'Ian', 'ME', 7.8);&lt;br&gt;
INSERT INTO Students VALUES (110, 'Jack', 'CSBS', 8.8);&lt;br&gt;
INSERT INTO Students VALUES (111, 'Karen', 'ECE', 8.0);&lt;br&gt;
INSERT INTO Students VALUES (112, 'Leo', 'ME', 7.9);&lt;br&gt;
INSERT INTO Students VALUES (113, 'Mona', 'CSBS', 8.7);&lt;br&gt;
INSERT INTO Students VALUES (114, 'Nina', 'ECE', 8.3);&lt;br&gt;
INSERT INTO Students VALUES (115, 'Oscar', 'ME', 7.6);&lt;br&gt;
INSERT INTO Students VALUES (116, 'Paul', 'CSBS', 9.1);&lt;br&gt;
INSERT INTO Students VALUES (117, 'Quinn', 'ECE', 8.4);&lt;br&gt;
INSERT INTO Students VALUES (118, 'Rachel', 'ME', 7.7);&lt;br&gt;
INSERT INTO Students VALUES (119, 'Steve', 'CSBS', 8.9);&lt;br&gt;
INSERT INTO Students VALUES (120, 'Tina', 'ECE', 8.2);&lt;/p&gt;

&lt;p&gt;COMMIT;&lt;br&gt;
✅ Output:&lt;br&gt;
20 student records successfully 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%2F3stcswh6sq3hwye59rh8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3stcswh6sq3hwye59rh8.jpeg" alt=" " width="556" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F964nwuvygyoljg3c1gg7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F964nwuvygyoljg3c1gg7.jpeg" alt=" " width="570" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌳 Step 3: Creating a B-Tree Index&lt;/p&gt;

&lt;p&gt;A B-Tree index helps optimize exact match and range queries.&lt;br&gt;
In Oracle, the default index type is B-Tree.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_roll_no ON Students(roll_no);&lt;/p&gt;

&lt;p&gt;Query using the B-Tree index:&lt;br&gt;
SELECT * FROM Students WHERE roll_no = 110;&lt;/p&gt;

&lt;p&gt;💬 Result:&lt;br&gt;
Query runs faster — Oracle uses the idx_roll_no index instead of scanning the whole 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%2Fs0q0h8mygbiopw23s0yp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0q0h8mygbiopw23s0yp.jpeg" alt=" " width="503" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌲 Step 4: Creating a B+ Tree Index (on CGPA)&lt;/p&gt;

&lt;p&gt;B+ Trees are used internally by Oracle for normal indexes.&lt;br&gt;
They’re ideal for range-based queries (e.g., &amp;gt;, &amp;lt;, BETWEEN).&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_cgpa ON Students(cgpa);&lt;/p&gt;

&lt;p&gt;Query using B+ Tree index:&lt;br&gt;
SELECT * FROM Students WHERE cgpa &amp;gt; 8.0 ORDER BY cgpa DESC;&lt;/p&gt;

&lt;p&gt;✅ Why it’s faster:&lt;br&gt;
Oracle reads index pages sequentially, avoiding full table scans.&lt;br&gt;
Perfect for range conditions and sorting queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw0thgzqnrddr2owhs2r.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw0thgzqnrddr2owhs2r.jpeg" alt=" " width="644" height="543"&gt;&lt;/a&gt;&lt;br&gt;
💠 Step 5: Simulating a Hash Index (on dept)&lt;/p&gt;

&lt;p&gt;Oracle doesn’t allow direct USING HASH indexes on regular tables,&lt;br&gt;
but we can use normal indexing to simulate hash-based performance for exact matches.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_dept ON Students(dept);&lt;/p&gt;

&lt;p&gt;Query example:&lt;br&gt;
SELECT * FROM Students WHERE dept = 'CSBS';&lt;/p&gt;

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

&lt;p&gt;Hashing is best for equality lookups (like dept = 'CSBS').&lt;/p&gt;

&lt;p&gt;B-Tree is still used internally but acts similarly for single-value queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc9vsopbwvvoew1ijijlb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc9vsopbwvvoew1ijijlb.jpeg" alt=" " width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔍 Step 6: Query Optimization with EXPLAIN PLAN&lt;/p&gt;

&lt;p&gt;Let’s verify that Oracle uses our indexes.&lt;/p&gt;

&lt;p&gt;EXPLAIN PLAN FOR&lt;br&gt;
SELECT * FROM Students WHERE roll_no = 110;&lt;/p&gt;

&lt;p&gt;SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);&lt;br&gt;
These confirm that your query is optimized using indexes.&lt;/p&gt;

&lt;p&gt;📊 Step 7: Understanding Index Types&lt;br&gt;
Index Type  Use Case    Example Query   Advantage&lt;br&gt;
B-Tree  Equality or range lookup&lt;br&gt;
    WHERE roll_no = 110 Balanced tree → fast lookup&lt;br&gt;
B+ Tree Range or sorting queries&lt;br&gt;
    WHERE cgpa &amp;gt; 8  Optimized for sequential access&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>performance</category>
      <category>sql</category>
    </item>
    <item>
      <title>Transactions,Deadlocks and Log Based Recovery</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Sat, 04 Oct 2025 13:35:21 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/transactionsdeadlocks-and-log-based-recovery-32i1</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/transactionsdeadlocks-and-log-based-recovery-32i1</guid>
      <description>&lt;p&gt;💡 Objective:&lt;br&gt;
To gain hands-on experience with ACID transactions, simulate deadlocks, and observe log-based recovery in a relational database system.&lt;/p&gt;

&lt;p&gt;We’ll use a simple Accounts table to demonstrate these core database concept&lt;br&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;br&gt;
Step 2: Transaction – Atomicity &amp;amp; Rollback&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fha23njsewc0doawu4xry.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fha23njsewc0doawu4xry.jpeg" alt=" " width="409" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A transaction is a group of SQL operations executed as a single logical unit.&lt;br&gt;
Let’s test Atomicity — “all or nothing” execution.&lt;/p&gt;

&lt;p&gt;Example: Transfer ₹500 from Alice → Bob, then rollback.&lt;br&gt;
-- Start a transaction&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Debit Alice&lt;br&gt;
UPDATE Accounts&lt;br&gt;
SET balance = balance - 500&lt;br&gt;
WHERE name = 'Alice';&lt;/p&gt;

&lt;p&gt;-- Credit 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;-- Rollback before committing&lt;br&gt;
ROLLBACK;&lt;/p&gt;

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

&lt;p&gt;A deadlock occurs when two transactions hold locks that the other needs.&lt;br&gt;
Let’s simulate this using two SQL sessions.&lt;/p&gt;

&lt;p&gt;🧩 Session 1&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Lock Alice’s account&lt;br&gt;
SELECT * FROM Accounts WHERE name='Alice' FOR UPDATE;&lt;/p&gt;

&lt;p&gt;-- Try to update Bob’s balance (will wait if Session 2 has locked Bob)&lt;br&gt;
UPDATE Accounts SET balance = balance + 100 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%2Fpnibx614s8ijq84zth6o.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnibx614s8ijq84zth6o.jpeg" alt=" " width="615" height="532"&gt;&lt;/a&gt;&lt;br&gt;
🧩 Session 2&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Lock Bob’s account&lt;br&gt;
SELECT * FROM Accounts WHERE name='Bob' FOR UPDATE;&lt;/p&gt;

&lt;p&gt;-- Try to update Alice’s balance (will wait if Session 1 has locked Alice)&lt;br&gt;
UPDATE Accounts SET balance = balance + 200 WHERE name='Alice';&lt;br&gt;
🧨 Result:&lt;br&gt;
Database detects a deadlock automatically and aborts one transaction.&lt;/p&gt;

&lt;p&gt;Example Error (MySQL):&lt;/p&gt;

&lt;p&gt;ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction&lt;/p&gt;

&lt;p&gt;💬 Explanation:&lt;br&gt;
Each session holds one lock and waits for the other.&lt;br&gt;
To prevent deadlocks → access resources in the same order and keep transactions short.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fomi5h6uvwaa8a3s70vr7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fomi5h6uvwaa8a3s70vr7.jpeg" alt=" " width="664" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧾 Step 4: Log-Based Recovery&lt;/p&gt;

&lt;p&gt;Modern databases maintain logs to record every transaction’s activity.&lt;br&gt;
These logs allow the system to undo uncommitted changes and redo committed ones after a crash.&lt;/p&gt;

&lt;p&gt;Example: Observe undo logging via rollback&lt;br&gt;
-- Start a transaction&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

&lt;p&gt;-- Update Charlie’s balance&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE name = 'Charlie';&lt;/p&gt;

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

&lt;p&gt;-- Verify balance restored&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Charlie';&lt;br&gt;
✅ Result:&lt;br&gt;
Charlie’s balance remains unchanged (2000).&lt;/p&gt;

&lt;p&gt;💬 Explanation:&lt;br&gt;
The database writes the undo log entry when you start the transaction.&lt;br&gt;
When rollback is issued, the DB uses that log to restore previous values&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>computerscience</category>
      <category>sql</category>
    </item>
    <item>
      <title>To demonstrate the ACID properties (Atomicity, Consistency, Isolation, and Durability) using SQL transactions.</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Sat, 04 Oct 2025 13:28:19 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/to-demonstrate-the-acid-properties-atomicity-consistency-isolation-and-durability-using-sql-3mbj</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/to-demonstrate-the-acid-properties-atomicity-consistency-isolation-and-durability-using-sql-3mbj</guid>
      <description>&lt;p&gt;🧩 Step 1: Create Table and Insert Sample Data&lt;br&gt;
BEGIN&lt;br&gt;
    EXECUTE IMMEDIATE 'DROP TABLE ACCOUNTS CASCADE CONSTRAINTS';&lt;br&gt;
EXCEPTION WHEN OTHERS THEN NULL;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;CREATE TABLE ACCOUNTS (&lt;br&gt;
    acc_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR2(50),&lt;br&gt;
    balance INT CHECK (balance &amp;gt;= 0)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO ACCOUNTS VALUES (101, 'Kiran', 5000);&lt;br&gt;
INSERT INTO ACCOUNTS VALUES (102, 'Asha', 7000);&lt;br&gt;
INSERT INTO ACCOUNTS VALUES (103, 'Vikram', 9000);&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;-- ✅ View initial data&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%2Ffbfa2fgei5kbc2lzmndp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbfa2fgei5kbc2lzmndp.jpeg" alt=" " width="543" height="553"&gt;&lt;/a&gt;&lt;br&gt;
Step 2: Atomicity&lt;/p&gt;

&lt;p&gt;Atomicity means “all or nothing.”&lt;br&gt;
If a transaction fails, no partial updates remain.&lt;/p&gt;

&lt;p&gt;🧪 Example: Transfer ₹1000 from Kiran to Asha, but rollback halfway&lt;br&gt;
-- Start transaction&lt;br&gt;
SAVEPOINT start_transfer;&lt;/p&gt;

&lt;p&gt;UPDATE ACCOUNTS SET balance = balance - 1000 WHERE acc_no = 101;&lt;br&gt;
UPDATE ACCOUNTS SET balance = balance + 1000 WHERE acc_no = 102;&lt;/p&gt;

&lt;p&gt;-- Suppose error happens — rollback&lt;br&gt;
ROLLBACK TO start_transfer;&lt;/p&gt;

&lt;p&gt;-- ✅ Check balances after rollback&lt;br&gt;
SELECT * FROM ACCOUNTS;&lt;br&gt;
✅ Output&lt;br&gt;
No change! Balances are the same as before → proves Atomicity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs332g60lwmxj138b6343.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs332g60lwmxj138b6343.jpeg" alt=" " width="602" height="528"&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%2F0sfy2x1pqro3zpgrrn4a.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sfy2x1pqro3zpgrrn4a.jpeg" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;br&gt;
Step 3: Consistency&lt;/p&gt;

&lt;p&gt;Consistency means the database always stays valid — rules and constraints are never broken.&lt;/p&gt;

&lt;p&gt;🧪 Example: Try inserting an invalid record&lt;br&gt;
-- This should FAIL because of the CHECK constraint&lt;br&gt;
INSERT INTO ACCOUNTS VALUES (104, 'Sneha', -2000);&lt;/p&gt;

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

&lt;p&gt;ORA-02290: check constraint (BALANCE &amp;gt;= 0) violated&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffer4nd0lnoh1w3havgy1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffer4nd0lnoh1w3havgy1.jpeg" alt=" " width="657" height="534"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxtubs7t9t06mdl5h8so.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxtubs7t9t06mdl5h8so.jpeg" alt=" " width="601" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Database rejected invalid data → proves Consistency.&lt;br&gt;
Step 4: Isolation&lt;/p&gt;

&lt;p&gt;Isolation means one transaction’s changes are not visible to others until committed.&lt;/p&gt;

&lt;p&gt;We can simulate this conceptually (since Oracle Live SQL runs one session per user):&lt;/p&gt;

&lt;p&gt;Session 1 (Transaction A):&lt;/p&gt;

&lt;p&gt;-- Begin Transaction A&lt;br&gt;
UPDATE ACCOUNTS SET balance = balance - 500 WHERE acc_no = 101;&lt;/p&gt;

&lt;p&gt;-- Don’t commit yet&lt;/p&gt;

&lt;p&gt;Session 2 (Transaction B):&lt;/p&gt;

&lt;p&gt;-- Try reading while Transaction A is open&lt;br&gt;
SELECT * FROM ACCOUNTS WHERE acc_no = 101;&lt;/p&gt;

&lt;p&gt;✅ Observation:&lt;br&gt;
Transaction B still sees the old balance (not updated)&lt;br&gt;
→ changes are isolated until commit.&lt;/p&gt;

&lt;p&gt;Then, if Session 1 commits:&lt;/p&gt;

&lt;p&gt;COMMIT;&lt;/p&gt;

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

&lt;p&gt;SELECT * FROM ACCOUNTS WHERE acc_no = 101;&lt;/p&gt;

&lt;p&gt;✅ Now it sees the new value → proves Isolation.&lt;/p&gt;

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

&lt;p&gt;Durability means once a transaction is committed, it survives system failure.&lt;/p&gt;

&lt;p&gt;🧪 Example:&lt;br&gt;
UPDATE ACCOUNTS SET balance = balance + 500 WHERE acc_no = 103;&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;✅ Even if the database restarts or session closes, the committed change stays stored permanently.&lt;br&gt;
If you re-run:&lt;/p&gt;

&lt;p&gt;SELECT * FROM ACCOUNTS WHERE acc_no = 103;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyp1dqegsq3yi7r03duaf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyp1dqegsq3yi7r03duaf.jpeg" alt=" " width="585" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>Cursor and Trigger</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Sat, 04 Oct 2025 12:53:16 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/cursor-and-trigger-201p</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/cursor-and-trigger-201p</guid>
      <description>&lt;p&gt;🔹 Cursor&lt;/p&gt;

&lt;p&gt;A cursor is like a pointer that goes through each row of a query result one at a time.&lt;/p&gt;

&lt;p&gt;We’ll create a cursor to:&lt;/p&gt;

&lt;p&gt;Display employee names whose salary is greater than 50,000.&lt;/p&gt;

&lt;p&gt;🔹 Trigger&lt;/p&gt;

&lt;p&gt;A trigger is like an automatic reaction —&lt;br&gt;
It executes automatically when an event (INSERT/UPDATE/DELETE) happens on a table.&lt;/p&gt;

&lt;p&gt;We’ll create an AFTER INSERT trigger to:&lt;/p&gt;

&lt;p&gt;Automatically insert a record into a Student_Audit table whenever a new student is added to the Students table.&lt;br&gt;
✅ Step 1: Create the Employee Table&lt;br&gt;
-- Drop if already exists&lt;br&gt;
BEGIN&lt;br&gt;
    EXECUTE IMMEDIATE 'DROP TABLE EMPLOYEE';&lt;br&gt;
EXCEPTION WHEN OTHERS THEN NULL;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;CREATE TABLE EMPLOYEE (&lt;br&gt;
    EmpID NUMBER PRIMARY KEY,&lt;br&gt;
    EmpName VARCHAR2(50),&lt;br&gt;
    Salary NUMBER&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO EMPLOYEE VALUES (1, 'Kiran', 45000);&lt;br&gt;
INSERT INTO EMPLOYEE VALUES (2, 'Asha', 52000);&lt;br&gt;
INSERT INTO EMPLOYEE VALUES (3, 'Sneha', 60000);&lt;br&gt;
INSERT INTO EMPLOYEE VALUES (4, 'Rahul', 40000);&lt;br&gt;
INSERT INTO EMPLOYEE VALUES (5, 'Vikram', 80000);&lt;/p&gt;

&lt;p&gt;COMMIT;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlkpsfx8souow09nzml2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlkpsfx8souow09nzml2.jpeg" alt=" " width="618" height="531"&gt;&lt;/a&gt;&lt;br&gt;
✅ Step 2: Create the Cursor Block&lt;/p&gt;

&lt;p&gt;Now we’ll write a PL/SQL block that uses a cursor to process rows conditionally.&lt;br&gt;
SET SERVEROUTPUT ON;&lt;/p&gt;

&lt;p&gt;DECLARE&lt;br&gt;
    -- Cursor declaration&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;-- Variables to store each row
v_name EMPLOYEE.EmpName%TYPE;
v_salary EMPLOYEE.Salary%TYPE;
&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 v_name, v_salary;&lt;br&gt;
        EXIT WHEN emp_cursor%NOTFOUND;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    DBMS_OUTPUT.PUT_LINE('Employee: ' || v_name || ' | Salary: ' || v_salary);
END LOOP;
CLOSE emp_cursor;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;END;&lt;br&gt;
/&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foophu54qkfv6rox0l078.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foophu54qkfv6rox0l078.jpeg" alt=" " width="701" height="532"&gt;&lt;/a&gt;&lt;br&gt;
🎯 Output (on Oracle Live SQL console)&lt;br&gt;
Employee: Asha | Salary: 52000&lt;br&gt;
Employee: Sneha | Salary: 60000&lt;br&gt;
Employee: Vikram | Salary: 80000&lt;/p&gt;

&lt;p&gt;Trigger Example — AFTER INSERT on Students Table&lt;br&gt;
✅ Step 1: Create Student and Audit Tables&lt;br&gt;
BEGIN&lt;br&gt;
    EXECUTE IMMEDIATE 'DROP TABLE STUDENT_AUDIT';&lt;br&gt;
    EXECUTE IMMEDIATE 'DROP TABLE STUDENTS';&lt;br&gt;
EXCEPTION WHEN OTHERS THEN NULL;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;CREATE TABLE STUDENTS (&lt;br&gt;
    StudentID NUMBER PRIMARY KEY,&lt;br&gt;
    StudentName VARCHAR2(50),&lt;br&gt;
    Course VARCHAR2(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE STUDENT_AUDIT (&lt;br&gt;
    AuditID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,&lt;br&gt;
    StudentID NUMBER,&lt;br&gt;
    StudentName VARCHAR2(50),&lt;br&gt;
    ActionDate DATE,&lt;br&gt;
    ActionType VARCHAR2(20)&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%2F7iv3bqw241oqzec820bk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7iv3bqw241oqzec820bk.jpeg" alt=" " width="690" height="532"&gt;&lt;/a&gt;&lt;br&gt;
✅ Step 2: Create the Trigger&lt;br&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, ActionDate, ActionType)&lt;br&gt;
    VALUES (:NEW.StudentID, :NEW.StudentName, SYSDATE, 'INSERT');&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

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

&lt;p&gt;AFTER INSERT ON STUDENTS → runs after a new student is inserted.&lt;/p&gt;

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

&lt;p&gt;Automatically logs into the STUDENT_AUDIT table.&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>Database Normalization Explained with SQL Examples (1NF, 2NF, 3NF)</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Sat, 04 Oct 2025 11:17:57 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/database-normalization-explained-with-sql-examples-1nf-2nf-3nf-4121</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/database-normalization-explained-with-sql-examples-1nf-2nf-3nf-4121</guid>
      <description>&lt;p&gt;When working with databases, one of the biggest challenges is data redundancy and anomalies (insertion, update, deletion problems).&lt;br&gt;
This is where Normalization comes in — a process of organizing data into efficient structures.&lt;/p&gt;

&lt;p&gt;🔎 Step 1: Identifying Anomalies&lt;/p&gt;

&lt;p&gt;This table has multiple issues:&lt;/p&gt;

&lt;p&gt;1)Insertion anomaly – Can’t add a new course unless a student enrolls.&lt;br&gt;
2)Update anomaly – If Dr. Kumar’s phone number changes, we must update it in multiple rows.&lt;br&gt;
3)Deletion anomaly– If the last student in a course is removed, we lose course and instructor details too.&lt;/p&gt;

&lt;p&gt;Clearly, normalization is needed.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a73dt9xvfxp3sivom4h.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a73dt9xvfxp3sivom4h.jpeg" alt=" " width="369" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ 1NF (First Normal Form)
&lt;/h2&gt;

&lt;p&gt;Rule:1 Data must be atomic, no repeating groups.&lt;/p&gt;

&lt;p&gt;Our base table is already in 1NF, since each column has atomic values.&lt;br&gt;
But redundancy still exists.&lt;/p&gt;

&lt;p&gt;SQL (1NF structure):&lt;/p&gt;

&lt;p&gt;CREATE TABLE StudentCourse1NF (&lt;br&gt;
    StudentID VARCHAR(10),&lt;br&gt;
    StudentName VARCHAR(50),&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    CourseName VARCHAR(50),&lt;br&gt;
    Instructor VARCHAR(50),&lt;br&gt;
    InstructorPhone VARCHAR(15),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID)&lt;br&gt;
);&lt;br&gt;
 ✅ 2NF (Second Normal Form)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fip693idpzsaoynwtadv0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fip693idpzsaoynwtadv0.jpeg" alt=" " width="411" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rule: Must be in 1NF + no partial dependency.&lt;/p&gt;

&lt;p&gt;Problem in 1NF:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;StudentName depends only on StudentID.&lt;/li&gt;
&lt;li&gt;CourseName, &lt;code&gt;Instructor&lt;/code&gt;, and InstructorPhone depend only on &lt;code&gt;CourseID&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Solution: Split into Student, Course, and Enrollment tables.&lt;/p&gt;

&lt;p&gt;SQL for 2NF:&lt;/p&gt;

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

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

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

&lt;p&gt;✅ 3NF (Third Normal Form)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71go80qrcrt6ho8dw1l7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71go80qrcrt6ho8dw1l7.jpeg" alt=" " width="798" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rule: Must be in 2NF + no transitive dependency.&lt;/p&gt;

&lt;p&gt;Problem in 2NF:&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;Course&lt;/code&gt;, &lt;code&gt;InstructorPhone&lt;/code&gt; depends on &lt;code&gt;Instructor&lt;/code&gt;, not directly on &lt;code&gt;CourseID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;👉 Solution: Create a separate Instructor table.&lt;/p&gt;

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

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

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

&lt;p&gt;CREATE TABLE Enrollment (&lt;br&gt;
    StudentID VARCHAR(10),&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Student(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Course(CourseID)&lt;br&gt;
);&lt;br&gt;
 📌 Inserting Sample Data&lt;/p&gt;

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

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

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

&lt;p&gt;-- Enrollment&lt;br&gt;
INSERT INTO Enrollment VALUES ('S01', 'C101');&lt;br&gt;
INSERT INTO Enrollment VALUES ('S01', 'C102');&lt;br&gt;
INSERT INTO Enrollment VALUES ('S02', 'C101');&lt;br&gt;
INSERT INTO Enrollment VALUES ('S03', 'C103');&lt;/p&gt;

&lt;p&gt;📌 Query: Students with Courses and Instructors&lt;/p&gt;

&lt;p&gt;SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Enrollment e&lt;br&gt;
JOIN Student s ON e.StudentID = s.StudentID&lt;br&gt;
JOIN Course c ON e.CourseID = c.CourseID&lt;br&gt;
JOIN Instructor i ON c.InstructorID = i.InstructorID;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2limsr4497icqn0dbgf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2limsr4497icqn0dbgf.jpeg" alt=" " width="769" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;1NF removes repeating groups.&lt;/li&gt;
&lt;li&gt;2NF removes partial dependency.&lt;/li&gt;
&lt;li&gt;3NF removes transitive dependency.&lt;/li&gt;
&lt;li&gt;Normalization reduces redundancy and prevents anomalies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By splitting large tables into smaller, well-structured ones, we ensure cleaner data, better performance, and easier maintenance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuu4d7yjshqw3kad732z.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuu4d7yjshqw3kad732z.jpeg" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>livesql</category>
      <category>oracle</category>
    </item>
    <item>
      <title>College Student and Course Management System</title>
      <dc:creator>SANCHAYAA S 24CB052</dc:creator>
      <pubDate>Thu, 21 Aug 2025 10:01:17 +0000</pubDate>
      <link>https://dev.to/sanchayaa_s24cb052_9f4dd/college-student-and-course-management-system-1ndn</link>
      <guid>https://dev.to/sanchayaa_s24cb052_9f4dd/college-student-and-course-management-system-1ndn</guid>
      <description>&lt;p&gt;Managing students, courses, and faculty is one of the most common use cases for a Database Management System (DBMS). In this blog, we’ll walk through how to build a mini Student &amp;amp; Course Management System using SQL.&lt;/p&gt;

&lt;p&gt;By the end, you’ll learn:&lt;br&gt;
✅ How to create tables (DDL)&lt;br&gt;
✅ How to insert data (DML)&lt;br&gt;
✅ How to update &amp;amp; delete data&lt;br&gt;
✅ How to query and join tables for insights&lt;br&gt;
✅ How to make your system practical &amp;amp; interesting&lt;/p&gt;

&lt;p&gt;🏫 Step 1: Creating the Database&lt;/p&gt;

&lt;p&gt;Let’s start by creating our database.&lt;/p&gt;

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

&lt;p&gt;👩‍🎓 Step 2: Creating the Tables&lt;/p&gt;

&lt;p&gt;We’ll need 3 main tables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Students – to store student details&lt;/li&gt;
&lt;li&gt;Courses – to store course details&lt;/li&gt;
&lt;li&gt;Enrollments – to link students with courses&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Students Table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    StudentID INT PRIMARY KEY AUTO_INCREMENT,&lt;br&gt;
    StudentName VARCHAR(100) NOT NULL,&lt;br&gt;
    Department VARCHAR(50),&lt;br&gt;
    Email VARCHAR(100) UNIQUE,&lt;br&gt;
    PhoneNo VARCHAR(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Courses Table&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
    CourseID INT PRIMARY KEY AUTO_INCREMENT,&lt;br&gt;
    CourseName VARCHAR(100) NOT NULL,&lt;br&gt;
    Credits INT NOT NULL&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Enrollments Table (Relationship)&lt;br&gt;
CREATE TABLE Enrollments (&lt;br&gt;
    EnrollmentID INT PRIMARY KEY AUTO_INCREMENT,&lt;br&gt;
    StudentID INT,&lt;br&gt;
    CourseID INT,&lt;br&gt;
    Semester VARCHAR(10),&lt;br&gt;
    Grade CHAR(2),&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;📝 Step 3: Inserting Data&lt;/p&gt;

&lt;p&gt;Let’s add some sample students and courses.&lt;/p&gt;

&lt;p&gt;-- Insert Students&lt;br&gt;
INSERT INTO Students (StudentName, Department, Email, PhoneNo) VALUES&lt;br&gt;
('Rahul Kumar', 'Computer Science', '&lt;a href="mailto:rahul@college.edu"&gt;rahul@college.edu&lt;/a&gt;', '9876543210'),&lt;br&gt;
('Priya Sharma', 'Commerce', '&lt;a href="mailto:priya@college.edu"&gt;priya@college.edu&lt;/a&gt;', '9876501234'),&lt;br&gt;
('Amit Verma', 'Mechanical', '&lt;a href="mailto:amit@college.edu"&gt;amit@college.edu&lt;/a&gt;', '9876523456');&lt;/p&gt;

&lt;p&gt;-- Insert Courses&lt;br&gt;
INSERT INTO Courses (CourseName, Credits) VALUES&lt;br&gt;
('Database Management', 4),&lt;br&gt;
('Computer Networks', 3),&lt;br&gt;
('Financial Accounting', 4),&lt;br&gt;
('Thermodynamics', 3);&lt;/p&gt;

&lt;p&gt;-- Enroll Students into Courses&lt;br&gt;
INSERT INTO Enrollments (StudentID, CourseID, Semester, Grade) VALUES&lt;br&gt;
(1, 1, 'Sem1', 'A'),&lt;br&gt;
(1, 2, 'Sem1', 'B'),&lt;br&gt;
(2, 3, 'Sem2', 'A'),&lt;br&gt;
(3, 4, 'Sem1', 'B');&lt;/p&gt;

&lt;p&gt;🔍 Step 4: Querying the Database&lt;/p&gt;

&lt;p&gt;Now the fun part – let’s ask our database questions!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Show all students&lt;br&gt;
SELECT * FROM Students;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find all courses taken by Rahul Kumar&lt;br&gt;
SELECT s.StudentName, c.CourseName, e.Semester, e.Grade&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;
WHERE s.StudentName = 'Rahul Kumar';&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Count how many students are in each department&lt;br&gt;
SELECT Department, COUNT(*) AS TotalStudents&lt;br&gt;
FROM Students&lt;br&gt;
GROUP BY Department;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find top performers (students with Grade 'A')&lt;br&gt;
SELECT s.StudentName, c.CourseName, e.Grade&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;
WHERE e.Grade = 'A';&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⚡ Step 5: Updating &amp;amp; Deleting Data&lt;/p&gt;

&lt;p&gt;Rahul changed his phone number? Let’s update it.&lt;/p&gt;

&lt;p&gt;UPDATE Students&lt;br&gt;
SET PhoneNo = '9998887776'&lt;br&gt;
WHERE StudentName = 'Rahul Kumar';&lt;/p&gt;

&lt;p&gt;Want to remove a student completely?&lt;br&gt;
DELETE FROM Students&lt;br&gt;
WHERE StudentID = 3;&lt;/p&gt;

&lt;p&gt;🎯 Step 6: Why This System Matters&lt;/p&gt;

&lt;p&gt;This Student &amp;amp; Course Management System is not just a practice project — it’s the foundation of real-world college ERP systems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Colleges use it to manage admissions, courses, results, and fees.&lt;/li&gt;
&lt;li&gt;You can extend it with features like faculty details, attendance tracking, and exam results.&lt;/li&gt;
&lt;li&gt;Add a web or app interface and you’ve got a full-fledged college management software!&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;We just built a mini college ERP system using SQL. You now know how to:&lt;br&gt;
✔ Create and link tables&lt;br&gt;
✔ Insert, update, and delete data&lt;br&gt;
✔ Query with joins and conditions&lt;br&gt;
✔ Extract insights from your database&lt;/p&gt;

&lt;p&gt;This project is a perfect mini-project for college students in DBMS, SQL, or Software Engineering courses.&lt;/p&gt;

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

</description>
      <category>sql</category>
      <category>oracle</category>
      <category>sqlcommands</category>
    </item>
  </channel>
</rss>
