<?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: Boopathy.S</title>
    <description>The latest articles on DEV Community by Boopathy.S (@boopathys_8ff57c77ea5a5e).</description>
    <link>https://dev.to/boopathys_8ff57c77ea5a5e</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%2F3450436%2Ff6f92702-d639-4a18-822c-ed053f41fae6.png</url>
      <title>DEV Community: Boopathy.S</title>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boopathys_8ff57c77ea5a5e"/>
    <language>en</language>
    <item>
      <title>AWS SERVICES</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Thu, 18 Dec 2025 14:01:04 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/aws-services-5968</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/aws-services-5968</guid>
      <description>&lt;p&gt;&lt;strong&gt;Amazon Bedrock: Building Generative AI Applications on AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As cloud computing evolves, Generative AI has become a key component in modern applications. AWS addresses this need with Amazon Bedrock, a fully managed service that makes it easy to build, deploy, and scale generative AI solutions without managing infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon Bedrock?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Bedrock is a serverless AWS service that provides access to high-performance foundation models (FMs) from leading AI providers such as Amazon (Titan), Anthropic, Meta, and Mistral through a single API. It enables developers to integrate generative AI capabilities into applications securely and efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multiple Foundation Models via one unified API&lt;/p&gt;

&lt;p&gt;Serverless Architecture – no infrastructure management&lt;/p&gt;

&lt;p&gt;Enterprise-grade security and compliance&lt;/p&gt;

&lt;p&gt;Easy model customization and fine-tuning&lt;/p&gt;

&lt;p&gt;Seamless integration with AWS services like S3, IAM, CloudWatch&lt;/p&gt;

&lt;p&gt;Supports text generation, chatbots, summarization, and image creation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Category / Cloud Domain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Artificial Intelligence &amp;amp; Machine Learning&lt;/p&gt;

&lt;p&gt;Generative AI&lt;/p&gt;

&lt;p&gt;Application Development&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where It Fits in the Cloud / DevOps Lifecycle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lifecycle Phase Role of Amazon Bedrock&lt;/p&gt;

&lt;p&gt;Planning    - Choosing AI models for business use cases&lt;br&gt;
Development - Building AI-powered applications&lt;br&gt;
Testing         - Prompt testing and response tuning&lt;br&gt;
Deployment  - Serverless deployment of AI features&lt;br&gt;
Monitoring      - Performance tracking using CloudWatch&lt;br&gt;
Scaling         - Automatic scaling handled by AWS&lt;/p&gt;

&lt;p&gt;Amazon Bedrock fits perfectly into cloud-native and DevOps workflows, allowing teams to innovate faster without worrying about infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Languages / Access Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Supported Programming Languages&lt;br&gt;
Python&lt;br&gt;
Java&lt;br&gt;
JavaScript (Node.js)&lt;/p&gt;

&lt;p&gt;Access Methods:&lt;br&gt;
AWS SDKs&lt;br&gt;
AWS CLI&lt;br&gt;
REST APIs&lt;/p&gt;

&lt;p&gt;AWS Management Console&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing Model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Bedrock follows a pay-as-you-go pricing model:&lt;/p&gt;

&lt;p&gt;Charged based on input tokens and output tokens&lt;/p&gt;

&lt;p&gt;No upfront or fixed infrastructure costs&lt;/p&gt;

&lt;p&gt;Pricing varies depending on the foundation model selected&lt;/p&gt;

&lt;p&gt;This makes Bedrock cost-effective and scalable for startups and enterprises alike.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Choose Amazon Bedrock?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No need for deep ML expertise&lt;br&gt;
Faster time-to-market for AI applications&lt;br&gt;
Secure, scalable, and AWS-native&lt;br&gt;
Ideal for DevOps and cloud engineers exploring AI integration&lt;/p&gt;

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

&lt;p&gt;Amazon Bedrock simplifies the adoption of generative AI by providing powerful models in a fully managed, secure, and scalable environment. For developers and DevOps teams looking to integrate AI into cloud applications, Amazon Bedrock is a game-changing AWS service.&lt;br&gt;
THANK YOU &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for encouraging me.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DevSecOps Periodic Table</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Thu, 18 Dec 2025 13:41:23 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/devsecops-periodic-table-1mo8</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/devsecops-periodic-table-1mo8</guid>
      <description>&lt;p&gt;&lt;strong&gt;BigPanda in the DevSecOps Periodic Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In modern DevOps and DevSecOps environments, teams deal with thousands of alerts, logs, and monitoring signals every day. Without proper intelligence, this noise can slow down response times and increase system downtime.&lt;br&gt;
This is where BigPanda plays a crucial role.&lt;/p&gt;

&lt;p&gt;BigPanda is widely recognized as an AIOps (Artificial Intelligence for IT Operations) platform that helps organizations transform raw alert data into meaningful, actionable incidents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview of BigPanda:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BigPanda is an AI-powered IT Operations and incident management platform designed to reduce alert noise, correlate events, and speed up incident resolution.&lt;/p&gt;

&lt;p&gt;Instead of engineers manually analyzing alerts from multiple monitoring tools, BigPanda automatically groups related alerts into a single incident, enriched with context such as topology, changes, and historical data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BigPanda provides several powerful features that make it valuable in DevOps and DevSecOps pipelines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI-Driven Event Correlation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BigPanda uses machine learning to correlate alerts from different sources and identify the real issue behind them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Alert Noise Reduction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thousands of alerts are compressed into a few meaningful incidents, helping engineers focus on what truly matters.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automated Incident Triage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Incidents are automatically classified, tagged, and routed to the right teams, reducing manual effort.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Root Cause Analysis (RCA)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BigPanda helps identify the most likely root cause by analyzing dependencies and past incidents.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Seamless Integrations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It integrates with popular tools like:&lt;br&gt;
 ServiceNow&lt;br&gt;
 Jira&lt;br&gt;
 PagerDuty&lt;br&gt;
 Datadog&lt;br&gt;
 Prometheus&lt;br&gt;
 Splunk&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Workflow Automation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Automates repetitive tasks such as ticket creation, notifications, and incident escalation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How BigPanda Fits into DevOps &amp;amp; DevSecOps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a DevOps pipeline, BigPanda acts as the intelligence layer between monitoring tools and response teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In DevOps:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Improves incident response time (MTTR)&lt;/p&gt;

&lt;p&gt;Reduces operational toil for SREs and developers&lt;/p&gt;

&lt;p&gt;Provides visibility across distributed systems&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In DevSecOps:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Helps identify incidents caused by misconfigurations or risky deployments&lt;/p&gt;

&lt;p&gt;Improves collaboration between DevOps, SecOps, and IT teams&lt;/p&gt;

&lt;p&gt;Supports proactive security posture by analyzing incident patterns&lt;/p&gt;

&lt;p&gt;BigPanda ensures that security and reliability issues are detected early and handled efficiently, aligning perfectly with DevSecOps principles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Languages &amp;amp; Technology&lt;/strong&gt;&lt;br&gt;
BigPanda’s core platform is built using Java&lt;/p&gt;

&lt;p&gt;Runs on Linux-based infrastructure&lt;/p&gt;

&lt;p&gt;Uses a domain-specific language called BPQL (BigPanda Query Language) for querying and incident analysis&lt;/p&gt;

&lt;p&gt;Provides APIs and integrations for automation and extensibility&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parent Company&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Company Name: BigPanda Inc.&lt;/p&gt;

&lt;p&gt;Founded: 2012&lt;/p&gt;

&lt;p&gt;Headquarters: Redwood City, California, USA&lt;/p&gt;

&lt;p&gt;Type: Private company&lt;/p&gt;

&lt;p&gt;BigPanda operates independently and focuses on enterprise-scale IT operations and AIOps innovation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Source or Paid?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not Open Source&lt;/p&gt;

&lt;p&gt;Paid SaaS Product&lt;/p&gt;

&lt;p&gt;BigPanda is a commercial, enterprise-grade SaaS platform offered through subscription-based pricing.&lt;br&gt;
It is primarily targeted at medium to large organizations managing complex infrastructures. THANK YOU &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for updating my knowledge !!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>CRUD Operations in MongoDB: with a Student Collection</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Sat, 04 Oct 2025 06:24:14 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/crud-operations-in-mongodb-with-a-student-collection-2ol3</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/crud-operations-in-mongodb-with-a-student-collection-2ol3</guid>
      <description>&lt;p&gt;MongoDB is a NoSQL document database that stores data in JSON-like documents. In this tutorial, we’ll perform CRUD operations using a simple college student schema.&lt;/p&gt;

&lt;p&gt;1️⃣ Create (Insert)&lt;br&gt;
Schema:&lt;br&gt;
Student 1&lt;br&gt;
{&lt;br&gt;
"student_id": "S001",&lt;br&gt;
"name": "Pranav",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "CSBS",&lt;br&gt;
"year": 2,&lt;br&gt;
"cgpa": 9&lt;br&gt;
}&lt;br&gt;
Student 2&lt;br&gt;
{&lt;br&gt;
"student_id": "S002",&lt;br&gt;
"name": "Sashmi",&lt;br&gt;
"age": 21,&lt;br&gt;
"department": "CSE",&lt;br&gt;
"year": 3,&lt;br&gt;
"cgpa": 8.5&lt;br&gt;
}&lt;br&gt;
Student 3&lt;br&gt;
{&lt;br&gt;
"student_id": "S003",&lt;br&gt;
"name": "Diksha",&lt;br&gt;
"age": 22,&lt;br&gt;
"department": "ECE",&lt;br&gt;
"year": 4,&lt;br&gt;
"cgpa": 7.2&lt;br&gt;
}&lt;br&gt;
Student 4&lt;br&gt;
{&lt;br&gt;
"student_id": "S004",&lt;br&gt;
"name": "Prian",&lt;br&gt;
"age": 19,&lt;br&gt;
"department": "CSBS",&lt;br&gt;
"year": 1,&lt;br&gt;
"cgpa": 9.3&lt;br&gt;
}&lt;br&gt;
Student 5&lt;br&gt;
{&lt;br&gt;
"student_id": "S005",&lt;br&gt;
"name": "Harini",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "Mechanical",&lt;br&gt;
"year": 2,&lt;br&gt;
"cgpa": 6.8&lt;br&gt;
}&lt;br&gt;
Screenshot:&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%2Fmnp6ux54pel50vvkskbr.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%2Fmnp6ux54pel50vvkskbr.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣Read (Query)&lt;/p&gt;

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

&lt;p&gt;B.Students with CGPA &amp;gt; 8&lt;/p&gt;

&lt;p&gt;{ "cgpa": { "$gt": 8 } }&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%2Far2e2e0c3jvw0zbdr1of.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%2Far2e2e0c3jvw0zbdr1of.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C.Students in CSBS department&lt;/p&gt;

&lt;p&gt;{ "department": { "$in": ["CSBS"] } }&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%2Fycnxxb0p1rwr7nq8engf.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%2Fycnxxb0p1rwr7nq8engf.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣Update&lt;/p&gt;

&lt;p&gt;A.Update CGPA of a specific student (S002)&lt;br&gt;
{ "student_id": "S002" }&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%2Fc103quat2qwuyzgvn0gv.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%2Fc103quat2qwuyzgvn0gv.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B. Increase year of all 3rd year students by 1&lt;br&gt;
{ "year": 3 }&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%2Fkwghexglf53ra8zhjlwp.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%2Fkwghexglf53ra8zhjlwp.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣Delete&lt;/p&gt;

&lt;p&gt;A. Delete one student by student_id (S005)&lt;/p&gt;

&lt;p&gt;{ "student_id": "S004" }&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%2Fgf0xi9sp6tvos85l5h1f.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%2Fgf0xi9sp6tvos85l5h1f.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B. Delete all students with CGPA &amp;lt; 7.5&lt;/p&gt;

&lt;p&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%2Fugkk7hmojpdtq71rykxi.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%2Fugkk7hmojpdtq71rykxi.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Summary:&lt;br&gt;
Operation MongoDB Query&lt;br&gt;
Create insertOne / insertMany&lt;br&gt;
Read find()&lt;br&gt;
Update updateOne / updateMany&lt;br&gt;
Delete deleteOne / deleteMany&lt;/p&gt;

&lt;p&gt;MongoDB allows flexible, schema-less data storage, making it ideal for applications requiring rapid iteration and scalability.&lt;/p&gt;

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

</description>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in liveSQL</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Sat, 04 Oct 2025 02:40:37 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/indexing-hashing-query-optimization-in-livesql-1682</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/indexing-hashing-query-optimization-in-livesql-1682</guid>
      <description>&lt;p&gt;Indexes are one of the most powerful tools in SQL databases for improving query performance. In this blog, we’ll explore B-Tree Index, B+ Tree Index, and Hash Index using a simple Students table in Oracle LiveSQL.&lt;/p&gt;

&lt;p&gt;Step 1: Create the Students Table&lt;br&gt;
We start by creating a table Students with roll number, name, department, and CGPA fields.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
    ROLL_NO NUMBER PRIMARY KEY,&lt;br&gt;
    NAME VARCHAR2(50),&lt;br&gt;
    DEPT VARCHAR2(20),&lt;br&gt;
    CGPA NUMBER(3,2)&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;Step 3: Create a B-Tree Index on ROLL_NO&lt;br&gt;
In Oracle, normal indexes are B-Tree indexes by default. They work best for equality lookups and range queries.&lt;br&gt;
CREATE INDEX idx_rollno_btree ON Students(ROLL_NO);&lt;br&gt;
SELECT * FROM Students WHERE ROLL_NO = 110;&lt;br&gt;
 Output → Jack, CSBS, 9.0&lt;/p&gt;

&lt;p&gt;Step 4: Create a B+ Tree Index on CGPA&lt;br&gt;
Oracle internally uses B-Trees, but when scanning ranges, they behave like B+ Trees.&lt;br&gt;
CREATE INDEX idx_cgpa_bplus ON Students(CGPA);&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students WHERE CGPA &amp;gt; 8.0;&lt;br&gt;
This retrieves all students who scored above 8.0 CGPA&lt;/p&gt;

&lt;p&gt;Step 5: Create a Hash Index on DEPT&lt;br&gt;
Oracle does not directly support USING HASH like PostgreSQL, but we can still create a normal index on the department column. This behaves like a hash lookup for equality searches.&lt;br&gt;
CREATE INDEX idx_dept_hash ON Students(DEPT);&lt;br&gt;
SELECT * FROM Students WHERE DEPT = 'CSBS';&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%2Fzilb62xqpksj31s8cf2b.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%2Fzilb62xqpksj31s8cf2b.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu19th4tpq97c77wt9tdu.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%2Fu19th4tpq97c77wt9tdu.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqlq8o1w9bc2circb0vy.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%2Foqlq8o1w9bc2circb0vy.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmant7mc7qqw7pwu48mi.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%2Flmant7mc7qqw7pwu48mi.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmx3kwxk1j8rq8txrc9pw.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%2Fmx3kwxk1j8rq8txrc9pw.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Summary:&lt;br&gt;
B-Tree Index → Great for ROLL_NO = 110 or ROLL_NO BETWEEN 101 AND 110.&lt;br&gt;
B+ Tree Index → Works best for range queries (CGPA &amp;gt; 8.0).&lt;br&gt;
Hash Index (simulated) → Best for equality checks (DEPT = 'CSBS').&lt;/p&gt;

&lt;p&gt;THANK YOU &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding mee!!!&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>performance</category>
      <category>sql</category>
    </item>
    <item>
      <title>Transactions, Deadlocks &amp; Log-Based Recovery in MySQL</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Sat, 04 Oct 2025 02:24:32 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/transactions-deadlocks-log-based-recovery-in-mysql-4f73</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/transactions-deadlocks-log-based-recovery-in-mysql-4f73</guid>
      <description>&lt;p&gt;In this blog, we’ll explore these concepts hands-on using MySQL with a simple Accounts table.&lt;/p&gt;

&lt;p&gt;-- Create a new database&lt;br&gt;
CREATE DATABASE IF NOT EXISTS BankDB;&lt;br&gt;
USE BankDB;&lt;/p&gt;

&lt;p&gt;-- Drop table if it already exists&lt;br&gt;
DROP TABLE IF EXISTS Accounts;&lt;/p&gt;

&lt;p&gt;-- Create Accounts table&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 sample records&lt;br&gt;
INSERT INTO Accounts (acc_no, name, balance) 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;-- View initial data&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;✅ Output:&lt;br&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;1️⃣ Transaction – Atomicity &amp;amp; Rollback&lt;br&gt;
Transactions should be atomic: either all operations succeed or none.&lt;br&gt;
-- Start transaction&lt;br&gt;
START TRANSACTION;&lt;/p&gt;

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

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

&lt;p&gt;-- Check balances (unchanged)&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;2️⃣ Deadlock Simulation&lt;br&gt;
Deadlocks happen when two transactions wait indefinitely for each other’s locks.&lt;br&gt;
Open two sessions and run:&lt;/p&gt;

&lt;p&gt;Session 1:&lt;br&gt;
START TRANSACTION;&lt;br&gt;
-- Lock Alice&lt;br&gt;
SELECT * FROM Accounts WHERE name='Alice' FOR UPDATE;&lt;br&gt;
-- Try updating Bob&lt;br&gt;
UPDATE Accounts SET balance = balance + 10 WHERE name='Bob';&lt;/p&gt;

&lt;p&gt;Session 2:&lt;br&gt;
START TRANSACTION;&lt;br&gt;
-- Lock Bob&lt;br&gt;
SELECT * FROM Accounts WHERE name='Bob' FOR UPDATE;&lt;br&gt;
-- Try updating Alice&lt;br&gt;
UPDATE Accounts SET balance = balance + 20 WHERE name='Alice';&lt;/p&gt;

&lt;p&gt;MySQL detects the deadlock and forces one session to fail:&lt;br&gt;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction&lt;/p&gt;

&lt;p&gt;3️⃣ Log-Based Recovery&lt;br&gt;
MySQL uses binary logs (redo logs) and undo logs to maintain data consistency.&lt;br&gt;
Let’s test rollback with logs:&lt;br&gt;
-- Start transaction&lt;br&gt;
START TRANSACTION;&lt;br&gt;
-- Update Charlie’s balance&lt;br&gt;
UPDATE Accounts SET balance = balance + 300 WHERE name = 'Charlie';&lt;br&gt;
-- Rollback instead of commit&lt;br&gt;
ROLLBACK;&lt;br&gt;
-- Verify balance is unchanged&lt;br&gt;
SELECT * FROM Accounts;&lt;br&gt;
Charlie’s balance remains 2000 → MySQL’s undo logs restored the previous state.&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%2Fkaucugg86vvd7n825ib9.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%2Fkaucugg86vvd7n825ib9.png" alt=" " width="800" height="526"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49lg02o8viufmxpe7gxb.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%2F49lg02o8viufmxpe7gxb.png" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feykpvyo2rvo850bhouzs.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%2Feykpvyo2rvo850bhouzs.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycxjmijbcox2rpw78i8y.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%2Fycxjmijbcox2rpw78i8y.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vil57mt4op57m4e0bvn.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%2F5vil57mt4op57m4e0bvn.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Summary&lt;br&gt;
Atomicity: Rollback ensures no partial updates.&lt;br&gt;
Deadlocks: MySQL automatically detects and resolves them.&lt;br&gt;
Log-Based Recovery: Undo/redo logs guarantee data consistency even after crashes.&lt;br&gt;
With this, we’ve successfully demonstrated transactions, deadlock handling, and recovery in MySQL.&lt;/p&gt;

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

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>mysql</category>
      <category>sql</category>
    </item>
    <item>
      <title>Understanding ACID Properties with SQL Transactions</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Sat, 04 Oct 2025 02:12:15 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/understanding-acid-properties-with-sql-transactions-43k5</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/understanding-acid-properties-with-sql-transactions-43k5</guid>
      <description>&lt;p&gt;In this blog, we will learn about Atomicity, Consistency, Isolation, and Durability using a simple SQL example with screenshots.&lt;/p&gt;

&lt;p&gt;We’ll use an Accounts table to demonstrate each property step by step.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Accounts (&lt;br&gt;
    acc_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(50),&lt;br&gt;
    balance INT CHECK (balance &amp;gt;= 0)   -- prevents negative balance&lt;br&gt;
);&lt;br&gt;
INSERT INTO Accounts VALUES (101, 'pranav', 5000);&lt;br&gt;
INSERT INTO Accounts VALUES (102, 'sashmi', 3000);&lt;br&gt;
INSERT INTO Accounts VALUES (103, 'harini', 7000);&lt;/p&gt;

&lt;p&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%2Fq73m2nweft9tu7alt38n.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%2Fq73m2nweft9tu7alt38n.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Atomicity&lt;br&gt;
Atomicity means all or nothing — if part of a transaction fails, the entire operation is rolled back.&lt;/p&gt;

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

&lt;p&gt;UPDATE Accounts SET balance = balance - 1000 WHERE acc_no = 101;&lt;br&gt;
UPDATE Accounts SET balance = balance + 1000 WHERE acc_no = 102;&lt;br&gt;
-- Cancel the transaction&lt;br&gt;
ROLLBACK;&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts;&lt;br&gt;
 The balances remain unchanged after rollback.&lt;/p&gt;

&lt;p&gt;Consistency&lt;br&gt;
Consistency ensures rules/constraints are never broken.&lt;br&gt;
Since we defined CHECK (balance &amp;gt;= 0), inserting a negative balance will fail.&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts VALUES (104, 'David', -2000);&lt;br&gt;
we will see error like:&lt;br&gt;
ERROR: CHECK constraint failed: Accounts&lt;br&gt;
→ proves Consistency&lt;/p&gt;

&lt;p&gt;Isolation&lt;br&gt;
Isolation ensures transactions don’t interfere with each other.&lt;br&gt;
Let’s simulate two sessions:&lt;br&gt;
Session 1&lt;br&gt;
START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE acc_no = 101;&lt;br&gt;
-- Don’t commit yet&lt;br&gt;
Session 2&lt;br&gt;
SELECT * FROM Accounts WHERE acc_no = 101;&lt;/p&gt;

&lt;p&gt;If your DB uses READ COMMITTED (default in many systems), Session 2 still sees the old balance.&lt;br&gt;
Once Session 1 does COMMIT;, Session 2 can see the updated value.&lt;/p&gt;

&lt;p&gt;Durability&lt;br&gt;
Durability guarantees that once a transaction is committed, it survives even after a crash/restart.&lt;/p&gt;

&lt;p&gt;-- Commit a change&lt;br&gt;
START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 2000 WHERE acc_no = 103;&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;-- Restart the DB server manually&lt;br&gt;
-- Then check again&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%2Fmmybos872qatge934nhu.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%2Fmmybos872qatge934nhu.png" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwdzenrf7d4nebdhfkqx4.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%2Fwdzenrf7d4nebdhfkqx4.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnd5r1bgw0ia0joxma3lj.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%2Fnd5r1bgw0ia0joxma3lj.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnd673v4du762nhfigwss.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%2Fnd673v4du762nhfigwss.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

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

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>SQL Cursors and Triggers:-</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Sat, 04 Oct 2025 02:00:41 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/sql-cursors-and-triggers--2hjf</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/sql-cursors-and-triggers--2hjf</guid>
      <description>&lt;p&gt;In this blog, we’ll explore two important SQL concepts: Cursors and Triggers, with hands-on examples.&lt;/p&gt;

&lt;p&gt;1️⃣ Using a Cursor with a Condition&lt;br&gt;
A cursor allows you to process rows returned by a query one at a time.&lt;br&gt;
Here, we’ll display the names of employees whose salary is greater than 50,000 from the Employee table.&lt;/p&gt;

&lt;p&gt;Step 1: Create Employee Table &amp;amp; Insert Sample Data&lt;br&gt;
CREATE TABLE Employee (&lt;br&gt;
    EmpID INT PRIMARY KEY,&lt;br&gt;
    EmpName VARCHAR2(50),&lt;br&gt;
    Salary NUMBER&lt;br&gt;
);&lt;br&gt;
INSERT INTO Employee VALUES (101, 'Arjun', 60000);&lt;br&gt;
INSERT INTO Employee VALUES (102, 'Priya', 45000);&lt;br&gt;
INSERT INTO Employee VALUES (103, 'Kiran', 70000);&lt;/p&gt;

&lt;p&gt;Step 2: Declare and Use Cursor&lt;br&gt;
DECLARE&lt;br&gt;
    CURSOR emp_cursor IS&lt;br&gt;
        SELECT EmpName, Salary FROM Employee WHERE Salary &amp;gt; 50000;&lt;br&gt;
    emp_record emp_cursor%ROWTYPE;&lt;br&gt;
BEGIN&lt;br&gt;
    OPEN emp_cursor;&lt;br&gt;
    LOOP&lt;br&gt;
        FETCH emp_cursor INTO emp_record;&lt;br&gt;
        EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
        DBMS_OUTPUT.PUT_LINE('Employee: ' || emp_record.EmpName || ', Salary: ' || emp_record.Salary);&lt;br&gt;
    END LOOP;&lt;br&gt;
    CLOSE emp_cursor;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

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

&lt;p&gt;2️⃣ AFTER INSERT Trigger Example&lt;br&gt;
A trigger is a stored procedure that is automatically executed in response to certain events.&lt;br&gt;
Here, we’ll log every new student added to the Students table into a Student_Audit table.&lt;/p&gt;

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

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
    StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    StudentName VARCHAR2(50)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Student_Audit (&lt;br&gt;
    AuditID INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,&lt;br&gt;
    StudentID VARCHAR2(10),&lt;br&gt;
    StudentName VARCHAR2(50),&lt;br&gt;
    ActionDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP&lt;br&gt;
);&lt;br&gt;
Step 2: Create AFTER INSERT Trigger&lt;br&gt;
CREATE OR REPLACE TRIGGER trg_student_insert&lt;br&gt;
AFTER INSERT ON Students&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
    INSERT INTO Student_Audit (StudentID, StudentName)&lt;br&gt;
    VALUES (:NEW.StudentID, :NEW.StudentName);&lt;br&gt;
END;&lt;br&gt;
/&lt;br&gt;
Step 3: Test the Trigger&lt;br&gt;
INSERT INTO Students (StudentID, StudentName) VALUES ('S01', 'Arjun');&lt;br&gt;
INSERT INTO Students (StudentID, StudentName) VALUES ('S02', 'Priya');&lt;/p&gt;

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

&lt;p&gt;![ ](&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvh481m72hgteqgfzgou.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvh481m72hgteqgfzgou.png&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9wrg1omzcf6v7gzak8g.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%2Fd9wrg1omzcf6v7gzak8g.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcoc572mgq9dqbphwkv9.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%2Ffcoc572mgq9dqbphwkv9.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Summary&lt;br&gt;
Cursors: Useful to process query results row by row.&lt;br&gt;
Triggers: Automatically execute actions on INSERT, UPDATE, or DELETE events.&lt;br&gt;
Together, they allow you to implement row-level processing and automated logging in SQL.&lt;/p&gt;

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

</description>
      <category>oracle</category>
      <category>database</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>Understanding Database Normalization (1NF, 2NF, 3NF) with SQL Examples</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Sat, 04 Oct 2025 01:38:40 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/understanding-database-normalization-1nf-2nf-3nf-with-sql-examples-22ff</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/understanding-database-normalization-1nf-2nf-3nf-with-sql-examples-22ff</guid>
      <description>&lt;p&gt;In this post, we will learn about 1NF, 2NF, and 3NF with SQL examples. We’ll start with a denormalized base table and gradually normalize it step by step.&lt;/p&gt;

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

&lt;p&gt;Anomalies in Base Table&lt;br&gt;
Insertion Anomaly: Can’t add a new course until a student registers.&lt;br&gt;
Update Anomaly: If Prof. Smith changes name → must update multiple rows.&lt;br&gt;
Deletion Anomaly: If Alice drops all courses → course info is lost.&lt;/p&gt;

&lt;p&gt;First Normal Form (1NF)&lt;br&gt;
Rule: Remove repeating groups and ensure atomic values.&lt;br&gt;
In our base table, values are already atomic, so 1NF just looks like this:&lt;br&gt;
CREATE TABLE StudentCourse (&lt;br&gt;
    StudentID VARCHAR(10),&lt;br&gt;
    StudentName VARCHAR(50),&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    CourseName VARCHAR(50),&lt;br&gt;
    InstructorName VARCHAR(50),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Second Normal Form (2NF)&lt;br&gt;
Rule: Eliminate partial dependency (non-key attributes should depend on the whole primary key).&lt;br&gt;
Here, StudentName depends only on StudentID.&lt;br&gt;
CourseName and InstructorName depend only on CourseID.&lt;br&gt;
So, we split into three tables:&lt;br&gt;
-- Students Table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    StudentID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    StudentName VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Courses Table&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
    CourseID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    CourseName VARCHAR(50),&lt;br&gt;
    InstructorName VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Relationship Table&lt;br&gt;
CREATE TABLE StudentCourse (&lt;br&gt;
    StudentID VARCHAR(10),&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Third Normal Form (3NF)&lt;br&gt;
👉 Rule: Remove transitive dependency (non-key attribute depending on another non-key).&lt;br&gt;
InstructorName depends on CourseID, but instructor details should be separate.&lt;br&gt;
So, we restructure:&lt;br&gt;
-- Students Table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    StudentID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    StudentName VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Instructors Table&lt;br&gt;
CREATE TABLE Instructors (&lt;br&gt;
    InstructorID VARCHAR(10) PRIMARY KEY,&lt;br&gt;
    InstructorName VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;

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

&lt;p&gt;-- Relationship Table&lt;br&gt;
CREATE TABLE StudentCourse (&lt;br&gt;
    StudentID VARCHAR(10),&lt;br&gt;
    CourseID VARCHAR(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)&lt;br&gt;
);&lt;br&gt;
-- Insert Students&lt;br&gt;
INSERT INTO Students VALUES ('S1', 'Alice');&lt;br&gt;
INSERT INTO Students VALUES ('S2', 'Bob');&lt;/p&gt;

&lt;p&gt;-- Insert Instructors&lt;br&gt;
INSERT INTO Instructors VALUES ('I1', 'Prof. Smith');&lt;br&gt;
INSERT INTO Instructors VALUES ('I2', 'Prof. John');&lt;br&gt;
INSERT INTO Instructors VALUES ('I3', 'Prof. Mary');&lt;/p&gt;

&lt;p&gt;-- Insert Courses&lt;br&gt;
INSERT INTO Courses VALUES ('C101', 'DBMS', 'I1');&lt;br&gt;
INSERT INTO Courses VALUES ('C102', 'Networks', 'I2');&lt;br&gt;
INSERT INTO Courses VALUES ('C103', 'AI', 'I3');&lt;/p&gt;

&lt;p&gt;-- Student-Course Mapping&lt;br&gt;
INSERT INTO StudentCourse VALUES ('S1', 'C101');&lt;br&gt;
INSERT INTO StudentCourse VALUES ('S2', 'C102');&lt;br&gt;
INSERT INTO StudentCourse VALUES ('S1', 'C103');&lt;/p&gt;

&lt;p&gt;Query with JOINs&lt;br&gt;
Now, let’s list all students with their courses and instructors:&lt;/p&gt;

&lt;p&gt;SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Students s&lt;br&gt;
JOIN StudentCourse sc ON s.StudentID = sc.StudentID&lt;br&gt;
JOIN Courses c ON sc.CourseID = c.CourseID&lt;br&gt;
JOIN Instructors i ON c.InstructorID = i.InstructorID;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6av8f5v7xf9q28d8vg3k.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%2F6av8f5v7xf9q28d8vg3k.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpyunvj3q81ka9wad4mb.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%2Ffpyunvj3q81ka9wad4mb.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04yeiwi6rzgqm670natj.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%2F04yeiwi6rzgqm670natj.png" alt=" " width="800" height="334"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlsbrlaa5twawhb3iwen.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%2Fwlsbrlaa5twawhb3iwen.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpibi20kmr0pgejudy9z.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%2Fmpibi20kmr0pgejudy9z.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshoupom9avkp7zhxikg4.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%2Fshoupom9avkp7zhxikg4.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjn4g6n0xaoajvgl8dpyq.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%2Fjn4g6n0xaoajvgl8dpyq.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;THANK YOU &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding and supporting me!!&lt;/p&gt;

</description>
      <category>database</category>
      <category>design</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>College Student &amp; Course Management System</title>
      <dc:creator>Boopathy.S</dc:creator>
      <pubDate>Thu, 21 Aug 2025 14:33:06 +0000</pubDate>
      <link>https://dev.to/boopathys_8ff57c77ea5a5e/college-student-course-management-system-47b0</link>
      <guid>https://dev.to/boopathys_8ff57c77ea5a5e/college-student-course-management-system-47b0</guid>
      <description>&lt;p&gt;INTRODUCTION:&lt;br&gt;
In this blog we are going to create a college student and course management system .Managing students, courses, and enrollments is a common requirement in colleges and universities. In this blog, we’ll build a Student and Course Management System step by step using Oracle SQL.&lt;/p&gt;

&lt;p&gt;we will learn how to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create relational tables (Students, Courses, and Enrollments)&lt;/p&gt;

&lt;p&gt;Insert sample data&lt;/p&gt;

&lt;p&gt;Alter tables and add constraints&lt;/p&gt;

&lt;p&gt;Run queries to retrieve meaningful results&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Step 1: Create the Students table&lt;br&gt;
We’ll start by creating a Students table to store student information.&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
    StudentID NUMBER PRIMARY KEY,&lt;br&gt;
    Name VARCHAR2(50) NOT NULL,&lt;br&gt;
    Dept VARCHAR2(30),&lt;br&gt;
    DOB DATE,&lt;br&gt;
    Email VARCHAR2(50) UNIQUE&lt;br&gt;
);&lt;br&gt;
Explanation:&lt;br&gt;
StudentID: Primary key, ensures uniqueness.&lt;br&gt;
Name: Student name (mandatory field).&lt;br&gt;
Dept: Department of the student.&lt;br&gt;
DOB: Date of Birth.&lt;br&gt;
Email: Must be unique for every student.&lt;/p&gt;

&lt;p&gt;Step 2: Create the Courses table&lt;br&gt;
Now, let’s create a table to store various courses.&lt;br&gt;
sql&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;br&gt;
We also want to make sure credits are valid. Let’s add a constraint:&lt;br&gt;
sql&lt;br&gt;
ALTER TABLE Courses ADD CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;Step 3: Create the Enrollments table&lt;br&gt;
The Enrollments table connects students and courses.&lt;/p&gt;

&lt;p&gt;sql&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;br&gt;
This establishes foreign key relationships, ensuring only valid students and valid courses can be enrolled.&lt;/p&gt;

&lt;p&gt;Step 4: Insert Sample Data&lt;br&gt;
Insert a few students:&lt;br&gt;
sql&lt;br&gt;
INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (1, 'JAI', 'Computer Science', TO_DATE('2006-03-15', 'YYYY-MM-DD'), '&lt;a href="mailto:jai.cs@example.com"&gt;jai.cs@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (2, 'MATHI', 'Electrical Engineering', TO_DATE('2006-11-22', 'YYYY-MM-DD'), '&lt;a href="mailto:mathi.ee@example.com"&gt;mathi.ee@example.com&lt;/a&gt;');&lt;/p&gt;

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

&lt;p&gt;sql&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (101, 'Database Systems', 3);&lt;/p&gt;

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

&lt;p&gt;INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (103, 'Data Structures', 5);&lt;br&gt;
 Don’t forget to commit your changes:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;Step 5: Alter Table (Add Phone Number)&lt;br&gt;
Let’s add a new column for student phone numbers:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
ALTER TABLE Students ADD PhoneNo VARCHAR2(10);&lt;/p&gt;

&lt;p&gt;Step 6: Run Useful Queries&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Display student names in uppercase with email length
sql
SELECT UPPER(Name) AS Student_Name, LENGTH(Email) AS Email_Length
FROM Students;&lt;/li&gt;
&lt;li&gt;Show all courses with credits
sql
SELECT CourseID, CourseName, Credits FROM Courses;&lt;/li&gt;
&lt;li&gt;Display all students
sql
SELECT StudentID, Name, Dept, DOB, Email, PhoneNo FROM Students;&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%2F3dsxv1hg5tif6707ut57.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%2F3dsxv1hg5tif6707ut57.jpg" alt=" " width="800" height="393"&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%2F29sgr2nhpfsbm3xaeott.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%2F29sgr2nhpfsbm3xaeott.jpg" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38sz1rv8a66pba2cdrtd.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%2F38sz1rv8a66pba2cdrtd.jpg" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ua86teb65tif5nrozwp.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%2F5ua86teb65tif5nrozwp.jpg" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally:&lt;br&gt;
We have successfully built a College Student and Course Management System using Oracle SQL.&lt;/p&gt;

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

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