<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nethra Loganathan</title>
    <description>The latest articles on Forem by Nethra Loganathan (@nethra_loganathan_98e5233).</description>
    <link>https://forem.com/nethra_loganathan_98e5233</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%2F3458474%2F98cb4d3b-249c-4567-8e29-c9d3f5aa7ea9.jpg</url>
      <title>Forem: Nethra Loganathan</title>
      <link>https://forem.com/nethra_loganathan_98e5233</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nethra_loganathan_98e5233"/>
    <language>en</language>
    <item>
      <title>AWS Service: Amazon Neptune</title>
      <dc:creator>Nethra Loganathan</dc:creator>
      <pubDate>Thu, 18 Dec 2025 16:46:14 +0000</pubDate>
      <link>https://forem.com/nethra_loganathan_98e5233/aws-service-amazon-neptune-3i</link>
      <guid>https://forem.com/nethra_loganathan_98e5233/aws-service-amazon-neptune-3i</guid>
      <description>&lt;p&gt;&lt;strong&gt;Service Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Neptune is a fully managed graph database service designed for applications that work with highly connected data such as social networks, recommendation engines, fraud detection, and knowledge graphs.&lt;/p&gt;

&lt;p&gt;It supports popular graph models like Property Graph and RDF.&lt;/p&gt;

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

&lt;p&gt;Fully managed and highly available&lt;/p&gt;

&lt;p&gt;Supports Gremlin and SPARQL query languages&lt;/p&gt;

&lt;p&gt;Optimized for graph workloads&lt;/p&gt;

&lt;p&gt;Automatic backups and replication&lt;/p&gt;

&lt;p&gt;Secure with encryption at rest and in transit&lt;/p&gt;

&lt;p&gt;Scales to billions of relationships&lt;/p&gt;

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

&lt;p&gt;Category: Database&lt;/p&gt;

&lt;p&gt;Cloud Domain: Database as a Service (DBaaS)&lt;/p&gt;

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

&lt;p&gt;Develop: Build graph-based applications&lt;/p&gt;

&lt;p&gt;Deploy: Managed database deployment&lt;/p&gt;

&lt;p&gt;Operate: AWS handles scaling, backups, and patching&lt;/p&gt;

&lt;p&gt;Scale: Automatically scales with workload&lt;/p&gt;

&lt;p&gt;Used in DevOps for data-driven, real-time applications.&lt;/p&gt;

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

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

&lt;p&gt;Gremlin&lt;/p&gt;

&lt;p&gt;SPARQL&lt;/p&gt;

&lt;p&gt;Access Methods:&lt;/p&gt;

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

&lt;p&gt;AWS CLI&lt;/p&gt;

&lt;p&gt;AWS SDKs (Python, Java, JavaScript, etc.)&lt;/p&gt;

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

&lt;p&gt;➡  Pay-as-you-go&lt;/p&gt;

&lt;p&gt;➡ Charged based on:&lt;/p&gt;

&lt;p&gt;➡  Instance hours&lt;/p&gt;

&lt;p&gt;➡ Storage used&lt;/p&gt;

&lt;p&gt;➡ I/O operations&lt;/p&gt;

&lt;p&gt;➡ Data transfer&lt;/p&gt;

&lt;p&gt;➡ No upfront cost&lt;/p&gt;

</description>
      <category>aws</category>
      <category>graphdatabase</category>
      <category>devops</category>
      <category>database</category>
    </item>
    <item>
      <title>DevSecOps Periodic Table-Tekton (TK)</title>
      <dc:creator>Nethra Loganathan</dc:creator>
      <pubDate>Thu, 18 Dec 2025 16:35:36 +0000</pubDate>
      <link>https://forem.com/nethra_loganathan_98e5233/devsecops-periodic-table-tekton-tk-453j</link>
      <guid>https://forem.com/nethra_loganathan_98e5233/devsecops-periodic-table-tekton-tk-453j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview of the Tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tekton is an open-source Kubernetes-native CI/CD framework used to build, test, and deploy applications. It provides reusable and scalable pipeline components that run entirely on Kubernetes.&lt;/p&gt;

&lt;p&gt;Tekton helps teams automate software delivery while integrating security checks, making it suitable for DevSecOps environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;br&gt;
Kubernetes-native CI/CD pipelines&lt;/p&gt;

&lt;p&gt;Declarative pipeline definitions using YAML&lt;/p&gt;

&lt;p&gt;Reusable pipeline components (Tasks &amp;amp; Pipelines)&lt;/p&gt;

&lt;p&gt;Cloud-native and scalable&lt;/p&gt;

&lt;p&gt;Easy integration with security tools (SAST, container scanning)&lt;/p&gt;

&lt;p&gt;Works well with GitHub, GitLab, Docker, Kubernetes&lt;/p&gt;

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

&lt;p&gt;Automates build, test, and deploy stages&lt;/p&gt;

&lt;p&gt;Enables CI/CD pipelines inside Kubernetes&lt;/p&gt;

&lt;p&gt;Supports shift-left security by integrating security scans&lt;/p&gt;

&lt;p&gt;Used to enforce secure software delivery practices&lt;/p&gt;

&lt;p&gt;Bridges Development + Security + Operations&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming Language&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Written in Go (Golang)&lt;/p&gt;

&lt;p&gt;Pipelines are defined using YAML&lt;/p&gt;

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

&lt;p&gt;Originally developed by Google&lt;/p&gt;

&lt;p&gt;Now maintained by the Continuous Delivery Foundation (CDF)&lt;/p&gt;

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

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

&lt;p&gt;Free to use&lt;/p&gt;

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

&lt;p&gt;Tekton is a powerful cloud-native CI/CD tool that plays a key role in DevSecOps by enabling secure, automated, and scalable software delivery pipelines on Kubernetes.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>devsecops</category>
      <category>tekton</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>Database Normalization in Oracle SQL — From 1NF to 3NF with Example</title>
      <dc:creator>Nethra Loganathan</dc:creator>
      <pubDate>Sun, 05 Oct 2025 07:37:40 +0000</pubDate>
      <link>https://forem.com/nethra_loganathan_98e5233/database-normalization-in-oracle-sql-from-1nf-to-3nf-with-example-4202</link>
      <guid>https://forem.com/nethra_loganathan_98e5233/database-normalization-in-oracle-sql-from-1nf-to-3nf-with-example-4202</guid>
      <description>&lt;p&gt;Normalization is a process that helps to remove redundancy, avoid anomalies, and improve data consistency in a relational database.&lt;br&gt;
Step 1: Understanding Data Anomalies&lt;/p&gt;

&lt;p&gt;Before normalization, let’s look at an unnormalized table:&lt;/p&gt;

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

&lt;p&gt;Anomalies Present&lt;/p&gt;

&lt;p&gt;Insertion Anomaly: Can’t insert a new course unless a student takes it.&lt;/p&gt;

&lt;p&gt;Update Anomaly: Changing an instructor’s phone requires multiple updates.&lt;/p&gt;

&lt;p&gt;Deletion Anomaly: Deleting a student may also delete course information.&lt;/p&gt;

&lt;p&gt;Step 2: Conversion to 1NF&lt;/p&gt;

&lt;p&gt;In 1NF, each field holds only one value — our table already follows this form.&lt;/p&gt;

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

&lt;p&gt;Step 3: Conversion to 2NF&lt;/p&gt;

&lt;p&gt;In 2NF, we remove partial dependencies.&lt;br&gt;
We separate students and courses into different 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;/p&gt;

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

&lt;p&gt;CREATE TABLE StudentCourses (&lt;br&gt;
    StudentID VARCHAR2(10),&lt;br&gt;
    CourseID VARCHAR2(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)&lt;br&gt;
);&lt;br&gt;
Step 4: Conversion to 3NF&lt;/p&gt;

&lt;p&gt;In 3NF, we remove transitive dependencies — instructor details are separated into their own table.&lt;/p&gt;

&lt;p&gt;CREATE TABLE Instructors (&lt;br&gt;
    InstructorID INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,&lt;br&gt;
    InstructorName VARCHAR2(50),&lt;br&gt;
    InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE Courses (&lt;br&gt;
    CourseID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
    CourseName VARCHAR2(50),&lt;br&gt;
    InstructorID INT,&lt;br&gt;
    FOREIGN KEY (InstructorID) REFERENCES Instructors(InstructorID)&lt;br&gt;
);&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;/p&gt;

&lt;p&gt;CREATE TABLE StudentCourses (&lt;br&gt;
    StudentID VARCHAR2(10),&lt;br&gt;
    CourseID VARCHAR2(10),&lt;br&gt;
    PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)&lt;br&gt;
);&lt;br&gt;
Step 5: Inserting Sample Data&lt;br&gt;
-- Insert Students&lt;br&gt;
INSERT INTO Students VALUES ('S01', 'Arjun');&lt;br&gt;
INSERT INTO Students VALUES ('S02', 'Priya');&lt;br&gt;
INSERT INTO Students VALUES ('S03', 'Kiran');&lt;/p&gt;

&lt;p&gt;-- Insert Instructors&lt;br&gt;
INSERT INTO Instructors (InstructorName, InstructorPhone)&lt;br&gt;
VALUES ('Dr.Kumar', '9876543210');&lt;br&gt;
INSERT INTO Instructors (InstructorName, InstructorPhone)&lt;br&gt;
VALUES ('Dr.Mehta', '9123456780');&lt;br&gt;
INSERT INTO Instructors (InstructorName, InstructorPhone)&lt;br&gt;
VALUES ('Dr.Rao', '9988774455');&lt;/p&gt;

&lt;p&gt;-- Insert Courses&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, InstructorID)&lt;br&gt;
VALUES ('C101', 'DBMS', 1);&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, InstructorID)&lt;br&gt;
VALUES ('C102', 'Data Mining', 2);&lt;br&gt;
INSERT INTO Courses (CourseID, CourseName, InstructorID)&lt;br&gt;
VALUES ('C103', 'AI', 3);&lt;/p&gt;

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

&lt;p&gt;Step 6: Joining Tables to Display Final Output&lt;/p&gt;

&lt;p&gt;Let’s join all tables to display Student Name, Course, and Instructor:&lt;/p&gt;

&lt;p&gt;SELECT &lt;br&gt;
    s.StudentName,&lt;br&gt;
    c.CourseName,&lt;br&gt;
    i.InstructorName&lt;br&gt;
FROM &lt;br&gt;
    Students s&lt;br&gt;
JOIN &lt;br&gt;
    StudentCourses sc ON s.StudentID = sc.StudentID&lt;br&gt;
JOIN &lt;br&gt;
    Courses c ON sc.CourseID = c.CourseID&lt;br&gt;
JOIN &lt;br&gt;
    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%2Ffq0xwz3w9k40js7oxh04.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%2Ffq0xwz3w9k40js7oxh04.png" alt=" " width="800" height="394"&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%2Fuo2i48sx2tw22p2fymnj.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%2Fuo2i48sx2tw22p2fymnj.png" alt=" " width="800" height="415"&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%2F92fiwldi0xdl6jqa0xh3.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%2F92fiwldi0xdl6jqa0xh3.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>Cursor &amp; Trigger in SQL with Examples</title>
      <dc:creator>Nethra Loganathan</dc:creator>
      <pubDate>Sat, 04 Oct 2025 03:37:12 +0000</pubDate>
      <link>https://forem.com/nethra_loganathan_98e5233/cursor-trigger-in-sql-with-examples-amg</link>
      <guid>https://forem.com/nethra_loganathan_98e5233/cursor-trigger-in-sql-with-examples-amg</guid>
      <description>&lt;p&gt;In this blog, we’ll explore two important SQL concepts: Cursors and Triggers.&lt;br&gt;
We’ll walk through step-by-step examples:&lt;/p&gt;

&lt;p&gt;A cursor that displays employee names with salary greater than 50,000.&lt;/p&gt;

&lt;p&gt;An AFTER INSERT trigger that logs student registrations into an audit table.&lt;/p&gt;

&lt;p&gt;Part 1: Cursor – Process Cursor with Condition&lt;br&gt;
Problem Statement&lt;/p&gt;

&lt;p&gt;We need to create a cursor that displays employee names whose salary is greater than 50,000 from the Employee table.&lt;/p&gt;

&lt;p&gt;Steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create Employee Table&lt;br&gt;
CREATE TABLE Employee (&lt;br&gt;
EmpID INT PRIMARY KEY,&lt;br&gt;
EmpName VARCHAR(50),&lt;br&gt;
Salary DECIMAL(10,2)&lt;br&gt;
);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Insert Sample Records&lt;br&gt;
INSERT INTO Employee (EmpID, EmpName, Salary) VALUES&lt;br&gt;
(1, 'Alice', 60000),&lt;br&gt;
(2, 'Bob', 48000),&lt;br&gt;
(3, 'Charlie', 75000),&lt;br&gt;
(4, 'David', 45000),&lt;br&gt;
(5, 'Eve', 90000);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create and Use the Cursor&lt;br&gt;
DECLARE @EmpName VARCHAR(50), @Salary DECIMAL(10,2);&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;OPEN EmployeeCursor;&lt;/p&gt;

&lt;p&gt;FETCH NEXT FROM EmployeeCursor INTO @EmpName, @Salary;&lt;/p&gt;

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

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

&lt;ol&gt;
&lt;li&gt;Output Example
Employee: Alice | Salary: 60000
Employee: Charlie | Salary: 75000
Employee: Eve | Salary: 90000
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Part 2: Trigger – AFTER INSERT on Student Table&lt;br&gt;
Problem Statement&lt;/p&gt;

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

&lt;p&gt;Steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create Students Table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
StudentID INT PRIMARY KEY,&lt;br&gt;
StudentName VARCHAR(50),&lt;br&gt;
Department VARCHAR(50)&lt;br&gt;
);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create Student_Audit Table&lt;br&gt;
CREATE TABLE Student_Audit (&lt;br&gt;
AuditID INT IDENTITY(1,1) PRIMARY KEY,&lt;br&gt;
StudentID INT,&lt;br&gt;
Action VARCHAR(50),&lt;br&gt;
ActionDate DATETIME&lt;br&gt;
);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create the Trigger&lt;br&gt;
CREATE TRIGGER trg_AfterStudentInsert&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 (StudentID, Action, ActionDate)&lt;br&gt;
SELECT StudentID, 'INSERT', GETDATE()&lt;br&gt;
FROM inserted;&lt;br&gt;
END;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test the Trigger by Inserting a Student&lt;br&gt;
INSERT INTO Students (StudentID, StudentName, Department)&lt;br&gt;
VALUES (101, 'Rahul', 'Computer Science');&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the Audit Table&lt;br&gt;
SELECT * FROM Student_Audit;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Output Example&lt;br&gt;
AuditID | StudentID | Action | ActionDate&lt;br&gt;&lt;br&gt;
1       | 101       | INSERT | 2025-10-02 10:15:32  &lt;/p&gt;

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

&lt;p&gt;With cursors, we can process query results row by row and apply conditions (like salary &amp;gt; 50,000).&lt;/p&gt;

&lt;p&gt;With triggers, we can automate actions — in this case, logging every student registration.&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%2Fo1yt2lzd2mr07xaip4st.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%2Fo1yt2lzd2mr07xaip4st.png" alt=" " width="800" height="553"&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%2F7la72u1jsl0lo98v8xbz.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%2F7la72u1jsl0lo98v8xbz.png" alt=" " width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>CRUD Operations in MongoDB</title>
      <dc:creator>Nethra Loganathan</dc:creator>
      <pubDate>Sat, 04 Oct 2025 02:59:13 +0000</pubDate>
      <link>https://forem.com/nethra_loganathan_98e5233/crud-operations-in-mongodb-3810</link>
      <guid>https://forem.com/nethra_loganathan_98e5233/crud-operations-in-mongodb-3810</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;MongoDB is one of the most popular NoSQL databases used for building modern, scalable applications. Unlike traditional relational databases, MongoDB stores data in flexible JSON-like documents, making it perfect for handling real-world scenarios.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore CRUD operations (Create, Read, Update, Delete) with MongoDB using a simple example — a college student database.&lt;/p&gt;

&lt;p&gt;1.create (Insert)&lt;/p&gt;

&lt;p&gt;We start by inserting student records into our students collection.&lt;/p&gt;

&lt;p&gt;Each student is stored as a document:&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;Insert multiple students at once:&lt;/p&gt;

&lt;p&gt;use college;&lt;/p&gt;

&lt;p&gt;db.students.insertMany([&lt;br&gt;
{&lt;br&gt;
"student_id": "S001",&lt;br&gt;
"name": "Santhosh",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "Computer Science",&lt;br&gt;
"year": 2,&lt;br&gt;
"cgpa": 9&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "S002",&lt;br&gt;
"name": "Priya",&lt;br&gt;
"age": 21,&lt;br&gt;
"department": "Computer Science",&lt;br&gt;
"year": 3,&lt;br&gt;
"cgpa": 8.5&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "S003",&lt;br&gt;
"name": "Arjun",&lt;br&gt;
"age": 19,&lt;br&gt;
"department": "Electronics",&lt;br&gt;
"year": 3,&lt;br&gt;
"cgpa": 7.2&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "S004",&lt;br&gt;
"name": "Meera",&lt;br&gt;
"age": 22,&lt;br&gt;
"department": "Computer Science",&lt;br&gt;
"year": 1,&lt;br&gt;
"cgpa": 6.8&lt;br&gt;
},&lt;br&gt;
{&lt;br&gt;
"student_id": "S005",&lt;br&gt;
"name": "Nethra",&lt;br&gt;
"age": 20,&lt;br&gt;
"department": "CSBS",&lt;br&gt;
"year": 3,&lt;br&gt;
"cgpa": 9.2&lt;br&gt;
}&lt;br&gt;
]);&lt;/p&gt;

&lt;p&gt;2.read (Query)&lt;/p&gt;

&lt;p&gt;Fetch all students:&lt;/p&gt;

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

&lt;p&gt;Find all students with CGPA &amp;gt; 8:&lt;/p&gt;

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

&lt;p&gt;Find all students belonging to the CSE department:&lt;/p&gt;

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

&lt;p&gt;3.Update&lt;/p&gt;

&lt;p&gt;Update the CGPA of a specific student:&lt;/p&gt;

&lt;p&gt;db.students.updateOne(&lt;br&gt;
  { student_id: "S005" },&lt;br&gt;
  { $set: { cgpa: 9.2};&lt;/p&gt;

&lt;p&gt;Increase year of study for all 3rd-year students:&lt;/p&gt;

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

&lt;p&gt;4.Delete&lt;/p&gt;

&lt;p&gt;Delete one student record by ID:&lt;/p&gt;

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

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

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

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

&lt;p&gt;In this blog, we explored how to perform CRUD operations in MongoDB with a student database.&lt;/p&gt;

&lt;p&gt;We:&lt;br&gt;
✔ Inserted multiple student records&lt;br&gt;
✔ Queried documents with filters&lt;br&gt;
✔ Updated single and multiple documents&lt;br&gt;
✔ Deleted records selectively&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%2F6dfrk7gp6aj42prdy5e3.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%2F6dfrk7gp6aj42prdy5e3.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>mongodb</category>
      <category>beginners</category>
    </item>
    <item>
      <title>DBMS-Transaction, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>Nethra Loganathan</dc:creator>
      <pubDate>Sat, 04 Oct 2025 01:55:05 +0000</pubDate>
      <link>https://forem.com/nethra_loganathan_98e5233/dbms-transaction-deadlocks-log-based-recovery-n9h</link>
      <guid>https://forem.com/nethra_loganathan_98e5233/dbms-transaction-deadlocks-log-based-recovery-n9h</guid>
      <description>&lt;p&gt;STEP 1: Create table and Insert data&lt;/p&gt;

&lt;p&gt;CREATE TABLE CustomerAccounts (&lt;br&gt;
    acc_no INT PRIMARY KEY,&lt;br&gt;
    name VARCHAR2(50),&lt;br&gt;
    balance INT&lt;br&gt;
);&lt;/p&gt;

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

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

&lt;p&gt;Step 2: Transaction – Atomicity &amp;amp; Rollback&lt;/p&gt;

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

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

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

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

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

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

&lt;p&gt;Step 3: Deadlock Simulation (Conceptual)&lt;/p&gt;

&lt;p&gt;Session 1 (conceptual)&lt;/p&gt;

&lt;p&gt;-- Lock Alice&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance - 100 WHERE name = 'Alice';&lt;br&gt;
-- Do NOT commit&lt;/p&gt;

&lt;p&gt;Session 2 (conceptual)&lt;br&gt;
-- Lock Bob&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance - 200 WHERE name = 'Bob';&lt;br&gt;
-- Do NOT commit&lt;/p&gt;

&lt;p&gt;Continuing Session 1&lt;br&gt;
-- Try updating Bob (held by Session 2)&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 100 WHERE name = 'Bob';&lt;/p&gt;

&lt;p&gt;Continuing Session 2&lt;br&gt;
-- Try updating Alice (held by Session 1)&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 200 WHERE name = 'Alice';&lt;/p&gt;

&lt;p&gt;Expected in a real multi-session DB:&lt;/p&gt;

&lt;p&gt;ORA-00060: deadlock detected while waiting for resource.&lt;/p&gt;

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

&lt;p&gt;UPDATE CustomerAccounts&lt;br&gt;
SET balance = balance + 200;&lt;br&gt;
WHERE name = 'Charlie';&lt;/p&gt;

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

&lt;p&gt;SELECT * FROM CustomerAccounts;&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%2Fpyg813q7kp64ornluz7n.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%2Fpyg813q7kp64ornluz7n.png" alt=" " width="800" height="589"&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%2F2qcdtqs7rs8oy4eznhts.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%2F2qcdtqs7rs8oy4eznhts.png" alt=" " width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>learning</category>
      <category>database</category>
      <category>sql</category>
    </item>
  </channel>
</rss>
