<?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: Mukesh B</title>
    <description>The latest articles on DEV Community by Mukesh B (@mukesh_b_9758c3ceb936cdf1).</description>
    <link>https://dev.to/mukesh_b_9758c3ceb936cdf1</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%2F3450851%2F86af21c9-04af-4b96-96a5-c764b82b574c.jpg</url>
      <title>DEV Community: Mukesh B</title>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mukesh_b_9758c3ceb936cdf1"/>
    <language>en</language>
    <item>
      <title>Amazon RDS vs Amazon DYNAMODB</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Mon, 22 Dec 2025 04:35:57 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/amazon-rds-vs-amazon-dynamodb-2fdf</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/amazon-rds-vs-amazon-dynamodb-2fdf</guid>
      <description>&lt;p&gt;1*&lt;em&gt;) Amazon RDS (Relational Database Service)&lt;/em&gt;*&lt;br&gt;
&lt;strong&gt;Service Overview&lt;/strong&gt;&lt;br&gt;
Amazon RDS is a managed relational database service that makes it easy to set up, operate, and scale relational databases in the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;br&gt;
1.Supports MySQL, PostgreSQL, MariaDB, Oracle, SQL Server&lt;br&gt;
2.Automated backups &amp;amp; snapshots&lt;br&gt;
3High availability with Multi-AZ deployment&lt;br&gt;
4.Automatic patching &amp;amp; maintenance&lt;br&gt;
5.Read replicas for performance scaling&lt;br&gt;
6.Built-in security (encryption, IAM, VPC)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Category / Cloud Domain&lt;/strong&gt;&lt;br&gt;
1.Database&lt;br&gt;
2.Managed Relational Database&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where It Fits in Cloud / DevOps Lifecycle&lt;/strong&gt;&lt;br&gt;
1.Application data storage&lt;br&gt;
2.Used in development, testing, and production&lt;br&gt;
3.Supports CI/CD pipelines with stable backend databases&lt;br&gt;
4.Part of Operate &amp;amp; Monitor phase&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Language / Access Methods&lt;/strong&gt;&lt;br&gt;
1.Accessed using SQL&lt;br&gt;
2.Works with Java, Python, PHP, Node.js, .NET, etc.&lt;br&gt;
4.Access via:&lt;br&gt;
-AWS Console&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS CLI&lt;/li&gt;
&lt;li&gt;AWS SDKs
&lt;strong&gt;Pricing Model&lt;/strong&gt;
1.Pay-as-you-go
2.Charged based on:&lt;/li&gt;
&lt;li&gt;Instance type&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storage used&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I/O operations&lt;br&gt;
Backup storage&lt;br&gt;
2) Amazon DynamoDB&lt;br&gt;
Service Overview&lt;br&gt;
Amazon DynamoDB is a fully managed NoSQL key-value and document database designed for high performance and scalability.&lt;br&gt;
Key Features&lt;br&gt;
Serverless (no infrastructure management)&lt;br&gt;
Extremely low latency (milliseconds)&lt;br&gt;
Automatic scaling&lt;br&gt;
Built-in high availability &amp;amp; replication&lt;br&gt;
Supports event-driven architectures&lt;br&gt;
Integrated security with IAM&lt;br&gt;
AWS Category / Cloud Domain&lt;br&gt;
Database&lt;br&gt;
NoSQL Database&lt;br&gt;
Serverless Database&lt;br&gt;
Where It Fits in Cloud / DevOps Lifecycle&lt;br&gt;
Used in cloud-native &amp;amp; microservices applications&lt;br&gt;
Ideal for real-time apps, IoT, mobile backends&lt;br&gt;
Fits into Build, Deploy &amp;amp; Operate stages&lt;br&gt;
Works well with DevOps automation&lt;br&gt;
Programming Language / Access Methods&lt;br&gt;
No SQL (uses key-value / JSON documents)&lt;br&gt;
Supported languages:&lt;br&gt;
Python, Java, JavaScript, Go, .NET&lt;br&gt;
Access via:&lt;br&gt;
AWS Console&lt;br&gt;
AWS CLI&lt;br&gt;
AWS SDKs&lt;br&gt;
API calls&lt;br&gt;
Pricing Model&lt;br&gt;
Pay-per-request or provisioned capacity&lt;br&gt;
Charged for:&lt;br&gt;
Read/write requests&lt;br&gt;
Storage&lt;br&gt;
Data transfer&lt;br&gt;
Free tier available&lt;br&gt;
Quick Comparison (For Exams)&lt;br&gt;
Feature&lt;br&gt;
RDS&lt;br&gt;
DynamoDB&lt;br&gt;
Database Type&lt;br&gt;
Relational (SQL)&lt;br&gt;
NoSQL&lt;br&gt;
Schema&lt;br&gt;
Fixed&lt;br&gt;
Flexible&lt;br&gt;
Scaling&lt;br&gt;
Manual/Read replicas&lt;br&gt;
Automatic&lt;br&gt;
Use Case&lt;br&gt;
Traditional apps&lt;br&gt;
High-scale apps&lt;br&gt;
Serverless&lt;br&gt;
❌ No&lt;br&gt;
✅ Yes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>database</category>
      <category>aws</category>
      <category>sql</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Mural</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Fri, 19 Dec 2025 04:12:57 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/mural-3cmk</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/mural-3cmk</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview of the Tool&lt;/strong&gt;&lt;br&gt;
Mural is an online digital whiteboard and collaboration tool used by teams to brainstorm, plan, design, and visualize ideas in real time.&lt;br&gt;
Mural Elements are the building blocks used on the board to create and organize content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features / Elements&lt;/strong&gt;&lt;br&gt;
1.Sticky Notes – Add ideas, comments, and feedback&lt;br&gt;
2.Shapes – Flowcharts, diagrams, and structures&lt;br&gt;
3.Text Boxes – Titles, explanations, and labels&lt;br&gt;
4.Icons &amp;amp; Images – Visual representation of ideas&lt;br&gt;
5.Connectors &amp;amp; Lines – Show relationships between elements&lt;br&gt;
6.Templates – Ready-made layouts (Kanban, mind maps, SWOT, etc.)&lt;br&gt;
7.Voting &amp;amp; Comments – Team decision-making and feedback&lt;br&gt;
8.Real-time Collaboration – Multiple users work simultaneously&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Fits into DevOps / DevSecOps&lt;/strong&gt;&lt;br&gt;
1.Used for sprint planning, retrospectives, and brainstorming&lt;br&gt;
2.Helps visualize DevOps pipelines and security workflows&lt;br&gt;
3.Supports collaboration between Dev, Sec, and Ops teams&lt;br&gt;
4.Useful for threat modeling and process documentation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Language&lt;/strong&gt;&lt;br&gt;
1.Not a programming tool&lt;br&gt;
2.Built as a web-based application&lt;br&gt;
3.Uses modern web technologies internally (not required for users)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parent Company&lt;/strong&gt;&lt;br&gt;
1.Mural Inc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Source or Paid&lt;/strong&gt;&lt;br&gt;
❌ Not open source&lt;br&gt;
✅ Paid tool&lt;br&gt;
Offers free trial and educational plans&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in SQL — A Practical Guide</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 16:07:59 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/indexing-hashing-query-optimization-in-sql-a-practical-guide-5hjl</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/indexing-hashing-query-optimization-in-sql-a-practical-guide-5hjl</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;When databases grow large, query performance becomes critical.&lt;br&gt;
Indexes — like B-Trees, B+ Trees, and Hash indexes — help speed up data retrieval by reducing the number of rows scanned.&lt;/p&gt;

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

&lt;p&gt;Create a Students table.&lt;/p&gt;

&lt;p&gt;Insert 20 records.&lt;/p&gt;

&lt;p&gt;Create B-Tree, B+ Tree, and Hash indexes.&lt;/p&gt;

&lt;p&gt;Run optimized queries and observe performance differences.&lt;/p&gt;

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

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

&lt;p&gt;We’ll start by creating a simple Students table.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
    roll_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(50),&lt;br&gt;
    dept VARCHAR(10),&lt;br&gt;
    cgpa DECIMAL(3,2)&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;roll_no uniquely identifies each student.&lt;/p&gt;

&lt;p&gt;cgpa helps demonstrate range-based queries.&lt;/p&gt;

&lt;p&gt;dept is great for hash indexing.&lt;/p&gt;

&lt;p&gt;📥 Step 2: Insert 20 Sample Records&lt;/p&gt;

&lt;p&gt;Let’s insert some demo data.&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (roll_no, name, dept, cgpa) VALUES&lt;br&gt;
(101, 'Arun Kumar', 'CSE', 8.7),&lt;br&gt;
(102, 'Meena Devi', 'ECE', 7.9),&lt;br&gt;
(103, 'Karthik Raja', 'CSBS', 8.2),&lt;br&gt;
(104, 'Priya Mohan', 'IT', 9.0),&lt;br&gt;
(105, 'Vishal', 'CSBS', 8.1),&lt;br&gt;
(106, 'Ananya', 'MECH', 7.5),&lt;br&gt;
(107, 'Ravi', 'EEE', 6.9),&lt;br&gt;
(108, 'Swetha', 'CSE', 9.1),&lt;br&gt;
(109, 'Balaji', 'IT', 8.3),&lt;br&gt;
(110, 'Hari', 'CSBS', 8.9),&lt;br&gt;
(111, 'Nisha', 'ECE', 7.4),&lt;br&gt;
(112, 'Sanjay', 'MECH', 8.0),&lt;br&gt;
(113, 'Keerthi', 'CSE', 9.3),&lt;br&gt;
(114, 'Deepak', 'CSBS', 7.8),&lt;br&gt;
(115, 'Gayathri', 'EEE', 8.4),&lt;br&gt;
(116, 'Suresh', 'IT', 7.6),&lt;br&gt;
(117, 'Lavanya', 'CSE', 8.8),&lt;br&gt;
(118, 'Kavin', 'CSBS', 9.2),&lt;br&gt;
(119, 'Rohit', 'MECH', 8.1),&lt;br&gt;
(120, 'Preethi', 'ECE', 8.0);&lt;/p&gt;

&lt;p&gt;🌲 Step 3: Create a B-Tree Index on roll_no&lt;br&gt;
CREATE INDEX idx_rollno_btree ON Students (roll_no);&lt;/p&gt;

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

&lt;p&gt;B-Tree indexes are default in most SQL databases.&lt;/p&gt;

&lt;p&gt;They help speed up exact match or range queries on numeric columns.&lt;/p&gt;

&lt;p&gt;🔍 Query: Fetch student with roll_no = 110&lt;br&gt;
SELECT * FROM Students WHERE roll_no = 110;&lt;/p&gt;

&lt;p&gt;You’ll notice the query runs instantly, thanks to the index.&lt;/p&gt;

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

&lt;p&gt;(In some databases, B+ Trees are the underlying structure of B-Tree indexes. You can simulate it using a normal index.)&lt;/p&gt;

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

&lt;p&gt;✅ Use Case:&lt;br&gt;
Efficient for range queries, such as finding all students with cgpa &amp;gt; 8.0.&lt;/p&gt;

&lt;p&gt;🧮 Query: List Students with cgpa &amp;gt; 8.0&lt;br&gt;
SELECT * FROM Students WHERE cgpa &amp;gt; 8.0;&lt;/p&gt;

&lt;p&gt;The B+ Tree helps in retrieving a range of values quickly.&lt;br&gt;
You can check query performance with:&lt;/p&gt;

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

&lt;p&gt;⚡ Step 5: Create a Hash Index on dept&lt;br&gt;
CREATE INDEX idx_dept_hash ON Students USING HASH (dept);&lt;/p&gt;

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

&lt;p&gt;Hash indexes are best for equality comparisons (e.g., dept = 'CSBS').&lt;/p&gt;

&lt;p&gt;Not suitable for range or sorting operations.&lt;/p&gt;

&lt;p&gt;🧭 Query: Retrieve All Students from the 'CSBS' Department&lt;br&gt;
SELECT * FROM Students WHERE dept = 'CSBS';&lt;/p&gt;

&lt;p&gt;You’ll see results appear very fast&lt;/p&gt;

&lt;p&gt;🧩 Step 6: Query Optimization Tips&lt;/p&gt;

&lt;p&gt;Use indexes on columns frequently used in WHERE, JOIN, or ORDER BY clauses.&lt;/p&gt;

&lt;p&gt;Avoid indexing columns with low uniqueness (like gender or status).&lt;/p&gt;

&lt;p&gt;Periodically run ANALYZE or VACUUM to update statistics.&lt;/p&gt;

&lt;p&gt;Use EXPLAIN to see how your query executes.&lt;/p&gt;

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

&lt;p&gt;By combining B-Tree, B+ Tree, and Hash Indexes, we optimized queries efficiently:&lt;/p&gt;

&lt;p&gt;B-Tree: Fast for primary key lookups.&lt;/p&gt;

&lt;p&gt;B+ Tree: Great for range queries.&lt;/p&gt;

&lt;p&gt;Hash Index: Perfect for equality conditions.&lt;/p&gt;

&lt;p&gt;With these techniques, your database queries can run 10x faster 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Database Normalization — Step-by-Step from 1NF to 3NF</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 16:07:42 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/database-normalization-step-by-step-from-1nf-to-3nf-2ga1</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/database-normalization-step-by-step-from-1nf-to-3nf-2ga1</guid>
      <description>&lt;p&gt;🧠 Introduction&lt;/p&gt;

&lt;p&gt;Database Normalization helps remove data redundancy and anomalies like insertion, update, and deletion problems.&lt;br&gt;
In this tutorial, we’ll normalize a sample table step by step — from 1NF → 2NF → 3NF — and implement it in SQL.&lt;/p&gt;

&lt;p&gt;🏁 Step 1: Base Table&lt;/p&gt;

&lt;p&gt;Let’s start with an unnormalized table.&lt;/p&gt;

&lt;p&gt;📋 Base Table: Student_Course_Info&lt;/p&gt;

&lt;p&gt;⚠️ Step 1A: Identify Anomalies&lt;br&gt;
Type of Anomaly Description&lt;br&gt;
Insertion Anomaly   You can’t add a new course unless at least one student enrolls.&lt;br&gt;
Update Anomaly  If Dr. Ravi’s phone number changes, it must be updated in multiple rows.&lt;br&gt;
Deletion Anomaly    If all students drop “OS,” information about instructor Dr. Priya is lost.&lt;/p&gt;

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

&lt;p&gt;Rule: Remove repeating groups and ensure atomic (single-valued) attributes.&lt;/p&gt;

&lt;p&gt;✅ Each cell should contain a single value.&lt;br&gt;
✅ Each record should be unique.&lt;/p&gt;

&lt;p&gt;🧱 Table: Student_Course_1NF&lt;br&gt;
CREATE TABLE Student_Course_1NF (&lt;br&gt;
    Student_ID INT,&lt;br&gt;
    Student_Name VARCHAR(50),&lt;br&gt;
    Course_ID VARCHAR(10),&lt;br&gt;
    Course_Name VARCHAR(50),&lt;br&gt;
    Instructor VARCHAR(50),&lt;br&gt;
    Instructor_Phone VARCHAR(15),&lt;br&gt;
    PRIMARY KEY (Student_ID, Course_ID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Insert Sample Data&lt;br&gt;
INSERT INTO Student_Course_1NF VALUES&lt;br&gt;
(101, 'Arun Kumar', 'C01', 'DBMS', 'Dr. Ravi', '9876543210'),&lt;br&gt;
(101, 'Arun Kumar', 'C02', 'OS', 'Dr. Priya', '9876500001'),&lt;br&gt;
(102, 'Meena Devi', 'C01', 'DBMS', 'Dr. Ravi', '9876543210'),&lt;br&gt;
(103, 'Vishal', 'C03', 'CN', 'Dr. Karthik', '9876522222');&lt;/p&gt;

&lt;p&gt;✅ Data is atomic, but redundancy still exists (Instructor and Course details repeat).&lt;/p&gt;

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

&lt;p&gt;Rule: Remove partial dependency — all non-key attributes must depend on the whole composite key, not part of it.&lt;/p&gt;

&lt;p&gt;Here:&lt;/p&gt;

&lt;p&gt;Course_Name, Instructor, and Instructor_Phone depend only on Course_ID&lt;/p&gt;

&lt;p&gt;Student_Name depends on Student_ID&lt;/p&gt;

&lt;p&gt;👉 So we’ll split into three tables:&lt;/p&gt;

&lt;p&gt;🧱 Table 1: Students&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    Student_ID INT PRIMARY KEY,&lt;br&gt;
    Student_Name VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧱 Table 2: Courses&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
    Course_ID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    Course_Name VARCHAR(50),&lt;br&gt;
    Instructor VARCHAR(50),&lt;br&gt;
    Instructor_Phone VARCHAR(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧱 Table 3: Enrollments&lt;br&gt;
CREATE TABLE Enrollments (&lt;br&gt;
    Student_ID INT,&lt;br&gt;
    Course_ID VARCHAR(10),&lt;br&gt;
    PRIMARY KEY (Student_ID, Course_ID),&lt;br&gt;
    FOREIGN KEY (Student_ID) REFERENCES Students(Student_ID),&lt;br&gt;
    FOREIGN KEY (Course_ID) REFERENCES Courses(Course_ID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Insert Data&lt;br&gt;
INSERT INTO Students VALUES&lt;br&gt;
(101, 'Arun Kumar'),&lt;br&gt;
(102, 'Meena Devi'),&lt;br&gt;
(103, 'Vishal');&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses VALUES&lt;br&gt;
('C01', 'DBMS', 'Dr. Ravi', '9876543210'),&lt;br&gt;
('C02', 'OS', 'Dr. Priya', '9876500001'),&lt;br&gt;
('C03', 'CN', 'Dr. Karthik', '9876522222');&lt;/p&gt;

&lt;p&gt;INSERT INTO Enrollments VALUES&lt;br&gt;
(101, 'C01'),&lt;br&gt;
(101, 'C02'),&lt;br&gt;
(102, 'C01'),&lt;br&gt;
(103, 'C03');&lt;/p&gt;

&lt;p&gt;✅ Redundancy reduced.&lt;br&gt;
❌ But instructor info still repeats (if multiple courses by the same instructor).&lt;/p&gt;

&lt;p&gt;🧠 Step 4: Convert 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;Here:&lt;/p&gt;

&lt;p&gt;Instructor_Phone depends on Instructor, not directly on Course_ID.&lt;/p&gt;

&lt;p&gt;👉 Split Instructor details into a new table.&lt;/p&gt;

&lt;p&gt;🧱 Table 1: Students&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    Student_ID INT PRIMARY KEY,&lt;br&gt;
    Student_Name VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧱 Table 2: Instructors&lt;br&gt;
CREATE TABLE Instructors (&lt;br&gt;
    Instructor_ID INT PRIMARY KEY AUTO_INCREMENT,&lt;br&gt;
    Instructor_Name VARCHAR(50),&lt;br&gt;
    Instructor_Phone VARCHAR(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧱 Table 3: Courses&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
    Course_ID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    Course_Name VARCHAR(50),&lt;br&gt;
    Instructor_ID INT,&lt;br&gt;
    FOREIGN KEY (Instructor_ID) REFERENCES Instructors(Instructor_ID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧱 Table 4: Enrollments&lt;br&gt;
CREATE TABLE Enrollments (&lt;br&gt;
    Student_ID INT,&lt;br&gt;
    Course_ID VARCHAR(10),&lt;br&gt;
    PRIMARY KEY (Student_ID, Course_ID),&lt;br&gt;
    FOREIGN KEY (Student_ID) REFERENCES Students(Student_ID),&lt;br&gt;
    FOREIGN KEY (Course_ID) REFERENCES Courses(Course_ID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Insert Data&lt;br&gt;
INSERT INTO Students VALUES&lt;br&gt;
(101, 'Arun Kumar'),&lt;br&gt;
(102, 'Meena Devi'),&lt;br&gt;
(103, 'Vishal');&lt;/p&gt;

&lt;p&gt;INSERT INTO Instructors (Instructor_Name, Instructor_Phone) VALUES&lt;br&gt;
('Dr. Ravi', '9876543210'),&lt;br&gt;
('Dr. Priya', '9876500001'),&lt;br&gt;
('Dr. Karthik', '9876522222');&lt;/p&gt;

&lt;p&gt;INSERT INTO Courses VALUES&lt;br&gt;
('C01', 'DBMS', 1),&lt;br&gt;
('C02', 'OS', 2),&lt;br&gt;
('C03', 'CN', 3);&lt;/p&gt;

&lt;p&gt;INSERT INTO Enrollments VALUES&lt;br&gt;
(101, 'C01'),&lt;br&gt;
(101, 'C02'),&lt;br&gt;
(102, 'C01'),&lt;br&gt;
(103, 'C03');&lt;/p&gt;

&lt;p&gt;🔍 Step 5: JOIN Query — View Normalized Data Together&lt;/p&gt;

&lt;p&gt;To list all students with their courses and instructors, we’ll join all tables.&lt;/p&gt;

&lt;p&gt;SELECT &lt;br&gt;
    s.Student_Name,&lt;br&gt;
    c.Course_Name,&lt;br&gt;
    i.Instructor_Name&lt;br&gt;
FROM Enrollments e&lt;br&gt;
JOIN Students s ON e.Student_ID = s.Student_ID&lt;br&gt;
JOIN Courses c ON e.Course_ID = c.Course_ID&lt;br&gt;
JOIN Instructors i ON c.Instructor_ID = i.Instructor_ID;&lt;/p&gt;

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

&lt;p&gt;Student_Name    Course_Name Instructor_Name&lt;br&gt;
Arun Kumar  DBMS    Dr. Ravi&lt;br&gt;
Arun Kumar  OS  Dr. Priya&lt;br&gt;
Meena Devi  DBMS    Dr. Ravi&lt;br&gt;
Vishal  CN  Dr. Karthik&lt;/p&gt;

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

&lt;p&gt;Through 1NF, 2NF, and 3NF, we’ve:&lt;/p&gt;

&lt;p&gt;Eliminated redundancy&lt;/p&gt;

&lt;p&gt;Avoided anomalies&lt;/p&gt;

&lt;p&gt;Structured the database logically&lt;/p&gt;

&lt;p&gt;This normalization not only improves data integrity but also simplifies updates and queries.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>tutorial</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Understanding ACID Properties in SQL with Practical Examples</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 16:07:25 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/understanding-acid-properties-in-sql-with-practical-examples-1l75</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/understanding-acid-properties-in-sql-with-practical-examples-1l75</guid>
      <description>&lt;p&gt;🧠 Introduction&lt;/p&gt;

&lt;p&gt;In relational databases, ACID stands for:&lt;/p&gt;

&lt;p&gt;Atomicity&lt;/p&gt;

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

&lt;p&gt;Isolation&lt;/p&gt;

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

&lt;p&gt;These four properties guarantee reliable transactions — ensuring that your data remains accurate even in case of errors or crashes.&lt;/p&gt;

&lt;p&gt;In this tutorial, we’ll demonstrate each ACID property step by step using SQL commands.&lt;/p&gt;

&lt;p&gt;🏗️ Step 1: Create a Sample Table&lt;/p&gt;

&lt;p&gt;We’ll create an Accounts table and insert sample records.&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;
);&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Accounts table created successfully.&lt;/p&gt;

&lt;p&gt;🧮 Insert Sample Data&lt;br&gt;
INSERT INTO Accounts VALUES&lt;br&gt;
(101, 'Arun Kumar', 50000),&lt;br&gt;
(102, 'Meena Devi', 30000),&lt;br&gt;
(103, 'Vishal', 70000);&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Data inserted successfully.&lt;/p&gt;

&lt;p&gt;✅ Current Data:&lt;/p&gt;

&lt;p&gt;acc_no  name    balance&lt;br&gt;
101 Arun Kumar  50000&lt;br&gt;
102 Meena Devi  30000&lt;br&gt;
103 Vishal  70000&lt;br&gt;
⚙️ A → Atomicity&lt;/p&gt;

&lt;p&gt;A transaction is all or nothing.&lt;br&gt;
Either all steps succeed, or none are applied.&lt;/p&gt;

&lt;p&gt;🎯 Example: Money Transfer (with Rollback)&lt;br&gt;
BEGIN TRANSACTION;&lt;/p&gt;

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

&lt;p&gt;-- Simulate an error&lt;br&gt;
ROLLBACK;&lt;/p&gt;

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

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

&lt;p&gt;We start a transaction.&lt;/p&gt;

&lt;p&gt;We try to transfer ₹5000 from Arun to Meena.&lt;/p&gt;

&lt;p&gt;Then we issue a ROLLBACK, which undoes both updates.&lt;/p&gt;

&lt;p&gt;✅ Expected Result:&lt;br&gt;
Balances remain unchanged.&lt;/p&gt;

&lt;p&gt;🧩 C → Consistency&lt;/p&gt;

&lt;p&gt;The database must always move from one valid state to another.&lt;br&gt;
Invalid data (e.g., negative balances) should not be allowed.&lt;/p&gt;

&lt;p&gt;🎯 Example: Insert Invalid Record&lt;br&gt;
INSERT INTO Accounts VALUES (104, 'Karthik', -2000);&lt;/p&gt;

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

&lt;p&gt;📘 Explanation:&lt;br&gt;
The CHECK (balance &amp;gt;= 0) constraint ensures consistency of data.&lt;br&gt;
You can never have an account with a negative balance.&lt;/p&gt;

&lt;p&gt;🔒 I → Isolation&lt;/p&gt;

&lt;p&gt;Multiple transactions running at the same time should not interfere with each other.&lt;/p&gt;

&lt;p&gt;🎯 Example: Two Sessions&lt;br&gt;
🪄 Session 1:&lt;br&gt;
BEGIN TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 10000 WHERE acc_no = 103;&lt;br&gt;
-- (Don’t commit yet)&lt;/p&gt;

&lt;p&gt;🪄 Session 2:&lt;br&gt;
SELECT * FROM Accounts WHERE acc_no = 103;&lt;/p&gt;

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

&lt;p&gt;If your isolation level is READ COMMITTED,&lt;br&gt;
Session 2 won’t see the updated balance until Session 1 commits.&lt;/p&gt;

&lt;p&gt;Once Session 1 executes COMMIT;, Session 2 will see the new balance.&lt;/p&gt;

&lt;p&gt;📘 Explanation:&lt;br&gt;
This demonstrates Isolation — one transaction’s changes remain invisible to others until committed.&lt;/p&gt;

&lt;p&gt;💽 D → Durability&lt;/p&gt;

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

&lt;p&gt;🎯 Example: Commit and Restart&lt;br&gt;
BEGIN TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 2000 WHERE acc_no = 101;&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;✅ Now restart your database service, then run:&lt;/p&gt;

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

&lt;p&gt;📘 Expected Output:&lt;br&gt;
The updated balance remains in place even after the restart.&lt;/p&gt;

&lt;p&gt;✅ This demonstrates Durability — committed data survives crashes or restarts.&lt;/p&gt;

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

&lt;p&gt;You’ve just implemented and tested all four ACID properties in SQL:&lt;/p&gt;

&lt;p&gt;✅ Atomicity → Rollback works perfectly&lt;br&gt;
✅ Consistency → Data validation enforced&lt;br&gt;
✅ Isolation → Parallel sessions protected&lt;br&gt;
✅ Durability → Changes survive restarts&lt;/p&gt;

&lt;p&gt;With this, you’ve mastered one of the most important foundations of Database Reliability! 🧠💾&lt;/p&gt;

&lt;p&gt;💬 Next Step:&lt;br&gt;
Try experimenting with different isolation levels using:&lt;/p&gt;

&lt;p&gt;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;&lt;/p&gt;

&lt;p&gt;and observe how concurrent transactions behave differently!&lt;/p&gt;

</description>
      <category>sql</category>
      <category>tutorial</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>SQL Cursor &amp; AFTER INSERT Trigger — Step-by-Step Guide with Example</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 16:07:05 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/sql-cursor-after-insert-trigger-step-by-step-guide-with-example-fmd</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/sql-cursor-after-insert-trigger-step-by-step-guide-with-example-fmd</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;In SQL, Cursors and Triggers are two powerful tools used for automation and data processing.&lt;/p&gt;

&lt;p&gt;A Cursor allows you to process rows one-by-one.&lt;/p&gt;

&lt;p&gt;A Trigger automatically executes in response to specific table events (like INSERT, UPDATE, or DELETE).&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll learn:&lt;/p&gt;

&lt;p&gt;How to create and process a cursor with a condition.&lt;/p&gt;

&lt;p&gt;How to create an AFTER INSERT trigger to log student registrations.&lt;/p&gt;

&lt;p&gt;Let’s get started! 🚀&lt;/p&gt;

&lt;p&gt;🧩 Part 1: Process Cursor with Condition&lt;br&gt;
🎯 Objective:&lt;/p&gt;

&lt;p&gt;Display the names of employees whose salary &amp;gt; 50,000 using a cursor.&lt;/p&gt;

&lt;p&gt;🏗️ Step 1: Create the Employee Table&lt;br&gt;
CREATE TABLE Employee (&lt;br&gt;
    Emp_ID INT PRIMARY KEY,&lt;br&gt;
    Emp_Name VARCHAR(50),&lt;br&gt;
    Department VARCHAR(30),&lt;br&gt;
    Salary DECIMAL(10,2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧮 Step 2: Insert Sample Data&lt;br&gt;
INSERT INTO Employee VALUES&lt;br&gt;
(101, 'Arun Kumar', 'HR', 45000),&lt;br&gt;
(102, 'Meena Devi', 'Finance', 55000),&lt;br&gt;
(103, 'Vishal', 'IT', 75000),&lt;br&gt;
(104, 'Karthik', 'Admin', 48000),&lt;br&gt;
(105, 'Priya', 'IT', 92000);&lt;/p&gt;

&lt;p&gt;🧠 Step 3: Create a Cursor to Display Employees with Salary &amp;gt; 50,000&lt;br&gt;
DECLARE &lt;br&gt;
    emp_name VARCHAR(50);&lt;br&gt;
    emp_salary DECIMAL(10,2);&lt;/p&gt;

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

&lt;p&gt;OPEN emp_cursor;&lt;/p&gt;

&lt;p&gt;FETCH NEXT FROM emp_cursor INTO emp_name, emp_salary;&lt;/p&gt;

&lt;p&gt;WHILE @@FETCH_STATUS = 0&lt;br&gt;
BEGIN&lt;br&gt;
    PRINT 'Employee: ' + emp_name + ' | Salary: ' + CAST(emp_salary AS VARCHAR);&lt;br&gt;
    FETCH NEXT FROM emp_cursor INTO emp_name, emp_salary;&lt;br&gt;
END;&lt;/p&gt;

&lt;p&gt;CLOSE emp_cursor;&lt;br&gt;
DEALLOCATE emp_cursor;&lt;/p&gt;

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

&lt;p&gt;The CURSOR selects only employees with Salary &amp;gt; 50000.&lt;/p&gt;

&lt;p&gt;The FETCH statement retrieves each record one by one.&lt;/p&gt;

&lt;p&gt;Inside the loop, the result is printed (or displayed via SELECT in MySQL).&lt;/p&gt;

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

&lt;p&gt;Employee: Meena Devi | Salary: 55000.00&lt;br&gt;
Employee: Vishal | Salary: 75000.00&lt;br&gt;
Employee: Priya | Salary: 92000.00&lt;/p&gt;

&lt;p&gt;🧩 Part 2: AFTER INSERT Trigger (Student Registration Audit)&lt;br&gt;
🎯 Objective:&lt;/p&gt;

&lt;p&gt;Whenever a new student is inserted into the Students table, automatically insert a log entry into the Student_Audit table.&lt;/p&gt;

&lt;p&gt;🏗️ Step 1: Create the Students Table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    Student_ID INT PRIMARY KEY,&lt;br&gt;
    Student_Name VARCHAR(50),&lt;br&gt;
    Department VARCHAR(30),&lt;br&gt;
    Register_Date DATE&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧱 Step 2: Create the Student_Audit Table&lt;br&gt;
CREATE TABLE Student_Audit (&lt;br&gt;
    Audit_ID INT IDENTITY(1,1) PRIMARY KEY,&lt;br&gt;
    Student_ID INT,&lt;br&gt;
    Student_Name VARCHAR(50),&lt;br&gt;
    Action VARCHAR(20),&lt;br&gt;
    Action_Time DATETIME&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;⚡ Step 3: Create AFTER INSERT Trigger&lt;br&gt;
CREATE TRIGGER trg_AfterInsert_Student&lt;br&gt;
ON Students&lt;br&gt;
AFTER INSERT&lt;br&gt;
AS&lt;br&gt;
BEGIN&lt;br&gt;
    INSERT INTO Student_Audit (Student_ID, Student_Name, Action, Action_Time)&lt;br&gt;
    SELECT &lt;br&gt;
        i.Student_ID, &lt;br&gt;
        i.Student_Name, &lt;br&gt;
        'INSERT',&lt;br&gt;
        GETDATE()&lt;br&gt;
    FROM inserted i;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PRINT 'New student added. Audit log recorded successfully!';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

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

&lt;p&gt;The trigger fires automatically after an insert on the Students table.&lt;/p&gt;

&lt;p&gt;The pseudo-table inserted holds the new row being added.&lt;/p&gt;

&lt;p&gt;The log entry is recorded in Student_Audit for tracking.&lt;/p&gt;

&lt;p&gt;🧮 Step 4: Insert Sample Data&lt;br&gt;
INSERT INTO Students VALUES&lt;br&gt;
(101, 'Arun Kumar', 'CSE', '2025-10-08'),&lt;br&gt;
(102, 'Meena Devi', 'ECE', '2025-10-08');&lt;/p&gt;

&lt;p&gt;🧾 Step 5: Verify Audit Logs&lt;br&gt;
SELECT * FROM Student_Audit;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>tutorial</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Database System Internals — Transactions, Deadlocks, Recovery &amp; Indexing Explained with SQL Examples</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 16:06:44 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/database-system-internals-transactions-deadlocks-recovery-indexing-explained-with-sql-examples-3861</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/database-system-internals-transactions-deadlocks-recovery-indexing-explained-with-sql-examples-3861</guid>
      <description>&lt;p&gt;Step 1: Create Table and Insert Sample Data&lt;br&gt;
CREATE TABLE Accounts (&lt;br&gt;
    acc_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(50),&lt;br&gt;
    balance INT&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;📸 Screenshot: Accounts table with 3 rows.&lt;/p&gt;

&lt;p&gt;✅ Current State:&lt;/p&gt;

&lt;p&gt;acc_no  name    balance&lt;br&gt;
1   Alice   1000&lt;br&gt;
2   Bob 1500&lt;br&gt;
3   Charlie 2000&lt;br&gt;
⚡ Task 1️⃣: Transaction – Atomicity &amp;amp; Rollback&lt;/p&gt;

&lt;p&gt;Goal: Transfer ₹500 from Alice → Bob, then rollback before committing.&lt;/p&gt;

&lt;p&gt;🧩 Step 1: Start Transaction&lt;br&gt;
BEGIN TRANSACTION;&lt;/p&gt;

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

&lt;p&gt;📸 Screenshot: Transaction started and updates pending.&lt;/p&gt;

&lt;p&gt;🧩 Step 2: Rollback&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;p&gt;Now verify balances:&lt;/p&gt;

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

&lt;p&gt;✅ Expected Output (No Changes):&lt;/p&gt;

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

&lt;p&gt;📘 Explanation:&lt;br&gt;
Atomicity ensures either all operations happen or none do.&lt;br&gt;
Rollback prevented a partial transfer.&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Balances unchanged after rollback.&lt;/p&gt;

&lt;p&gt;⚔️ Task 2️⃣: Deadlock Simulation&lt;/p&gt;

&lt;p&gt;Goal: Create a deadlock scenario using two sessions.&lt;/p&gt;

&lt;p&gt;🪄 Session 1:&lt;br&gt;
BEGIN TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 100 WHERE name = 'Alice';&lt;br&gt;
-- Lock held on Alice&lt;br&gt;
UPDATE Accounts SET balance = balance + 100 WHERE name = 'Bob';  -- Will wait&lt;/p&gt;

&lt;p&gt;🪄 Session 2:&lt;br&gt;
BEGIN TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 200 WHERE name = 'Bob';&lt;br&gt;
-- Lock held on Bob&lt;br&gt;
UPDATE Accounts SET balance = balance + 200 WHERE name = 'Alice';  -- Causes Deadlock&lt;/p&gt;

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

&lt;p&gt;Both sessions hold different locks and wait for each other.&lt;/p&gt;

&lt;p&gt;Database detects deadlock → rolls back one transaction.&lt;/p&gt;

&lt;p&gt;📸 Screenshot: SQL deadlock message (one transaction aborted).&lt;/p&gt;

&lt;p&gt;📘 Explanation:&lt;br&gt;
Deadlocks happen when two transactions hold resources the other needs.&lt;br&gt;
The DBMS automatically detects and resolves it by aborting one.&lt;/p&gt;

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

&lt;p&gt;Most modern databases (MySQL, PostgreSQL, SQL Server) maintain transaction logs:&lt;/p&gt;

&lt;p&gt;Binary Log / WAL (Write-Ahead Log) records every change before committing.&lt;/p&gt;

&lt;p&gt;🧩 Step 1: Start and Rollback a Transaction&lt;br&gt;
BEGIN TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 300 WHERE name = 'Charlie';&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;p&gt;🧩 Step 2: Check Logs&lt;/p&gt;

&lt;p&gt;If using MySQL:&lt;/p&gt;

&lt;p&gt;SHOW BINARY LOGS;&lt;br&gt;
SHOW BINLOG EVENTS;&lt;/p&gt;

&lt;p&gt;If using PostgreSQL:&lt;/p&gt;

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

&lt;p&gt;✅ You’ll see entries for the UPDATE followed by a ROLLBACK (UNDO) event.&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Log entries showing rollback.&lt;/p&gt;

&lt;p&gt;📘 Explanation:&lt;br&gt;
The transaction log helps recover or rollback uncommitted operations after crashes — ensuring data consistency.&lt;/p&gt;

&lt;p&gt;📚 Part 2 — Indexing, Hashing &amp;amp; Query Optimization&lt;/p&gt;

&lt;p&gt;Now let’s explore how indexes make your queries lightning fast ⚡&lt;/p&gt;

&lt;p&gt;🧱 Step 1: Create Table and Insert Data&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    roll_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(50),&lt;br&gt;
    dept VARCHAR(10),&lt;br&gt;
    cgpa DECIMAL(3,2)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;🧩 Step 2: Insert 20 Sample Records&lt;br&gt;
INSERT INTO Students VALUES&lt;br&gt;
(101, 'Arun', 'CSE', 8.7),&lt;br&gt;
(102, 'Meena', 'ECE', 7.9),&lt;br&gt;
(103, 'Vishal', 'CSBS', 8.3),&lt;br&gt;
(104, 'Priya', 'IT', 9.0),&lt;br&gt;
(105, 'Ravi', 'CSBS', 8.5),&lt;br&gt;
(106, 'Swetha', 'MECH', 7.8),&lt;br&gt;
(107, 'Deepak', 'EEE', 6.9),&lt;br&gt;
(108, 'Ananya', 'CSE', 9.1),&lt;br&gt;
(109, 'Balaji', 'IT', 8.4),&lt;br&gt;
(110, 'Hari', 'CSBS', 8.9),&lt;br&gt;
(111, 'Nisha', 'ECE', 7.4),&lt;br&gt;
(112, 'Sanjay', 'MECH', 8.0),&lt;br&gt;
(113, 'Keerthi', 'CSE', 9.3),&lt;br&gt;
(114, 'Suresh', 'CSBS', 8.0),&lt;br&gt;
(115, 'Gayathri', 'EEE', 8.4),&lt;br&gt;
(116, 'Kavin', 'IT', 7.6),&lt;br&gt;
(117, 'Lavanya', 'CSE', 8.8),&lt;br&gt;
(118, 'Karthik', 'CSBS', 9.2),&lt;br&gt;
(119, 'Rohit', 'MECH', 8.1),&lt;br&gt;
(120, 'Preethi', 'ECE', 8.0);&lt;/p&gt;

&lt;p&gt;📸 Screenshot: 20 records inserted.&lt;/p&gt;

&lt;p&gt;🌲 Step 3: Create a B-Tree Index on roll_no&lt;br&gt;
CREATE INDEX idx_rollno_btree ON Students (roll_no);&lt;/p&gt;

&lt;p&gt;Now query:&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students WHERE roll_no = 110;&lt;/p&gt;

&lt;p&gt;📘 Explanation:&lt;br&gt;
B-Tree index improves performance of equality and range lookups on numeric fields.&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Query output for roll_no = 110.&lt;/p&gt;

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

&lt;p&gt;(In most SQL databases, normal indexes are internally implemented as B+ Trees)&lt;/p&gt;

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

&lt;p&gt;Query:&lt;/p&gt;

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

&lt;p&gt;✅ Retrieves high-scoring students efficiently.&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Output for cgpa &amp;gt; 8.0.&lt;/p&gt;

&lt;p&gt;⚡ Step 5: Create a Hash Index on dept&lt;br&gt;
CREATE INDEX idx_dept_hash ON Students USING HASH (dept);&lt;/p&gt;

&lt;p&gt;Now run:&lt;/p&gt;

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

&lt;p&gt;✅ Fast equality search on department names.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>#8 Latest news in DBMS 2025</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 15:49:34 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/8-latest-news-in-dbms-2025-4de0</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/8-latest-news-in-dbms-2025-4de0</guid>
      <description>&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/mukesh-balasubramaniam-4a9593302_dbms-cloudcomputing-datasecurity-activity-7381717069710565376-AbXI?utm_source=share&amp;amp;utm_medium=member_android&amp;amp;rcm=ACoAAE1UDAEBOQCw6atAWeJcbj1Jn4KnyB8leNI" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/mukesh-balasubramaniam-4a9593302_dbms-cloudcomputing-datasecurity-activity-7381717069710565376-AbXI?utm_source=share&amp;amp;utm_medium=member_android&amp;amp;rcm=ACoAAE1UDAEBOQCw6atAWeJcbj1Jn4KnyB8leNI&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MongoDB Basics for Students + LinkedIn Post</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 15:25:54 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/mongodb-basics-for-students-linkedin-post-26l8</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/mongodb-basics-for-students-linkedin-post-26l8</guid>
      <description>&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%2Fssbaylb2jl6o8schudnx.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%2Fssbaylb2jl6o8schudnx.jpg" alt=" " width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/mukesh-balasubramaniam-4a9593302_mongodb-basics-for-student-activity-7381711229091753985-L1yg?utm_source=share&amp;amp;utm_medium=member_android&amp;amp;rcm=ACoAAE1UDAEBOQCw6atAWeJcbj1Jn4KnyB8leNI" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/mukesh-balasubramaniam-4a9593302_mongodb-basics-for-student-activity-7381711229091753985-L1yg?utm_source=share&amp;amp;utm_medium=member_android&amp;amp;rcm=ACoAAE1UDAEBOQCw6atAWeJcbj1Jn4KnyB8leNI&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MongoDB CRUD Operations using a College Student Schema</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Wed, 08 Oct 2025 12:22:57 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/mongodb-crud-operations-using-a-college-student-schema-2goi</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/mongodb-crud-operations-using-a-college-student-schema-2goi</guid>
      <description>&lt;p&gt;🎯 Objective&lt;/p&gt;

&lt;p&gt;The goal of this lab is to gain hands-on experience with performing basic CRUD (Create, Read, Update, Delete) operations in MongoDB Atlas using a simple college student schema.&lt;/p&gt;

&lt;p&gt;We’ll use a students collection with fields like student_id, name, age, department, year, and cgpa.&lt;/p&gt;

&lt;p&gt;🧱 Schema Structure&lt;/p&gt;

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

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

&lt;p&gt;⚙️ Step 1: Connect to MongoDB Atlas&lt;/p&gt;

&lt;p&gt;🪄 Step 2: Create the Database and Collection&lt;br&gt;
use college;&lt;/p&gt;

&lt;p&gt;db.createCollection("students");&lt;/p&gt;

&lt;p&gt;✅ This creates a new database named college and a collection named students.&lt;/p&gt;

&lt;p&gt;📸 Screenshot: Collection created in Atlas.&lt;/p&gt;

&lt;p&gt;🧩 Step 3: CREATE — Insert Student Records&lt;/p&gt;

&lt;p&gt;We’ll insert at least 5 documents into the collection.&lt;/p&gt;

&lt;p&gt;db.students.insertMany([&lt;br&gt;
  { "student_id": "S001", "name": "Santhosh", "age": 20, "department": "CSBS", "year": 2, "cgpa": 9 },&lt;br&gt;
  { "student_id": "S002", "name": "Meena", "age": 19, "department": "CSE", "year": 1, "cgpa": 8.5 },&lt;br&gt;
  { "student_id": "S003", "name": "Vishal", "age": 21, "department": "ECE", "year": 3, "cgpa": 7.2 },&lt;br&gt;
  { "student_id": "S004", "name": "Priya", "age": 22, "department": "CSBS", "year": 3, "cgpa": 9.1 },&lt;br&gt;
  { "student_id": "S005", "name": "Ravi", "age": 20, "department": "MECH", "year": 2, "cgpa": 6.8 }&lt;br&gt;
]);&lt;/p&gt;

&lt;p&gt;✅ Inserted 5 student documents successfully.&lt;/p&gt;

&lt;p&gt;🔍 Step 4: READ — Query Student Records&lt;br&gt;
📗 4.1 Display All Student Records&lt;br&gt;
db.students.find();&lt;/p&gt;

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

&lt;p&gt;✅ Displays all high-performing students.&lt;/p&gt;

&lt;p&gt;📙 4.3 Find Students from Computer Science Department&lt;br&gt;
db.students.find({ department: "CSE" });&lt;/p&gt;

&lt;p&gt;or for CSBS:&lt;/p&gt;

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

&lt;p&gt;📘 Description:&lt;br&gt;
Filters documents where department equals CSE or CSBS.&lt;/p&gt;

&lt;p&gt;✏️ Step 5: UPDATE — Modify Data&lt;br&gt;
🧾 5.1 Update CGPA of a Specific Student&lt;br&gt;
db.students.updateOne(&lt;br&gt;
  { student_id: "S002" },&lt;br&gt;
  { $set: { cgpa: 8.9 } }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;✅ Updates Meena’s CGPA to 8.9.&lt;/p&gt;

&lt;p&gt;📈 5.2 Increase Year of Study for All 3rd-Year Students by 1&lt;br&gt;
db.students.updateMany(&lt;br&gt;
  { year: 3 },&lt;br&gt;
  { $inc: { year: 1 } }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;✅ Increments the year field for all 3rd-year students.&lt;/p&gt;

&lt;p&gt;❌ Step 6: DELETE — Remove Data&lt;br&gt;
🗑️ 6.1 Delete One Student by student_id&lt;br&gt;
db.students.deleteOne({ student_id: "S005" });&lt;/p&gt;

&lt;p&gt;✅ Removes the student named Ravi (S005).&lt;/p&gt;

&lt;p&gt;🚫 6.2 Delete All Students Having CGPA &amp;lt; 7.5&lt;br&gt;
db.students.deleteMany({ cgpa: { $lt: 7.5 } });&lt;/p&gt;

&lt;p&gt;✅ Deletes all underperforming students.&lt;/p&gt;

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

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

</description>
      <category>tutorial</category>
      <category>mongodb</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>COLLEGE STUDENT AND COURSE MANAGEMENT SYSTEM</title>
      <dc:creator>Mukesh B</dc:creator>
      <pubDate>Thu, 21 Aug 2025 18:35:49 +0000</pubDate>
      <link>https://dev.to/mukesh_b_9758c3ceb936cdf1/college-student-and-course-management-system-278a</link>
      <guid>https://dev.to/mukesh_b_9758c3ceb936cdf1/college-student-and-course-management-system-278a</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Create Faculty Table (DDL)&lt;/strong&gt;&lt;br&gt;
This command creates a table named Faculty to store faculty details. It contains four attributes: FacultyID, FacultyName, Dept, and Email. FacultyID is defined as the primary key to uniquely identify each faculty, and Email is set as unique to prevent duplicate entries.&lt;br&gt;
Command:&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;&lt;strong&gt;2. Insert Data into Students Table (DML)&lt;/strong&gt;&lt;br&gt;
This command inserts sample student records into the Students table. Each record includes StudentID, Name, Department, Date of Birth, and Email. These entries are used to populate the database with initial data for testing queries.&lt;br&gt;
Command:&lt;br&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email) VALUES (1, 'Ravi Kumar', 'CSE', DATE '2002-05-14', '&lt;a href="mailto:ravi@college.com"&gt;ravi@college.com&lt;/a&gt;');&lt;br&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email) VALUES (2, 'Anita Sharma', 'ECE', DATE '2001-11-22', '&lt;a href="mailto:anita@college.com"&gt;anita@college.com&lt;/a&gt;');&lt;br&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email) VALUES (3, 'Suresh Mehta', 'IT', DATE '2003-01-09', '&lt;a href="mailto:suresh@college.com"&gt;suresh@college.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Alter Table – Add Column&lt;/strong&gt;&lt;br&gt;
This command modifies the existing Students table by adding a new column named PhoneNo. This column is used to store the phone number of students and allows a maximum of 10 digits.&lt;br&gt;
Command:&lt;br&gt;
ALTER TABLE Students ADD PhoneNo NUMBER(10);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Add Constraints to Courses Table&lt;/strong&gt;&lt;br&gt;
This command adds a CHECK constraint to the Courses table. The constraint ensures that the Credits value of any course must be between 1 and 5. This prevents invalid data entry and maintains data integrity.&lt;br&gt;
Command:&lt;br&gt;
ALTER TABLE Courses ADD CONSTRAINT chk_credits CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Select with Functions&lt;/strong&gt;&lt;br&gt;
This query uses SQL functions to manipulate and analyze data. It converts student names into uppercase and calculates the length of each student’s email ID. Such functions help in formatting and analyzing textual data.&lt;br&gt;
Command:&lt;br&gt;
SELECT UPPER(Name) AS StudentName_Upper, LENGTH(Email) AS Email_Length FROM Students;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Aggregate Functions&lt;/strong&gt;&lt;br&gt;
These queries use aggregate functions to summarize data. The first query calculates the average credits from the Courses table, while the second counts the total number of unique students enrolled in courses using COUNT(DISTINCT ...).&lt;br&gt;
Command:&lt;br&gt;
SELECT AVG(Credits) AS AvgCredits FROM Courses;&lt;br&gt;
SELECT COUNT(DISTINCT StudentID) AS TotalStudents FROM Enrollments;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Join Operation&lt;/strong&gt;&lt;br&gt;
This query demonstrates the use of JOINs across three tables: Students, Enrollments, and Courses. It retrieves a list of students along with the courses they are enrolled in and their corresponding grades. This helps in combining data from multiple tables.&lt;br&gt;
Command:&lt;br&gt;
SELECT s.Name AS StudentName, c.CourseName, 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;&lt;strong&gt;8. Group By with Having&lt;/strong&gt;&lt;br&gt;
This query uses GROUP BY to count the number of students in each department. The HAVING clause is applied to filter results, displaying only those departments that have more than 2 students. It helps in generating summarized reports with conditions.&lt;br&gt;
Command:&lt;br&gt;
SELECT Dept, COUNT() AS StudentCount&lt;br&gt;
FROM Students&lt;br&gt;
GROUP BY Dept&lt;br&gt;
HAVING COUNT() &amp;gt; 2;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Create View&lt;/strong&gt;&lt;br&gt;
This command creates a database view named StudentCoursesView. A view is a virtual table that simplifies complex queries. This view displays each student along with the courses they are enrolled in and their grades, making future queries easier.&lt;br&gt;
Command:&lt;br&gt;
CREATE VIEW StudentCoursesView AS&lt;br&gt;
SELECT s.Name AS StudentName, c.CourseName, 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;&lt;strong&gt;10. Stored Procedure – UpdateGrade&lt;/strong&gt;&lt;br&gt;
This command creates a stored procedure called UpdateGrade. A stored procedure is a reusable set of SQL statements. This one updates a student’s grade in the Enrollments table for a specific course. It improves database efficiency and reusability.&lt;br&gt;
Command:&lt;br&gt;
CREATE OR REPLACE PROCEDURE UpdateGrade (&lt;br&gt;
p_StudentID IN NUMBER,&lt;br&gt;
p_CourseID IN NUMBER,&lt;br&gt;
p_NewGrade IN CHAR&lt;br&gt;
)&lt;br&gt;
AS&lt;br&gt;
BEGIN&lt;br&gt;
UPDATE Enrollments&lt;br&gt;
SET Grade = p_NewGrade&lt;br&gt;
WHERE StudentID = p_StudentID&lt;br&gt;
AND CourseID = p_CourseID;&lt;br&gt;
COMMIT;&lt;br&gt;
END;&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%2Fm41n8qhcvnnhr42mn0az.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%2Fm41n8qhcvnnhr42mn0az.jpg" alt=" " width="800" height="351"&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%2Flf2qk3qcczunpxrown8q.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%2Flf2qk3qcczunpxrown8q.jpg" alt=" " width="800" height="386"&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%2F2s6bs4tb4wf0u3kzylan.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%2F2s6bs4tb4wf0u3kzylan.jpg" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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