<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rajalakshmi</title>
    <description>The latest articles on Forem by Rajalakshmi (@rajalakshmi_943aa111ee5c0).</description>
    <link>https://forem.com/rajalakshmi_943aa111ee5c0</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%2F3450857%2Fae2e87a7-1ac7-4c03-9fc5-b19af92ca748.png</url>
      <title>Forem: Rajalakshmi</title>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rajalakshmi_943aa111ee5c0"/>
    <language>en</language>
    <item>
      <title>Crud Operation in MongoDB</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Wed, 08 Oct 2025 16:32:12 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/crud-operation-in-mongodb-2300</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/crud-operation-in-mongodb-2300</guid>
      <description>&lt;p&gt;MongoDB is a leading NoSQL database widely used for cloud-native and scalable applications. Unlike relational databases with rigid schemas, it stores data in flexible JSON-like documents, making it easy to model real-world entities such as students in a college database.&lt;/p&gt;

&lt;p&gt;At its core, MongoDB supports CRUD operations — Create, Read, Update, and Delete — to add, retrieve, modify, and remove data.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll perform CRUD operations on a student database schema by:&lt;/p&gt;

&lt;p&gt;Inserting multiple student records&lt;br&gt;
Querying and filtering data&lt;br&gt;
Updating details like CGPA and year&lt;br&gt;
Deleting records with conditions&lt;br&gt;
We’ll use MongoDB Atlas, the cloud-hosted service, for hands-on practice. By the end, you’ll have practical experience managing data in MongoDB — an essential skill for modern development.&lt;/p&gt;

&lt;p&gt;🧱 &lt;strong&gt;Schema – Collection: students&lt;/strong&gt;&lt;br&gt;
Each student record (document) follows this structure:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
"student_id": "ST001",&lt;br&gt;
"name": "Aarav",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "AI &amp;amp; DS",&lt;br&gt;
"year": 2,&lt;br&gt;
"cgpa": 8.9&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;⚙️ 1️⃣ CREATE (INSERT)&lt;br&gt;
In MongoDB Atlas → Collections → Insert Document&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
"student_id": "ST001",&lt;br&gt;
"name": "Aarav",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "AI &amp;amp; DS",&lt;br&gt;
"year": 2,&lt;br&gt;
"cgpa": 8.9&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "ST002",&lt;br&gt;
"name": "Diya",&lt;br&gt;
"age": 19,&lt;br&gt;
"department": "CSE",&lt;br&gt;
"year": 1,&lt;br&gt;
"cgpa": 9.2&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "ST003",&lt;br&gt;
"name": "Rahul",&lt;br&gt;
"age": 21,&lt;br&gt;
"department": "ECE",&lt;br&gt;
"year": 3,&lt;br&gt;
"cgpa": 7.8&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "ST004",&lt;br&gt;
"name": "Meera",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "IT",&lt;br&gt;
"year": 2,&lt;br&gt;
"cgpa": 9.5&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "ST005",&lt;br&gt;
"name": "Vikram",&lt;br&gt;
"age": 22,&lt;br&gt;
"department": "MECH",&lt;br&gt;
"year": 3,&lt;br&gt;
"cgpa": 6.9&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%2Fkbepmxj4p3j6hhgejg8d.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%2Fkbepmxj4p3j6hhgejg8d.jpeg" alt=" " width="800" height="340"&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%2F17kmgxu8z3df5gro6pbb.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%2F17kmgxu8z3df5gro6pbb.jpeg" alt=" " width="800" height="337"&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%2F2k43rlxygjo4mvppotp4.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%2F2k43rlxygjo4mvppotp4.jpeg" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Result in Atlas:&lt;br&gt;
Inserted 5 documents successfully.&lt;/p&gt;

&lt;p&gt;🔍 2️⃣ READ (QUERY)&lt;br&gt;
Run the following queries&lt;/p&gt;

&lt;p&gt;(a) Display all student records&lt;br&gt;
find()&lt;/p&gt;

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

&lt;p&gt;(c) Find students belonging to Computer Science departments&lt;br&gt;
({ department: { $in: ["CSE", "AI &amp;amp; DS"] } })&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%2Fk9eqh17flfekcwseju6o.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%2Fk9eqh17flfekcwseju6o.jpeg" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📊 This helps identify top performers or department-based groups easily.&lt;/p&gt;

&lt;p&gt;✏️ 3️⃣ UPDATE (MODIFY RECORDS)&lt;/p&gt;

&lt;p&gt;(a) Update CGPA of a specific student&lt;br&gt;
{ student_id: "ST002" },&lt;br&gt;
{ $set: { cgpa: 9.6 } }&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%2F69upabt23x1fjapvibm3.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%2F69upabt23x1fjapvibm3.jpeg" alt=" " width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Matched 1 document, modified 1 document.&lt;/p&gt;

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

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

&lt;p&gt;💡 $inc automatically increments numerical fields — perfect for promotions or increments.&lt;/p&gt;

&lt;p&gt;🗑️ 4️⃣ DELETE (REMOVE RECORDS)&lt;/p&gt;

&lt;p&gt;(a) Delete one student by ID&lt;br&gt;
({ student_id: "ST005" })&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%2Fr49rngogxgwmi62o9iu7.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%2Fr49rngogxgwmi62o9iu7.jpeg" alt=" " width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OUTPUT:&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%2Fsuvgq53mli8u8ypfjk5h.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%2Fsuvgq53mli8u8ypfjk5h.jpeg" alt=" " width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(b) Delete all students with CGPA &amp;lt; 7.5&lt;br&gt;
({ cgpa: { $lt: 7.5 } })&lt;/p&gt;

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

&lt;p&gt;OUTPUT:&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%2Fh6c4ypr9v9v5eghw9x3g.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%2Fh6c4ypr9v9v5eghw9x3g.jpeg" alt=" " width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧹 Removes low-performing or outdated records, keeping your data clean.&lt;/p&gt;

&lt;p&gt;🎓 Learning Outcomes&lt;br&gt;
By performing these CRUD operations, you’ll learn to:&lt;/p&gt;

&lt;p&gt;Work with MongoDB Atlas Cloud Interface&lt;br&gt;
Write and execute basic MongoDB queries&lt;br&gt;
Update and delete data safely&lt;br&gt;
Export and visualize your collections&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>mongodb</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Normalisation</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Wed, 08 Oct 2025 15:41:45 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/normalisation-hjj</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/normalisation-hjj</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Normalization?&lt;/strong&gt;&lt;br&gt;
Normalization is the process of organizing data in a database to reduce redundancy (repeated data) and improve data integrity (accuracy and consistency).&lt;/p&gt;

&lt;p&gt;It divides a large, complex table into smaller, related tables and links them using foreign keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Normalization is Needed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To avoid data duplication&lt;br&gt;
To ensure data consistency&lt;br&gt;
To make data updates easier&lt;br&gt;
To save storage space&lt;br&gt;
To improve query performance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Normal Forms&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Each column contains atomic (single) values.&lt;br&gt;
No repeating groups or arrays.&lt;br&gt;
Each record should be unique (use a primary key).&lt;/p&gt;

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

&lt;p&gt;Table must be in 1NF.&lt;br&gt;
No partial dependency: non-key columns must depend on the entire primary key, not part of it.&lt;/p&gt;

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

&lt;p&gt;Table must be in 2NF.&lt;br&gt;
No transitive dependency: non-key attributes shouldn’t depend on other non-key attributes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BCNF (Boyce-Codd Normal Form)&lt;/strong&gt;&lt;br&gt;
A stronger version of 3NF; every determinant must be a candidate key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4NF (Fourth Normal Form)&lt;/strong&gt;&lt;br&gt;
Removes multi-valued dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5NF (Fifth Normal Form)&lt;/strong&gt;&lt;br&gt;
Deals with join dependencies — ensures data reconstruction without redundancy.&lt;/p&gt;

&lt;p&gt;We shall use the following data as the starting point:&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%2Fwlk3ijv1cqa5uvtgcnrl.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%2Fwlk3ijv1cqa5uvtgcnrl.jpeg" alt=" " width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1 . Identify anomalies (insertion, update, deletion) in this table.&lt;/p&gt;

&lt;p&gt;🔸 Insertion Anomaly&lt;/p&gt;

&lt;p&gt;We can’t add a new course until at least one student registers for it, because all course data is mixed with student data.&lt;/p&gt;

&lt;p&gt;e.g., Can’t add a new course C104 – ML – Dr. Sharma without a student.&lt;/p&gt;

&lt;p&gt;🔸 Update Anomaly&lt;/p&gt;

&lt;p&gt;If an instructor’s phone number changes, it must be updated in multiple rows.&lt;/p&gt;

&lt;p&gt;e.g., Dr. Kumar’s phone number appears twice.&lt;/p&gt;

&lt;p&gt;🔸 Deletion Anomaly&lt;/p&gt;

&lt;p&gt;If all students drop DBMS, deleting those rows also deletes Dr. Kumar and the course DBMS information.&lt;/p&gt;

&lt;p&gt;2 . Convert the table to 1NF and write the SQL CREATE TABLE statement for it.&lt;/p&gt;

&lt;p&gt;✅ The table already satisfies 1NF because:&lt;/p&gt;

&lt;p&gt;All values are atomic.&lt;br&gt;
Each row is unique (based on StudentID + CourseID).&lt;br&gt;
We’ll explicitly define a composite primary key (StudentID, CourseID).&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%2Fpat43ailzkqghy2tjojz.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%2Fpat43ailzkqghy2tjojz.jpeg" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 . Convert the table to 2NF and write SQL CREATE TABLE statements for the resulting tables, including primary keys.&lt;/p&gt;

&lt;p&gt;In the current table:&lt;/p&gt;

&lt;p&gt;StudentName depends only on StudentID&lt;br&gt;
CourseName, Instructor, and InstructorPhone depend only on CourseID&lt;br&gt;
So we separate Student and Course information.&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%2Fvtt2j16fitmpqso77wn9.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%2Fvtt2j16fitmpqso77wn9.jpeg" alt=" " width="800" height="513"&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%2Fya14fqbwq9x9lq8ozi64.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%2Fya14fqbwq9x9lq8ozi64.jpeg" alt=" " width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;4 . Convert the table to 3NF and write SQL CREATE TABLE statements, including foreign keys.&lt;/p&gt;

&lt;p&gt;Here, in Courses, InstructorPhone depends on Instructor, not on CourseID.&lt;/p&gt;

&lt;p&gt;So we separate instructor details into a new 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%2Fbbnx75czwwui7zmk808l.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%2Fbbnx75czwwui7zmk808l.jpeg" alt=" " width="800" height="511"&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%2F67i2348c2twgtu5eurv2.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%2F67i2348c2twgtu5eurv2.jpeg" alt=" " width="800" height="513"&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%2Fdmv0ngm22fe3z5co74by.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%2Fdmv0ngm22fe3z5co74by.jpeg" alt=" " width="800" height="497"&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%2F43v6jkaopqv1fy1cxcxz.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%2F43v6jkaopqv1fy1cxcxz.jpeg" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;br&gt;
5 . Insert the sample data into the normalized tables using INSERT INTO statements.&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%2Fcn5b5xb6y5pp2qetugj5.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%2Fcn5b5xb6y5pp2qetugj5.jpeg" alt=" " width="800" height="521"&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%2F3vhho9qpknwuj2zxgvmh.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%2F3vhho9qpknwuj2zxgvmh.jpeg" alt=" " width="800" height="572"&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%2F08oy241ich88qpgjff7z.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%2F08oy241ich88qpgjff7z.jpeg" alt=" " width="800" height="563"&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%2Fpydb9qlcrcb1km79zpyg.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%2Fpydb9qlcrcb1km79zpyg.jpeg" alt=" " width="800" height="522"&gt;&lt;/a&gt;&lt;br&gt;
6 . Write a query to list all students along with their courses and instructor names using JOINs.&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%2Fqje23or4jklo5g74ty1o.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%2Fqje23or4jklo5g74ty1o.jpeg" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>computerscience</category>
      <category>database</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Mon, 06 Oct 2025 17:28:40 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/indexing-hashing-query-optimization-2di7</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/indexing-hashing-query-optimization-2di7</guid>
      <description>&lt;p&gt;&lt;strong&gt;Indexing&lt;/strong&gt;&lt;br&gt;
Indexing is a technique to speed up data retrieval in a database. It creates a separate data structure (index) that helps locate records quickly without scanning the entire table.&lt;/p&gt;

&lt;p&gt;Common index types:&lt;/p&gt;

&lt;p&gt;B-Tree Index – used for searching and sorting.&lt;br&gt;
B+ Tree Index – efficient for range queries.&lt;br&gt;
Hash Index – used for exact match lookups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hashing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hashing uses a hash function to convert a key (like dept) into a hash value that points to the location of the record.&lt;/p&gt;

&lt;p&gt;It provides fast access for equality searches but is not suitable for range-based queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Query Optimization is the process of choosing the most efficient way to execute a query.&lt;/p&gt;

&lt;p&gt;The optimizer analyzes indexes, joins, and conditions to minimize query execution time and improve performance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a table Students with fields (roll_no, name, dept, cgpa)&lt;/li&gt;
&lt;/ol&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%2Fn3dqgoioccfjuqkvlkpm.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%2Fn3dqgoioccfjuqkvlkpm.jpeg" alt=" " width="616" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 . Insert at least 20 sample records.&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%2Fzgnjv14607xuoj63lk2z.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%2Fzgnjv14607xuoj63lk2z.jpeg" alt=" " width="619" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 . Create a B-Tree index on the roll_no column of the Students 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%2Fgqq4fenarsgaakqis54b.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%2Fgqq4fenarsgaakqis54b.jpeg" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4 . Execute a query to fetch the details of a student with roll_no = 110.&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%2F5mm8ubfx4a7brp5zm4o3.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%2F5mm8ubfx4a7brp5zm4o3.jpeg" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5 . Create a B+ Tree index on the cgpa column of the Students 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%2Fi7b9sonhv3vw0z40mcxm.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%2Fi7b9sonhv3vw0z40mcxm.jpeg" alt=" " width="719" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6 . Write a query to display all students with cgpa &amp;gt; 8.0.&lt;/p&gt;

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

&lt;p&gt;7 . Create a Hash index on the dept column of the Students 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%2Fou1p4ois1fn9mzii5qh5.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%2Fou1p4ois1fn9mzii5qh5.jpeg" alt=" " width="565" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8 . Run a query to retrieve all students from the 'CSBS' department.&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%2Fksugu74dr88kvl8p4opo.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%2Fksugu74dr88kvl8p4opo.jpeg" alt=" " width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>database</category>
      <category>performance</category>
    </item>
    <item>
      <title>The Backbone of Database Reliability:</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Mon, 06 Oct 2025 15:50:41 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/the-backbone-of-database-reliability-3nn2</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/the-backbone-of-database-reliability-3nn2</guid>
      <description>&lt;p&gt;When working with relational databases, ACID properties ensure data is handled reliably, consistently, and safely.&lt;/p&gt;

&lt;p&gt;ACID stands for:&lt;/p&gt;

&lt;p&gt;Atomicity  – All-or-nothing transactions&lt;br&gt;
Consistency  – Database rules are preserved&lt;br&gt;
Isolation  – Transactions operate independently&lt;br&gt;
Durability  – Committed transactions persist permanently&lt;br&gt;
We’ll use an Accounts table to demonstrate each property step by step, with SQL examples you can try yourself.&lt;/p&gt;

&lt;p&gt;⭐Step 1: Create the Accounts Table and Insert Sample Data&lt;/p&gt;

&lt;p&gt;🧑‍💻CODE:&lt;/p&gt;

&lt;p&gt;CREATE TABLE Accounts (&lt;br&gt;
acc_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR(50),&lt;br&gt;
balance INT CHECK (balance &amp;gt;= 0));&lt;br&gt;
INSERT INTO Accounts (acc_no, name, balance) VALUES&lt;br&gt;
(101, 'Calindra', 5800),&lt;br&gt;
(102, 'Thalorin', 4200),&lt;br&gt;
(103, 'Veylith', 6900);&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%2Fdfbeyn7xbd0gosoydv0m.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%2Fdfbeyn7xbd0gosoydv0m.jpeg" alt=" " width="800" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;acc_no is the primary key, ensuring each account is unique 🔑&lt;br&gt;
balance has a CHECK constraint to prevent negative values ❌&lt;br&gt;
Sample data gives three accounts to work with for transactions ✅&lt;br&gt;
⭐Step 2: Atomicity 🧩 – All-or-Nothing Transactions&lt;/p&gt;

&lt;p&gt;Goal: Ensure that if part of a transaction fails, no partial updates occur.&lt;br&gt;
Scenario: Transfer 1500 from Calindra to Thalorin, but simulate an error midway.&lt;/p&gt;

&lt;p&gt;🧑‍💻CODE:&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 1500 WHERE acc_no = 101;&lt;br&gt;
UPDATE Accounts SET balance = balance + 1500 WHERE acc_no = 102;&lt;br&gt;
ROLLBACK;&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

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

&lt;p&gt;Observation:&lt;/p&gt;

&lt;p&gt;After ROLLBACK, all balances remain unchanged 🔄&lt;br&gt;
Prevents incomplete transactions, critical in banking systems 💳&lt;br&gt;
⭐Step 3: Consistency ⚖️ – Enforcing Data Rules&lt;/p&gt;

&lt;p&gt;Goal: Ensure the database always remains in a valid state.&lt;br&gt;
Scenario: Try to insert a record with a negative balance:&lt;/p&gt;

&lt;p&gt;🧑‍💻CODE:&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES (104, 'Elarion', -2000);&lt;/p&gt;

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

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

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

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

&lt;p&gt;Database constraints ❌ prevent invalid data&lt;br&gt;
Consistency ensures all business rules and constraints are preserved&lt;br&gt;
Tip 💡: Use constraints, triggers, and validations to maintain consistent data, especially in critical systems like finance, healthcare, or inventory.&lt;/p&gt;

&lt;p&gt;⭐Step 4: Isolation 🚧 – Transactions Don’t Interfere&lt;/p&gt;

&lt;p&gt;Goal: Ensure simultaneous transactions don’t cause conflicts.&lt;br&gt;
Scenario: Simulate two sessions:&lt;/p&gt;

&lt;p&gt;🧑‍💻CODE:&lt;br&gt;
START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 700 WHERE acc_no = 101;&lt;br&gt;
SELECT balance FROM Accounts WHERE acc_no = 101;&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;Session 1: Update an account but do not commit yet:&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%2Flcehi9ghzbn2rnikv3t1.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%2Flcehi9ghzbn2rnikv3t1.jpeg" alt=" " width="800" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Session 2: Read the same account’s balance:&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%2Fckmmbqabs7nt2zt5i8qy.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%2Fckmmbqabs7nt2zt5i8qy.jpeg" alt=" " width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observation:&lt;/p&gt;

&lt;p&gt;Session 2 sees the original balance until Session 1 commits 🔒&lt;br&gt;
Session 1 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%2Fx4dc8qc1kru99yh4msvf.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%2Fx4dc8qc1kru99yh4msvf.jpeg" alt=" " width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After commit, Session 2 sees the updated balance ✅&lt;br&gt;
Tip 💡: Different isolation levels (READ COMMITTED, REPEATABLE READ, SERIALIZABLE) control how strict transaction isolation is.&lt;/p&gt;

&lt;p&gt;⭐Step 5: Durability 💪 – Committed Transactions Persist&lt;/p&gt;

&lt;p&gt;Goal: Ensure committed transactions are permanent, even after a crash or restart.&lt;br&gt;
Scenario: Update Veylith’s balance and commit:&lt;/p&gt;

&lt;p&gt;🧑‍💻CODE:&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 2500 WHERE acc_no = 103;&lt;br&gt;
COMMIT;&lt;br&gt;
SELECT acc_no, name, balance 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%2F3o9tm2mslbkzpcywz0hp.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%2F3o9tm2mslbkzpcywz0hp.jpeg" alt=" " width="800" height="299"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Observation:&lt;/p&gt;

&lt;p&gt;After restart, Veylith’s balance retains the updated value 💾&lt;br&gt;
Durability is typically ensured using write-ahead logs (WAL) and disk storage&lt;br&gt;
💡 Closing Thoughts&lt;/p&gt;

&lt;p&gt;In this guide, we explored ACID properties — Atomicity 🧩, Consistency ⚖️, Isolation 🚧, and Durability 💪 — using a simple Accounts table to illustrate real-world scenarios:&lt;/p&gt;

&lt;p&gt;Atomicity: Transactions are all-or-nothing — rollback ensures no partial updates.&lt;br&gt;
Consistency: Constraints like balance &amp;gt;= 0 keep data valid at all times.&lt;br&gt;
Isolation: Concurrent transactions operate independently, preventing conflicts.&lt;br&gt;
Durability: Committed changes survive database crashes and restarts.&lt;br&gt;
By understanding and applying ACID principles, you can build robust, reliable, and secure database applications — whether in banking 💳, e-commerce 🛒, healthcare 🏥, or enterprise systems 🏢.&lt;/p&gt;

&lt;p&gt;Mastering ACID not only ensures data integrity and safety but also gives you the confidence to handle real-world transactional challenges with SQL.&lt;/p&gt;

&lt;p&gt;✅ Remember: ACID isn’t just a theory — it’s the backbone of trustworthy, dependable database systems&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>tutorial</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Database Reliability Explained: Transactions, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Mon, 06 Oct 2025 13:09:20 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/database-reliability-explained-transactions-deadlocks-log-based-recovery-33ki</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/database-reliability-explained-transactions-deadlocks-log-based-recovery-33ki</guid>
      <description>&lt;p&gt;Modern databases are designed to be reliable, consistent, and fault-tolerant — even during crashes or concurrent access.&lt;br&gt;
Three critical concepts that make this possible are:&lt;br&gt;
Transactions, Deadlocks, and Log-Based Recovery.&lt;/p&gt;

&lt;p&gt;This blog demonstrates how they work using a simple Accounts table example in SQL.&lt;/p&gt;

&lt;p&gt;🧱 Step 1: Create the Accounts Table&lt;br&gt;
We’ll begin by creating a basic table to simulate real-world banking operations.&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%2Ffoliop19lwt6ze6eufyo.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%2Ffoliop19lwt6ze6eufyo.jpeg" alt=" " width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To verify the data:&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%2Fl5lmqdsp390xywze8iyb.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%2Fl5lmqdsp390xywze8iyb.jpeg" alt=" " width="800" height="119"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;✅ Output:&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%2Feykuq2gvmznc2ryr9e21.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%2Feykuq2gvmznc2ryr9e21.jpeg" alt=" " width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This table will be used to understand how transactions and recovery work internally.&lt;/p&gt;

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

&lt;p&gt;A transaction is a sequence of SQL operations executed as a single logical unit.&lt;br&gt;
It follows the ACID properties — Atomicity, Consistency, Isolation, and Durability.&lt;/p&gt;

&lt;p&gt;Let’s focus on Atomicity, which ensures that either all operations in a transaction succeed or none do.&lt;/p&gt;

&lt;p&gt;Example: Money Transfer&lt;br&gt;
Suppose Alice sends ₹500 to Bob.&lt;br&gt;
We’ll perform the transfer and then roll it back before committing.&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%2Fvftjwd2xpnwfwunvrp72.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%2Fvftjwd2xpnwfwunvrp72.jpeg" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Result:&lt;br&gt;
Balances remain unchanged after rollback.&lt;br&gt;
This confirms no partial update took place — a real demonstration of atomicity.&lt;/p&gt;

&lt;p&gt;💡 Why It Matters:&lt;br&gt;
If a power failure or crash occurs mid-transfer, rollback ensures that incomplete operations are undone automatically.&lt;/p&gt;

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

&lt;p&gt;A deadlock occurs when two transactions are waiting for each other’s locked resources.&lt;br&gt;
This often happens in multi-user environments where concurrent access is common.&lt;/p&gt;

&lt;p&gt;Real-World Analogy:&lt;br&gt;
Imagine two people trying to withdraw money from two linked accounts at the same time — each holding a lock on one account and waiting for the other.&lt;/p&gt;

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

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

&lt;p&gt;Session 2&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%2F74wu8h2mj8me92717nka.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%2F74wu8h2mj8me92717nka.jpeg" alt=" " width="800" height="125"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;⏳ Both sessions wait indefinitely — creating a deadlock.&lt;/p&gt;

&lt;p&gt;How Databases Handle It:&lt;br&gt;
Most DBMSs (like MySQL, Oracle, and PostgreSQL) use deadlock detection algorithms to automatically abort one of the conflicting transactions.&lt;br&gt;
This allows the other transaction to continue and keeps the database consistent.&lt;/p&gt;

&lt;p&gt;💡 Tip to Avoid Deadlocks:&lt;/p&gt;

&lt;p&gt;Access tables in a consistent order across transactions.&lt;br&gt;
Keep transactions short and simple.&lt;br&gt;
Avoid unnecessary locks.&lt;br&gt;
🔹 3️⃣ Log-Based Recovery&lt;/p&gt;

&lt;p&gt;Even with transactions and deadlock control, system failures can still occur.&lt;br&gt;
That’s where log-based recovery ensures Durability — the “D” in ACID.&lt;/p&gt;

&lt;p&gt;What It Means:&lt;br&gt;
Databases maintain transaction logs (Binary Logs in MySQL, WAL in PostgreSQL) that record every change.&lt;br&gt;
If a crash occurs, the DBMS uses these logs to redo committed transactions and undo uncommitted ones.&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%2F85btfvaf06qezp2wwaxl.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%2F85btfvaf06qezp2wwaxl.jpeg" alt=" " width="800" height="194"&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%2Fk0jkvejdhyfbwosm1il8.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%2Fk0jkvejdhyfbwosm1il8.jpeg" alt=" " width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>tutorial</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Database Magic: Automating Tasks with Cursor and Trigger</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Mon, 06 Oct 2025 12:46:31 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/database-magic-automating-tasks-with-cursor-and-trigger-2aio</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/database-magic-automating-tasks-with-cursor-and-trigger-2aio</guid>
      <description>&lt;p&gt;Working with databases isn’t just about storing data — it’s about automating how that data behaves.&lt;br&gt;
In this blog, we’ll explore two key SQL features:&lt;/p&gt;

&lt;p&gt;🎯 Cursor – to process query results row by row&lt;br&gt;
⚙️ Trigger – to automatically perform actions after data changes&lt;/p&gt;

&lt;p&gt;Let’s dive in! 🔍&lt;/p&gt;

&lt;p&gt;💼 Part 1: Cursor – Display Employees with Salary &amp;gt; 50,000&lt;/p&gt;

&lt;p&gt;A cursor helps you loop through query results one row at a time, perfect for selective data processing.&lt;/p&gt;

&lt;p&gt;🧩 Step 1: Create Employee Table &amp;amp; Insert Data&lt;/p&gt;

&lt;p&gt;CODE:&lt;/p&gt;

&lt;p&gt;CREATE TABLE Employee (&lt;br&gt;
EmployeeID INT PRIMARY KEY,&lt;br&gt;
EmployeeName VARCHAR(50),&lt;br&gt;
Salary DECIMAL(10,2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO Employee VALUES (1, 'Sophia', 72000.00);&lt;br&gt;
INSERT INTO Employee VALUES (2, 'Ryan', 48000.00);&lt;br&gt;
INSERT INTO Employee VALUES (3, 'Olivia', 83000.00);&lt;br&gt;
INSERT INTO Employee VALUES (4, 'Liam', 39000.00);&lt;br&gt;
INSERT INTO Employee VALUES (5, 'Emma', 65000.00);&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%2Fcy936y3scbpufanu0b67.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%2Fcy936y3scbpufanu0b67.jpeg" alt=" " width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ This creates an Employee table and fills it with some data.&lt;br&gt;
Notice that some employees have salaries above 50,000.&lt;/p&gt;

&lt;p&gt;⚙️ Step 2: Declare and Process the Cursor&lt;/p&gt;

&lt;p&gt;We’ll use a cursor to fetch and display names of employees whose salary is greater than 50,000.&lt;/p&gt;

&lt;p&gt;CODE:&lt;/p&gt;

&lt;p&gt;DELIMITER $$&lt;/p&gt;

&lt;p&gt;CREATE PROCEDURE DisplayHighSalaryEmployees()&lt;br&gt;
BEGIN&lt;br&gt;
DECLARE done INT DEFAULT 0;&lt;br&gt;
DECLARE empName VARCHAR(50);&lt;br&gt;
DECLARE emp_cursor CURSOR FOR&lt;br&gt;
SELECT EmployeeName FROM Employee WHERE Salary &amp;gt; 50000;&lt;br&gt;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;&lt;br&gt;
OPEN emp_cursor;&lt;br&gt;
read_loop: LOOP&lt;br&gt;
FETCH emp_cursor INTO empName;&lt;br&gt;
IF done THEN&lt;br&gt;
LEAVE read_loop;&lt;br&gt;
END IF;&lt;br&gt;
SELECT CONCAT('Employee: ', empName) AS Employee_Name;&lt;br&gt;
END LOOP;&lt;br&gt;
CLOSE emp_cursor;&lt;br&gt;
END $$&lt;/p&gt;

&lt;p&gt;DELIMITER ;&lt;/p&gt;

&lt;p&gt;CALL DisplayHighSalaryEmployees();&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%2F8o70ogoc5gcmbou44yii.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%2F8o70ogoc5gcmbou44yii.jpeg" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧾 Output:&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%2F2qr0h57lz2ulobjvexoo.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%2F2qr0h57lz2ulobjvexoo.jpeg" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;DECLARE emp_cursor defines a cursor to select employees with salary &amp;gt; 50,000.&lt;br&gt;
The handler ensures the loop stops when all rows are fetched.&lt;br&gt;
OPEN, FETCH, and CLOSE control the cursor’s lifecycle. Each employee’s name is displayed using a SELECT statement.&lt;br&gt;
When you run the procedure, the cursor loops through all eligible records and prints employee names who earn more than ₹50,000.&lt;br&gt;
⚡ 2️⃣ AFTER INSERT Trigger: Logging Student Registrations&lt;/p&gt;

&lt;p&gt;A trigger automatically executes code when a certain event occurs in the database.&lt;br&gt;
Here, we’ll create a trigger that logs every new student registration.&lt;/p&gt;

&lt;p&gt;🧩 Step 1: Create Students and Audit Tables&lt;/p&gt;

&lt;p&gt;CODE:&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
StudentID INT PRIMARY KEY,&lt;br&gt;
StudentName VARCHAR2(50),&lt;br&gt;
Department VARCHAR2(50) );&lt;/p&gt;

&lt;p&gt;CREATE TABLE Student_Audit (&lt;br&gt;
AuditID INT GENERATED ALWAYS AS IDENTITY,&lt;br&gt;
StudentID INT,&lt;br&gt;
Action VARCHAR2(50),&lt;br&gt;
ActionTime TIMESTAMP );&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%2Fypd2aovjosiozoh41ayr.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%2Fypd2aovjosiozoh41ayr.jpeg" alt=" " width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚙️ Step 2: Create the AFTER INSERT Trigger&lt;/p&gt;

&lt;p&gt;This trigger runs automatically after a new student record is inserted.&lt;/p&gt;

&lt;p&gt;CODE:&lt;/p&gt;

&lt;p&gt;DELIMITER $$&lt;/p&gt;

&lt;p&gt;CREATE TRIGGER trg_AfterStudentInsert&lt;br&gt;
AFTER INSERT ON Students&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
INSERT INTO Student_Audit (StudentID, Action, ActionTime)&lt;br&gt;
VALUES (NEW.StudentID, 'Registered', NOW());&lt;br&gt;
END $$&lt;/p&gt;

&lt;p&gt;DELIMITER ;&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%2Fi242x92h3n3j1q1j6w9v.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%2Fi242x92h3n3j1q1j6w9v.jpeg" alt=" " width="800" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ The :NEW keyword refers to the newly inserted row in the Students table.&lt;br&gt;
✅ SYSTIMESTAMP records the exact time of registration.&lt;/p&gt;

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

&lt;p&gt;CODE:&lt;/p&gt;

&lt;p&gt;INSERT INTO Students VALUES (201, 'Aarav', 'Computer Science');&lt;br&gt;
INSERT INTO Students VALUES (202, 'Priya', 'Mechanical Engineering');&lt;br&gt;
INSERT INTO Students VALUES (203, 'Karan', 'Electronics');&lt;br&gt;
SELECT * FROM Student_Audit;&lt;/p&gt;

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

&lt;p&gt;🧾 Output:&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%2F6zxu3iqnpbdcvdtr0bnq.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%2F6zxu3iqnpbdcvdtr0bnq.jpeg" alt=" " width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Cursors and Triggers are powerful features that help automate and control database workflows.&lt;/p&gt;

&lt;p&gt;Use cursors for row-level processing.&lt;br&gt;
Use triggers for event-based automation.&lt;br&gt;
🚀 Experiment with these and watch your database become smarter and more interactive!&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System</title>
      <dc:creator>Rajalakshmi</dc:creator>
      <pubDate>Thu, 21 Aug 2025 18:12:03 +0000</pubDate>
      <link>https://forem.com/rajalakshmi_943aa111ee5c0/college-student-course-management-system-4pc7</link>
      <guid>https://forem.com/rajalakshmi_943aa111ee5c0/college-student-course-management-system-4pc7</guid>
      <description>&lt;p&gt;This blog shows how to create a simple College Management System using SQL on Oracle LiveSQL. It covers basic database tasks like:&lt;/p&gt;

&lt;p&gt;Creating tables&lt;/p&gt;

&lt;p&gt;Adding data&lt;/p&gt;

&lt;p&gt;Setting rules with constraints&lt;/p&gt;

&lt;p&gt;Writing queries using functions and totals&lt;/p&gt;

&lt;p&gt;Linking t****ables with joins&lt;/p&gt;

&lt;p&gt;Creating views&lt;/p&gt;

&lt;p&gt;Using stored procedures&lt;/p&gt;

&lt;p&gt;The system helps manage information about students, courses, enrollments, and faculty members.&lt;/p&gt;

&lt;p&gt;Database Schema&lt;br&gt;
The database contains four main tables: Students, Courses, Enrollments, and Faculty.&lt;/p&gt;

&lt;p&gt;Students Table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
StudentID NUMBER PRIMARY KEY,&lt;br&gt;
Name VARCHAR2(50) NOT NULL,&lt;br&gt;
Dept VARCHAR2(30),&lt;br&gt;
DOB DATE,&lt;br&gt;
Email VARCHAR2(50) UNIQUE&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Courses Table&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
CourseID NUMBER PRIMARY KEY,&lt;br&gt;
CourseName VARCHAR2(50) NOT NULL,&lt;br&gt;
Credits NUMBER(2)&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;DDL&lt;/strong&gt;&lt;br&gt;
 Create Faculty Table (DDL)&lt;br&gt;
CREATE TABLE Faculty (&lt;br&gt;
    FacultyID NUMBER PRIMARY KEY,&lt;br&gt;
    FacultyName VARCHAR2(50) NOT NULL,&lt;br&gt;
    Dept VARCHAR2(30),&lt;br&gt;
    Email VARCHAR2(50) UNIQUE&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Creates a new table Faculty to store faculty details with constraints on primary key, non-null name, and unique email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DML&lt;/strong&gt;&lt;br&gt;
INSERT INTO Students VALUES (1, 'Alice Johnson', 'Computer Science',   TO_DATE('2002-04-15', 'YYYY-MM-DD'), '&lt;a href="mailto:alice.johnson@uni.edu"&gt;alice.johnson@uni.edu&lt;/a&gt;');&lt;br&gt;
INSERT INTO Students VALUES (2, 'Bob Smith', 'Mathematics', TO_DATE('2001-11-23', 'YYYY-MM-DD'), '&lt;a href="mailto:bob.smith@uni.edu"&gt;bob.smith@uni.edu&lt;/a&gt;');&lt;br&gt;
INSERT INTO Students VALUES (3, 'Clara Lee', 'Physics', TO_DATE('2003-07-07', 'YYYY-MM-DD'), '&lt;a href="mailto:clara.lee@uni.edu"&gt;clara.lee@uni.edu&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;This command inserts three rows of data into the student table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alter Students Table — Add PhoneNo&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Students ADD PhoneNo VARCHAR2(10);&lt;/p&gt;

&lt;p&gt;Adds a new column PhoneNo to Students table to store 10-digit phone numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add Constraint on Courses Credits&lt;/strong&gt;&lt;br&gt;
ALTER TABLE Courses&lt;br&gt;
MODIFY Credits CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;Enforces that the Credits column in Courses can only have values between 1 and 5, ensuring data integrity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SELECT with Functions — Names Uppercase &amp;amp; Email Length&lt;/strong&gt;&lt;br&gt;
SELECT&lt;br&gt;
    UPPER(Name) AS StudentName_Upper,&lt;br&gt;
    LENGTH(Email) AS Email_Length&lt;br&gt;
FROM Students;&lt;/p&gt;

&lt;p&gt;Demonstrates use of string functions by displaying student names in uppercase and counting the length of their email addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregate Functions — Average Credits &amp;amp; Total Enrollments&lt;/strong&gt;&lt;br&gt;
SELECT&lt;br&gt;
    AVG(Credits) AS Average_Credits,&lt;br&gt;
    (SELECT COUNT(*) FROM Enrollments) AS Total_Enrollments&lt;br&gt;
FROM Courses;&lt;/p&gt;

&lt;p&gt;Calculates the average number of credits for all courses and counts total student enrollments using aggregate functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JOIN — List Students with Enrolled Courses &amp;amp; Grades&lt;/strong&gt;&lt;br&gt;
SELECT&lt;br&gt;
    s.Name AS Student_Name,&lt;br&gt;
    c.CourseName AS Course_Name,&lt;br&gt;
    e.Grade&lt;br&gt;
FROM Students s&lt;br&gt;
JOIN Enrollments e ON s.StudentID = e.StudentID&lt;br&gt;
JOIN Courses c ON e.CourseID = c.CourseID;&lt;/p&gt;

&lt;p&gt;Shows how to join multiple tables to display which students are enrolled in which courses along with their grades.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GROUP BY with HAVING — Departments with More Than 2 Students&lt;/strong&gt;&lt;br&gt;
SELECT&lt;br&gt;
    Dept,&lt;br&gt;
    COUNT(&lt;em&gt;) AS Student_Count&lt;br&gt;
FROM Students&lt;br&gt;
GROUP BY Dept&lt;br&gt;
HAVING COUNT(&lt;/em&gt;) &amp;gt; 2;&lt;/p&gt;

&lt;p&gt;Groups students by department and filters to show only departments having more than two students.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create View — StudentCoursesView&lt;/strong&gt;&lt;br&gt;
CREATE OR REPLACE VIEW StudentCoursesView AS&lt;br&gt;
SELECT&lt;br&gt;
    s.Name AS StudentName,&lt;br&gt;
    c.CourseName,&lt;br&gt;
    e.Grade&lt;br&gt;
FROM Students s&lt;br&gt;
JOIN Enrollments e ON s.StudentID = e.StudentID&lt;br&gt;
JOIN Courses c ON e.CourseID = c.CourseID;&lt;/p&gt;

&lt;p&gt;Creates a virtual table (view) combining student names, their courses, and grades for easy repeated querying.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stored Procedure — UpdateGrade&lt;/strong&gt;&lt;br&gt;
CREATE OR REPLACE PROCEDURE UpdateGrade (&lt;br&gt;
    p_StudentID IN NUMBER,&lt;br&gt;
    p_CourseID IN NUMBER,&lt;br&gt;
    p_NewGrade IN CHAR&lt;br&gt;
) AS&lt;br&gt;
BEGIN&lt;br&gt;
    UPDATE Enrollments&lt;br&gt;
    SET Grade = p_NewGrade&lt;br&gt;
    WHERE StudentID = p_StudentID AND CourseID = p_CourseID;&lt;/p&gt;

&lt;p&gt;END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;A stored procedure to update a student’s grade for a specific course, showing basic procedural SQL and parameter usage.&lt;/p&gt;

&lt;p&gt;Optional: Run Stored Procedure Example&lt;br&gt;
BEGIN&lt;br&gt;
    UpdateGrade(1, 101, 'A+');&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

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

&lt;p&gt;Insert data first to create meaningful relationships.&lt;/p&gt;

&lt;p&gt;Use the above queries to test key SQL concepts: DDL, DML, Alter, Constraints, SELECT functions, Aggregates, JOINs, GROUP BY, Views, and Procedures.&lt;/p&gt;

&lt;p&gt;Run queries on Oracle LiveSQL&lt;br&gt;
, take screenshots of both query and output.&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%2Fcb2q0q0o566cxgtjppog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb2q0q0o566cxgtjppog.png" alt=" " width="484" height="189"&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%2Fqxclp7k5jf3bt1hdos44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxclp7k5jf3bt1hdos44.png" alt=" " width="421" height="251"&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%2Fwnjne68nlmvu807ipczy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwnjne68nlmvu807ipczy.png" alt=" " width="435" height="213"&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%2Fonrtx7b6h3uhwquo0y4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonrtx7b6h3uhwquo0y4u.png" alt=" " width="372" height="190"&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%2F3ofznhst4c50468gxvnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ofznhst4c50468gxvnv.png" alt=" " width="427" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

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