<?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: Rithika</title>
    <description>The latest articles on DEV Community by Rithika (@rithika07032007).</description>
    <link>https://dev.to/rithika07032007</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%2F3547125%2Ffbf1484f-ab04-4c1a-9428-0512579e9027.png</url>
      <title>DEV Community: Rithika</title>
      <link>https://dev.to/rithika07032007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rithika07032007"/>
    <language>en</language>
    <item>
      <title>MangoDB CRUD</title>
      <dc:creator>Rithika</dc:creator>
      <pubDate>Mon, 06 Oct 2025 15:03:20 +0000</pubDate>
      <link>https://dev.to/rithika07032007/simple-college-student-schema-35jn</link>
      <guid>https://dev.to/rithika07032007/simple-college-student-schema-35jn</guid>
      <description>&lt;p&gt;🚀 Exploring MongoDB CRUD Operations: A Beginner-Friendly Walkthrough &lt;/p&gt;

&lt;p&gt;MongoDB is one of the most widely used NoSQL databases, known for its scalability, flexibility, and document-based structure. In this tutorial, we’ll explore how to perform the core CRUD operations (Create, Read, Update, Delete) on a college students collection to understand MongoDB’s power in real-world use cases.&lt;/p&gt;

&lt;p&gt;🛠️ Setting Up the Cluster Create a free account on MongoDB Atlas. Build your first cluster using the default free-tier configuration. Connect it with MongoDB Compass or VS Code for seamless query execution. &lt;/p&gt;

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

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

&lt;p&gt;{ student_id: "A101", name: "Aarav", age: 20, department: "AIML", year: 2, cgpa: 8.6 } &lt;/p&gt;

&lt;p&gt;This document model makes it easy to store and query data without worrying about rigid table structures.&lt;/p&gt;

&lt;p&gt;✳️ CREATE (Insert Documents) &lt;/p&gt;

&lt;p&gt;Let’s begin by inserting a few student records into our collection:&lt;/p&gt;

&lt;p&gt;{ student_id: "A101", name: "Aarav", age: 20, department: "AIML", year: 2, cgpa: 8.6 } { student_id: "A102", name: "Diya", age: 21, department: "CSE", year: 3, cgpa: 9.2 } { student_id: "A103", name: "Karthik", age: 19, department: "EEE", year: 2, cgpa: 8.3 } { student_id: "A104", name: "Meera", age: 22, department: "ECE", year: 4, cgpa: 7.8 } { student_id: "A105", name: "Rahul", age: 20, department: "IT", year: 3, cgpa: 8.9 } &lt;/p&gt;

&lt;p&gt;Each record represents a student with essential details like department, academic year, and CGPA.&lt;/p&gt;

&lt;p&gt;🔍 READ (Query Documents) &lt;/p&gt;

&lt;p&gt;To fetch all student records, you can simply use:&lt;/p&gt;

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

&lt;p&gt;This command retrieves all documents from the students collection. You can also apply filters, for example, to display only students with a CGPA above 8.5:&lt;/p&gt;

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

&lt;p&gt;These queries make MongoDB powerful and intuitive for working with large datasets.&lt;/p&gt;

&lt;p&gt;✏️ UPDATE (Modify Documents) &lt;/p&gt;

&lt;p&gt;Now, let’s perform some update operations.&lt;/p&gt;

&lt;p&gt;1️⃣ Update a specific student’s CGPA:&lt;/p&gt;

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

&lt;p&gt;2️⃣ Increase the year of study for all 3rd-year students by 1:&lt;/p&gt;

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

&lt;p&gt;MongoDB allows both single document and bulk updates, making it ideal for large-scale applications like college management systems.&lt;/p&gt;

&lt;p&gt;🗑️ DELETE (Remove Documents) &lt;/p&gt;

&lt;p&gt;To remove a specific record by student ID:&lt;/p&gt;

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

&lt;p&gt;To delete all students whose CGPA is below 7.5:&lt;/p&gt;

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

&lt;p&gt;Deletion operations in MongoDB are straightforward yet powerful—ensuring that your database remains clean and efficient.&lt;/p&gt;

&lt;p&gt;🎓 Wrap-Up &lt;/p&gt;

&lt;p&gt;In this walkthrough, we learned how to:&lt;/p&gt;

&lt;p&gt;Insert new student records Retrieve data based on filters like department and CGPA Update values dynamically Delete specific or conditional records &lt;/p&gt;

&lt;p&gt;These CRUD operations form the backbone of every MongoDB application, whether it’s a college portal, an e-learning platform, or a student management dashboard.&lt;/p&gt;

&lt;p&gt;A huge thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for his continuous guidance and encouragement throughout this learning journey. &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%2Fp6pj9i7qsepurgsx7e81.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%2Fp6pj9i7qsepurgsx7e81.jpg" alt=" " width="795" height="363"&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%2Fjhd8e5bgd4wfihfiu03j.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%2Fjhd8e5bgd4wfihfiu03j.jpg" alt=" " width="800" height="365"&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%2Fw5c712ewhgrqvvnp2i4t.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%2Fw5c712ewhgrqvvnp2i4t.jpg" alt=" " width="800" height="342"&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%2F3cj0o1irj1sqfcdd56c9.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%2F3cj0o1irj1sqfcdd56c9.jpg" alt=" " width="800" height="338"&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%2Fz6qs7mml853o6czpq9ch.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%2Fz6qs7mml853o6czpq9ch.jpg" alt=" " width="794" height="358"&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%2Fn3uhdamv17i1d8gvxn7q.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%2Fn3uhdamv17i1d8gvxn7q.jpg" alt=" " width="796" height="373"&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%2Fupww4mj7srf6clgfeq03.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%2Fupww4mj7srf6clgfeq03.jpg" alt=" " width="800" height="359"&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%2Fsdwluvkqwgvefep9imip.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%2Fsdwluvkqwgvefep9imip.jpg" alt=" " width="800" height="352"&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%2Fib1z8p23vncw2wlegove.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%2Fib1z8p23vncw2wlegove.jpg" alt=" " width="800" height="351"&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%2Fr5ppjx69gcsfz3izcuw9.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%2Fr5ppjx69gcsfz3izcuw9.jpg" alt=" " width="800" height="350"&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%2Fc0x4jc940vf9ozmhh4q1.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%2Fc0x4jc940vf9ozmhh4q1.jpg" alt=" " width="800" height="489"&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%2F8l3vtxojn2ggbnit78c5.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%2F8l3vtxojn2ggbnit78c5.jpg" alt=" " width="800" height="355"&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%2F6q4f6vuu5tos63hi0h4w.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%2F6q4f6vuu5tos63hi0h4w.jpg" alt=" " width="800" height="362"&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%2F5c9svexxx1vqq83h6j2r.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%2F5c9svexxx1vqq83h6j2r.jpg" alt=" " width="800" height="368"&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%2F3oku7k4zj3wqhzd0deav.webp" 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%2F3oku7k4zj3wqhzd0deav.webp" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>coding</category>
      <category>learning</category>
    </item>
    <item>
      <title>DBMS: TRANSACTIONS,DEADLOCKS &amp; LOG- BASED RECOVERY</title>
      <dc:creator>Rithika</dc:creator>
      <pubDate>Mon, 06 Oct 2025 14:22:43 +0000</pubDate>
      <link>https://dev.to/rithika07032007/dbms-transactionsdeadlocks-log-based-recovery-4gcb</link>
      <guid>https://dev.to/rithika07032007/dbms-transactionsdeadlocks-log-based-recovery-4gcb</guid>
      <description>&lt;p&gt;🔐 Mastering MySQL Transactions and Row-Level Locking: A Practical Walkthrough&lt;/p&gt;

&lt;p&gt;When working with relational databases, one of the biggest challenges developers face is maintaining data consistency when multiple users or applications try to access and modify data at the same time. &lt;/p&gt;

&lt;p&gt;Imagine several banking transactions happening simultaneously — one user transferring money, another updating their profile, and a third checking their balance. Without proper control, these operations could interfere with each other, leading to inaccurate or inconsistent data.&lt;/p&gt;

&lt;p&gt;🧩 Scenario 1: Locking Rows with SELECT ... FOR UPDATE&lt;/p&gt;

&lt;p&gt;To start, let’s consider a simple example that demonstrates row-level locking — an essential feature that prevents multiple users from changing the same record at the same time.&lt;/p&gt;

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

&lt;p&gt;Lock Riya's row&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Riya' FOR UPDATE;&lt;br&gt;
Update Arjun's balance (allowed if not locked by another session)&lt;br&gt;
UPDATE Accounts SET balance = balance + 10 WHERE name = 'Arjun';&lt;/p&gt;

&lt;p&gt;In the above example, we begin a transaction using the START TRANSACTION command. The statement SELECT ... FOR UPDATE is used to lock Riya’s row, which means that as long as this transaction remains active, no other user or session can modify that particular record. This kind of locking is incredibly useful in scenarios like banking systems or online wallets, where two users might attempt to modify the same account balance simultaneously.&lt;/p&gt;

&lt;p&gt;By locking the row until the transaction is either committed or rolled back, MySQL ensures that data changes are applied safely and in the correct order. Meanwhile, other rows — such as Arjun’s — remain accessible for updates by other transactions, allowing parallel processing without conflicts.&lt;/p&gt;

&lt;p&gt;💾 Scenario 2: Rolling Back a Transaction&lt;/p&gt;

&lt;p&gt;Now, let’s look at how MySQL lets you undo changes using the ROLLBACK command. This feature is crucial whenever an operation fails or you need to revert modifications after an error.&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
 Transfer funds from Riya to Arjun&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE name = 'Riya';&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE name = 'Arjun';&lt;/p&gt;

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

&lt;p&gt;Verify balances&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;Here, the idea is simple: Riya is transferring ₹500 to Arjun. Both updates happen inside a transaction, meaning MySQL treats them as a single logical unit of work. If everything goes as expected, the transaction can be committed, permanently saving the changes. But if something goes wrong midway — for example, a constraint fails or the server crashes — you can issue a ROLLBACK command to revert all changes made in that session.&lt;/p&gt;

&lt;p&gt;This approach guarantees that your data never ends up in an incomplete or inconsistent state. It’s like having an undo button for your database operations — one that ensures reliability and prevents data corruption.&lt;/p&gt;

&lt;p&gt;🔄 Scenario 3: Locking Arjun, Updating Riya&lt;/p&gt;

&lt;p&gt;In the final example, let’s flip the situation around. Here, we’ll lock one user’s record and update another’s, illustrating how MySQL provides fine-grained concurrency control.&lt;/p&gt;

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

&lt;p&gt;Lock Arjun's row&lt;br&gt;
SELECT * FROM Accounts WHERE name = 'Arjun' FOR UPDATE;&lt;br&gt;
Update Riya's balance&lt;br&gt;
UPDATE Accounts SET balance = balance + 20 WHERE name = 'Riya';&lt;/p&gt;

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

&lt;p&gt;Transactions ensure that multiple operations are treated as one unit — either all succeed or all fail.&lt;/p&gt;

&lt;p&gt;Row-level locking prevents data conflicts by restricting access to specific rows during transactions.&lt;/p&gt;

&lt;p&gt;ROLLBACK allows you to revert changes safely in case of errors or failed operations.&lt;/p&gt;

&lt;p&gt;These mechanisms together help maintain data consistency, accuracy, and system stability, even under heavy load.&lt;/p&gt;

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

&lt;p&gt;Exploring these MySQL features through Oracle Live SQL or your local environment can really strengthen your understanding of how databases maintain order in complex, multi-user systems. Once you start experimenting with transactions and locks, you’ll realize how essential they are for real-world applications like banking, e-commerce, and analytics.&lt;/p&gt;

&lt;p&gt;The more you play with these commands — testing commits, rollbacks, and concurrent updates the more confident you’ll become in building safe, reliable, and high-performance database systems.&lt;/p&gt;

&lt;p&gt;Special thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guidance throughout this assignment. &lt;/p&gt;

&lt;p&gt;&lt;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%2Foyr5mjxd3jb6eaig7qeq.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%2Foyr5mjxd3jb6eaig7qeq.jpg" alt=" " width="800" height="501"&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%2Fig0q8bppn8er4i9color.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%2Fig0q8bppn8er4i9color.jpg" alt=" " width="800" height="526"&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%2Fpumd2f1mwlvtcq7m590l.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%2Fpumd2f1mwlvtcq7m590l.jpg" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>coding</category>
      <category>sql</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>ACID Properties with SQL Transactions in DBMS</title>
      <dc:creator>Rithika</dc:creator>
      <pubDate>Mon, 06 Oct 2025 14:06:16 +0000</pubDate>
      <link>https://dev.to/rithika07032007/acid-properties-with-sql-transactions-in-dbms-346</link>
      <guid>https://dev.to/rithika07032007/acid-properties-with-sql-transactions-in-dbms-346</guid>
      <description>&lt;p&gt;🔍 Demystifying SQL Constraints with Oracle Live SQL&lt;/p&gt;

&lt;p&gt;Lately, I’ve been exploring Oracle Live SQL, and it’s been an exciting deep dive into how constraints and transaction control maintain the accuracy and reliability of data. I thought I’d share a few takeaways from my learning journey — especially how constraints act as invisible guards for your database!&lt;/p&gt;

&lt;p&gt;🧱 Understanding Why Constraints Matter&lt;/p&gt;

&lt;p&gt;When you design a database, constraints are like the rules that keep your data honest. &lt;/p&gt;

&lt;p&gt;They prevent invalid entries and ensure your tables stay consistent.&lt;/p&gt;

&lt;p&gt;Here’s a simple example I practiced:&lt;/p&gt;

&lt;p&gt;CREATE TABLE ACCOUNTS (&lt;br&gt;
  account_id NUMBER,&lt;br&gt;
  account_type VARCHAR2(20),&lt;br&gt;
  balance NUMBER,&lt;br&gt;
  CONSTRAINT acc_pk PRIMARY KEY (account_id),&lt;br&gt;
  CONSTRAINT acc_balance_ck CHECK (balance &amp;gt;= 0) -- No negative balances allowed!&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;This structure guarantees two important things:&lt;/p&gt;

&lt;p&gt;Every account must have a unique identifier.&lt;/p&gt;

&lt;p&gt;No one can insert a negative balance, ensuring clean and logical financial data.&lt;/p&gt;

&lt;p&gt;💡 In short: Constraints keep your tables reliable even before a single line of application code is written.&lt;/p&gt;

&lt;p&gt;⚙️ Playing with Transactions: Merge or Mayhem?&lt;/p&gt;

&lt;p&gt;Next, I experimented with transactions to see how SQL behaves when duplicate or conflicting data is inserted.&lt;/p&gt;

&lt;p&gt;This helped me understand how constraints interact with multiple inserts inside a single block.&lt;/p&gt;

&lt;p&gt;BEGIN&lt;br&gt;
  INSERT INTO Accounts VALUES ('David', 3000);&lt;br&gt;
  INSERT INTO Accounts VALUES ('David', 4000);&lt;br&gt;
END;&lt;/p&gt;

&lt;p&gt;Depending on how your schema is designed, this block might:&lt;/p&gt;

&lt;p&gt;Merge the balances intelligently (if logic is built to handle it), or&lt;/p&gt;

&lt;p&gt;Throw an error for violating the unique or primary key constraint.&lt;/p&gt;

&lt;p&gt;This experiment taught me that transactions are not just about committing data—they’re also about managing conflicts and maintaining data accuracy when something goes wrong.&lt;/p&gt;

&lt;p&gt;🧠 The Power of Minimal Insert Testing&lt;/p&gt;

&lt;p&gt;To better understand how constraints respond to incomplete data, I tried inserting a record without all the required fields:&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts (acc_no, name)&lt;br&gt;
VALUES (101, 'Pranav');&lt;/p&gt;

&lt;p&gt;If your table enforces a NOT NULL constraint or a DEFAULT value for the balance column, the database will either:&lt;/p&gt;

&lt;p&gt;Reject the record immediately (constraint violation), or&lt;/p&gt;

&lt;p&gt;Automatically fill in the missing value with a default.&lt;/p&gt;

&lt;p&gt;Either way, it’s a great way to test the strength and flexibility of your schema design.&lt;/p&gt;

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

&lt;p&gt;Primary Key → Ensures every row is unique.&lt;/p&gt;

&lt;p&gt;Check Constraint → Validates that your data follows logical rules.&lt;/p&gt;

&lt;p&gt;Transactions → Help you handle multiple actions safely.&lt;/p&gt;

&lt;p&gt;Testing Inserts → Reveals how well your design prevents bad data.&lt;/p&gt;

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

&lt;p&gt;Working with Oracle Live SQL gave me a hands-on understanding of how small details—like a single constraint—can protect entire databases from corruption. &lt;/p&gt;

&lt;p&gt;Whether you’re a beginner or brushing up on SQL fundamentals, playing around with constraints and transactions is one of the best ways to build intuition for data integrity.&lt;/p&gt;

&lt;p&gt;Thanks &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for his guidance and support.&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%2Fsb993fuhphzouh5nyh5v.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%2Fsb993fuhphzouh5nyh5v.jpg" alt=" " width="800" height="340"&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%2Frck892hhu1pqfv7gsqjj.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%2Frck892hhu1pqfv7gsqjj.jpg" alt=" " width="800" height="329"&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%2Fptp3bsy3g6qc6v7diucv.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%2Fptp3bsy3g6qc6v7diucv.jpg" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

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

</description>
      <category>database</category>
      <category>coding</category>
      <category>sql</category>
      <category>learning</category>
    </item>
    <item>
      <title>Indexing,Hashing &amp; Query optimization in DBMS</title>
      <dc:creator>Rithika</dc:creator>
      <pubDate>Mon, 06 Oct 2025 13:51:55 +0000</pubDate>
      <link>https://dev.to/rithika07032007/indexinghashing-query-optimization-in-dbms-p18</link>
      <guid>https://dev.to/rithika07032007/indexinghashing-query-optimization-in-dbms-p18</guid>
      <description>&lt;p&gt;Getting Hands-On with Oracle Live SQL: My Journey into Database Fundamentals&lt;/p&gt;

&lt;p&gt;I recently dove into Oracle Live SQL to sharpen my database skills, and I wanted to share some of the cool things I learned—especially around clusters, indexing, and querying data efficiently.&lt;/p&gt;

&lt;p&gt;🧩Creating a Clustered Setup&lt;/p&gt;

&lt;p&gt;I started by experimenting with clusters, which allow related tables to be stored together physically. Here's a snippet of what I tried:&lt;/p&gt;

&lt;p&gt;CREATE CLUSTER emp_dept_cluster (&lt;br&gt;
deptno NUMBER(3)&lt;br&gt;
)&lt;br&gt;
SIZE 512;&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_emp_dept_cluster&lt;br&gt;
ON CLUSTER emp_dept_cluster;&lt;/p&gt;

&lt;p&gt;Then I created two tables—dept and emp—that share the deptno key and are clustered together:&lt;/p&gt;

&lt;p&gt;CREATE TABLE dept (&lt;br&gt;
deptno NUMBER(3),&lt;br&gt;
dname VARCHAR2(14),&lt;br&gt;
loc VARCHAR2(13)&lt;br&gt;
)&lt;br&gt;
CLUSTER emp_dept_cluster (deptno);&lt;/p&gt;

&lt;p&gt;CREATE TABLE emp (&lt;br&gt;
empno NUMBER(4),&lt;br&gt;
ename VARCHAR2(10),&lt;br&gt;
job VARCHAR2(9),&lt;br&gt;
mgr NUMBER(4),&lt;br&gt;
hiredate DATE,&lt;br&gt;
sal NUMBER(7,2),&lt;br&gt;
comm NUMBER(7,2),&lt;br&gt;
deptno NUMBER(3)&lt;br&gt;
)&lt;br&gt;
CLUSTER emp_dept_cluster (deptno);&lt;/p&gt;

&lt;p&gt;Pro tip: If you get ORA-00955: name is already used by an existing object, it means you’ve already created that object—just drop it or rename it before retrying.&lt;/p&gt;

&lt;p&gt;🎓Building a Student Table and Querying Data&lt;/p&gt;

&lt;p&gt;Next, I created a simple student table and practiced inserting and retrieving data:&lt;/p&gt;

&lt;p&gt;CREATE TABLE student (&lt;br&gt;
roll_no NUMBER,&lt;br&gt;
name VARCHAR2(20),&lt;br&gt;
dept VARCHAR2(10),&lt;br&gt;
cgpa NUMBER&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO student VALUES (101, 'Alice', 'CS', 8.5);&lt;br&gt;
INSERT INTO student VALUES (110, 'Bob', 'IT', 7.8);&lt;br&gt;
-- more inserts...&lt;br&gt;
SELECT * FROM student;&lt;/p&gt;

&lt;p&gt;This helped me understand how to structure data and run basic queries.&lt;/p&gt;

&lt;p&gt;⚡Indexing for Performance&lt;/p&gt;

&lt;p&gt;I also explored how indexes improve query performance:&lt;/p&gt;

&lt;p&gt;-- Primary key index is implicit&lt;br&gt;
CREATE TABLE student (&lt;br&gt;
roll_no NUMBER PRIMARY KEY,&lt;br&gt;
name VARCHAR2(50),&lt;br&gt;
dept VARCHAR2(50),&lt;br&gt;
cgpa NUMBER(3,2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Explicit index on name&lt;br&gt;
CREATE INDEX idx_name ON student(name);&lt;/p&gt;

&lt;p&gt;-- Composite index&lt;br&gt;
CREATE INDEX idx_dept_cgpa ON student(dept, cgpa);&lt;/p&gt;

&lt;p&gt;Using these indexes, I ran queries like:&lt;/p&gt;

&lt;p&gt;SELECT * FROM student WHERE name = 'Jack';&lt;br&gt;
SELECT * FROM student WHERE dept = 'CSE' AND cgpa = 9.5;&lt;/p&gt;

&lt;p&gt;The results were fast and efficient—Oracle Live SQL even shows you which indexes are being used!&lt;/p&gt;

&lt;p&gt;🧮Categorizing with CASE Statements&lt;/p&gt;

&lt;p&gt;Finally, I played with the CASE clause to categorize products based on price:&lt;/p&gt;

&lt;p&gt;SELECT product_id, product_name,&lt;br&gt;
CASE&lt;br&gt;
WHEN list_price &amp;lt; 200 THEN 'Low'&lt;br&gt;
WHEN list_price BETWEEN 200 AND 500 THEN 'Medium'&lt;br&gt;
ELSE 'High'&lt;br&gt;
END AS cost&lt;br&gt;
FROM products&lt;br&gt;
ORDER BY cost;&lt;/p&gt;

&lt;p&gt;This is a great way to add logic directly into your queries.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding me through indexing and query optimization concepts.&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%2Fb6dx2fyjaydr5oojji1k.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%2Fb6dx2fyjaydr5oojji1k.jpg" alt=" " width="800" height="385"&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%2Fxo61109g5p6mhn5uq645.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%2Fxo61109g5p6mhn5uq645.jpg" alt=" " width="800" height="375"&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%2F6qm12teneak7fqnpqj1z.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%2F6qm12teneak7fqnpqj1z.jpg" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>oracle</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cursor &amp; Trigger in DBMS</title>
      <dc:creator>Rithika</dc:creator>
      <pubDate>Mon, 06 Oct 2025 09:08:55 +0000</pubDate>
      <link>https://dev.to/rithika07032007/cursor-trigger-in-dbms-3haa</link>
      <guid>https://dev.to/rithika07032007/cursor-trigger-in-dbms-3haa</guid>
      <description>&lt;p&gt;When handling databases, there are times we need to process records one at a time (using Cursors) or automatically respond to specific events (using Triggers).&lt;/p&gt;

&lt;p&gt;In this guide, we’ll:&lt;br&gt;
✅ Create a Cursor to fetch employees earning more than 50,000&lt;br&gt;
✅ Implement an AFTER-INSERT Trigger to maintain a student audit log&lt;/p&gt;

&lt;p&gt;🔹 Cursor&lt;/p&gt;

&lt;p&gt;A cursor acts as a pointer that allows processing query results row by row instead of all together. This is especially useful when applying custom logic to individual records.&lt;/p&gt;

&lt;p&gt;Step 1: Employee Cursor Example&lt;/p&gt;

&lt;p&gt;Let’s create a cursor to list employees with a salary above 50,000.&lt;/p&gt;

&lt;p&gt;Step i: Create Employee Table&lt;/p&gt;

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

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

&lt;p&gt;INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (1, 'Renner', 60000);&lt;br&gt;
INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (2, 'Samuel', 45000);&lt;br&gt;
INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (3, 'Ana', 75000);&lt;br&gt;
INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (4, 'Kylie', 50000);&lt;/p&gt;

&lt;p&gt;Step iii: Cursor Implementation&lt;/p&gt;

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

&lt;p&gt;A trigger is a stored procedure that runs automatically when a defined event occurs (INSERT, UPDATE, or DELETE).&lt;/p&gt;

&lt;p&gt;Step 2: AFTER INSERT Trigger&lt;/p&gt;

&lt;p&gt;We’ll create a Students table and a Students_Audit table to log new registrations.&lt;/p&gt;

&lt;p&gt;Step i: Create Students Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students2 (&lt;br&gt;
  Student_ID NUMBER PRIMARY KEY,&lt;br&gt;
  Student_Name VARCHAR2(50),&lt;br&gt;
  Course VARCHAR2(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Step ii: Create Students_Audit Table&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students_Audit (&lt;br&gt;
  Audit_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,&lt;br&gt;
  Student_ID NUMBER,&lt;br&gt;
  Student_Name VARCHAR2(50),&lt;br&gt;
  Action VARCHAR2(50),&lt;br&gt;
  Action_Time TIMESTAMP&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;CREATE OR REPLACE TRIGGER trg_after_student_insert&lt;br&gt;
AFTER INSERT ON Students2&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
  INSERT INTO Students_Audit (Student_ID, Student_Name, Action, Action_Time)&lt;br&gt;
  VALUES (:NEW.Student_ID, :NEW.Student_Name, 'INSERT', SYSTIMESTAMP);&lt;br&gt;
END;&lt;br&gt;
/&lt;br&gt;
Step iv: Test the Trigger&lt;/p&gt;

&lt;p&gt;INSERT INTO Students2 (Student_ID, Student_Name, Course) VALUES (1, 'Renner', 'Computer Science');&lt;br&gt;
INSERT INTO Students2 (Student_ID, Student_Name, Course) VALUES (2, 'Martin', 'Mechanical Engineering');&lt;/p&gt;

&lt;p&gt;Step v: Verify Audit Table&lt;/p&gt;

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

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

&lt;p&gt;In this tutorial, we explored:&lt;/p&gt;

&lt;p&gt;Cursor → Process query results row by row&lt;br&gt;
Trigger → Automatically log student registrations after insertion&lt;/p&gt;

&lt;p&gt;These tools bring efficiency and automation to your SQL workflows!&lt;/p&gt;

&lt;p&gt;A special thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;  Sir for the guidance and support in completing this DBMS assignment successfully.&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%2Fkdakaafisicbpkhd2zuv.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%2Fkdakaafisicbpkhd2zuv.jpg" alt=" " width="800" height="450"&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%2Fiy045qt7yshv7rt4a97h.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%2Fiy045qt7yshv7rt4a97h.jpg" alt=" " width="800" height="450"&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%2Fz9m46kkdyehrfgwba1ss.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%2Fz9m46kkdyehrfgwba1ss.jpg" alt=" " width="800" height="450"&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%2F9vnqb4k7cnbweezft9au.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%2F9vnqb4k7cnbweezft9au.jpg" alt=" " width="800" height="450"&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%2Fdhnrk0fcuu2t3d1uduis.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%2Fdhnrk0fcuu2t3d1uduis.jpg" alt=" " width="800" height="450"&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%2F2hh51u4glmc7xffydhto.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%2F2hh51u4glmc7xffydhto.jpg" alt=" " width="800" height="450"&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%2Frvryo56bqk74jtce5mcg.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%2Frvryo56bqk74jtce5mcg.jpg" alt=" " width="800" height="450"&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%2Fmryxvuy8ho4vdb4h7agh.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%2Fmryxvuy8ho4vdb4h7agh.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>coding</category>
      <category>sql</category>
      <category>database</category>
    </item>
    <item>
      <title>Understanding Database Normalization (1NF 2NF 3NF) with Oracle SQL — Step-by-Step Example</title>
      <dc:creator>Rithika</dc:creator>
      <pubDate>Mon, 06 Oct 2025 08:29:23 +0000</pubDate>
      <link>https://dev.to/rithika07032007/understanding-database-normalization-1nf-2nf-3nf-with-oracle-sql-step-by-step-example-5chi</link>
      <guid>https://dev.to/rithika07032007/understanding-database-normalization-1nf-2nf-3nf-with-oracle-sql-step-by-step-example-5chi</guid>
      <description>&lt;p&gt;Database normalization is a crucial concept in DBMS that ensures data integrity and eliminates redundancy.&lt;br&gt;
In this article, I’ve explained 1NF, 2NF, and 3NF through a real-world example and demonstrated each step using Oracle Live SQL.&lt;/p&gt;

&lt;p&gt;🧩 The Original Data Structure&lt;br&gt;
We’ll begin with this unnormalized dataset, which contains redundant information:&lt;/p&gt;

&lt;p&gt;StudentID  StudentName  CourseID  CourseName  Instructor  InstructorPhone&lt;br&gt;
S01        Abi       C101      DBMS        Dr. Saran   9876543210&lt;br&gt;
S01        Abi       C102      Data Mining Dr. Mehta   9123456780&lt;br&gt;
S02        Priya        C101      DBMS        Dr. Kumar   9876543210&lt;br&gt;
S03        Kiran        C103      AI          Dr. Rao     9988776655&lt;/p&gt;

&lt;p&gt;⚠️ Step 1 — Detecting Data Issues&lt;br&gt;
In the above table, we can identify three common anomalies:&lt;/p&gt;

&lt;p&gt;🔸 Insertion anomaly – Can’t add a new course unless a student enrolls in it.&lt;br&gt;
🔸 Update anomaly – If Dr. Kumar changes his phone number, it must be modified in multiple rows.&lt;br&gt;
🔸 Deletion anomaly – If all students drop the “AI” course, we lose Dr. Rao’s details completely.&lt;/p&gt;

&lt;p&gt;We’ll now fix these issues using normalization, step by step.&lt;/p&gt;

&lt;p&gt;🧱 Step 2 — Transform to 1NF (First Normal Form)&lt;/p&gt;

&lt;p&gt;Rule: Every field should hold only atomic (single) values, and repeating groups must be removed.&lt;/p&gt;

&lt;p&gt;✅ Our data already meets 1NF requirements, but let’s formally create it in SQL:&lt;/p&gt;

&lt;p&gt;CREATE TABLE BaseTable (&lt;br&gt;
    StudentID VARCHAR2(10),&lt;br&gt;
    StudentName VARCHAR2(50),&lt;br&gt;
    CourseID VARCHAR2(10),&lt;br&gt;
    CourseName VARCHAR2(50),&lt;br&gt;
    Instructor VARCHAR2(50),&lt;br&gt;
    InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧩 Step 3 — Move to 2NF (Second Normal Form)&lt;/p&gt;

&lt;p&gt;Rule: Eliminate partial dependencies — every non-key attribute must depend on the entire composite key.&lt;/p&gt;

&lt;p&gt;Here, the composite key is (StudentID, CourseID).&lt;/p&gt;

&lt;p&gt;We’ll divide the structure into Student, Course, and Enrollment tables:&lt;/p&gt;

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

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

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

&lt;p&gt;🧠 Step 4 — Upgrade to 3NF (Third Normal Form)&lt;/p&gt;

&lt;p&gt;Rule: Remove transitive dependencies — non-key attributes should not depend on other non-key attributes.&lt;/p&gt;

&lt;p&gt;Since InstructorPhone depends on Instructor, not CourseID, we’ll introduce a separate Instructor table:&lt;/p&gt;

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

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

&lt;p&gt;🧾 Step 5 — Final Normalized Structure&lt;br&gt;
Tables Overview:&lt;/p&gt;

&lt;p&gt;Student(StudentID, StudentName)&lt;/p&gt;

&lt;p&gt;Instructor(InstructorID, InstructorName, InstructorPhone)&lt;/p&gt;

&lt;p&gt;Course(CourseID, CourseName, InstructorID)&lt;/p&gt;

&lt;p&gt;Enrollment(EnrollID, StudentID, CourseID)&lt;/p&gt;

&lt;p&gt;This model completely removes redundancy and ensures a consistent, scalable database structure.&lt;/p&gt;

&lt;p&gt;🧩 Step 6 — Insert Sample Records&lt;/p&gt;

&lt;p&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;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;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;INSERT INTO Enrollment (StudentID, CourseID) VALUES ('S01', 'C101');&lt;br&gt;
INSERT INTO Enrollment (StudentID, CourseID) VALUES ('S01', 'C102');&lt;br&gt;
INSERT INTO Enrollment (StudentID, CourseID) VALUES ('S02', 'C101');&lt;br&gt;
INSERT INTO Enrollment (StudentID, CourseID) VALUES ('S03', 'C103');&lt;/p&gt;

&lt;p&gt;🔍 Step 7 — Retrieve Data Using JOINs&lt;/p&gt;

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

&lt;p&gt;Output:&lt;br&gt;
StudentID  StudentName  CourseName   InstructorName  InstructorPhone&lt;br&gt;
S01        Arjun        DBMS         Dr. Kumar       9876543210&lt;br&gt;
S01        Arjun        Data Mining  Dr. Mehta       9123456780&lt;br&gt;
S02        Priya        DBMS         Dr. Kumar       9876543210&lt;br&gt;
S03        Kiran        AI           Dr. Rao         9988776655&lt;/p&gt;

&lt;p&gt;✅ Final Insights&lt;/p&gt;

&lt;p&gt;Through normalization:&lt;/p&gt;

&lt;p&gt;Data duplication is minimized&lt;br&gt;
Insertion, update, and deletion anomalies are resolved&lt;br&gt;
The database becomes more structured, consistent, and efficient&lt;br&gt;
By applying these steps in Oracle Live SQL, you can clearly visualize how normalization enhances your database design.&lt;/p&gt;

&lt;p&gt;A special thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;  sir for guiding me throughout these normalization concepts.&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%2Fmd23qbzylplmwjpxgapq.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%2Fmd23qbzylplmwjpxgapq.jpg" alt=" " width="800" height="450"&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%2F29f6iylhzq8vyfnewskk.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%2F29f6iylhzq8vyfnewskk.jpg" alt=" " width="800" height="450"&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%2Ft6rrc2jn18k2or2j7n88.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%2Ft6rrc2jn18k2or2j7n88.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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