<?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: Jerlin vanessa Vincent paul</title>
    <description>The latest articles on DEV Community by Jerlin vanessa Vincent paul (@jerlin_vanessavincentpa).</description>
    <link>https://dev.to/jerlin_vanessavincentpa</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%2F3449292%2Fa00ad308-5b69-40ad-9ec3-719b9d0564a6.png</url>
      <title>DEV Community: Jerlin vanessa Vincent paul</title>
      <link>https://dev.to/jerlin_vanessavincentpa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jerlin_vanessavincentpa"/>
    <language>en</language>
    <item>
      <title>AWS Tool Starting With J: Amazon Java Corretto</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sun, 21 Dec 2025 06:46:28 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/aws-tool-starting-with-j-amazon-java-corretto-1h0c</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/aws-tool-starting-with-j-amazon-java-corretto-1h0c</guid>
      <description>&lt;p&gt;-&amp;gt; &lt;strong&gt;AWS Tool Starting With J: Amazon Corretto&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When building Java applications in the cloud, choosing the right Java runtime is critical for security, stability, and cost. Amazon Corretto, an AWS-provided distribution of OpenJDK, is designed to meet these needs in modern Cloud, DevOps, and DevSecOps environments.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Service Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Corretto is a free, multi-platform, production-ready OpenJDK distribution maintained by Amazon Web Services. It comes with long-term support (LTS) and regular security updates, making it a reliable choice for running Java applications at scale.&lt;/p&gt;

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

&lt;p&gt;*Fully compatible with OpenJDK&lt;/p&gt;

&lt;p&gt;*Long-term support (LTS) versions&lt;/p&gt;

&lt;p&gt;*Regular security patches and performance improvements&lt;/p&gt;

&lt;p&gt;*No licensing or subscription costs&lt;/p&gt;

&lt;p&gt;*Optimized for AWS workloads&lt;/p&gt;

&lt;p&gt;*Available for Linux, Windows, and macOS&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Where Amazon Corretto Fits in the Cloud &amp;amp; DevOps Lifecycle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;*Amazon Corretto plays a key role across the software delivery lifecycle:&lt;/p&gt;

&lt;p&gt;*Development: Consistent Java runtime across teams&lt;/p&gt;

&lt;p&gt;*CI/CD: Used in build and test pipelines&lt;/p&gt;

&lt;p&gt;*Deployment: Runs microservices and backend applications&lt;/p&gt;

&lt;p&gt;*Security: Timely patches reduce vulnerabilities&lt;/p&gt;

&lt;p&gt;*Operations: Stable performance in production&lt;/p&gt;

&lt;p&gt;*It is commonly used with Docker, Kubernetes, and AWS CI/CD services.&lt;/p&gt;

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

&lt;p&gt;*Programming Language: Java&lt;/p&gt;

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

&lt;p&gt;*Command Line (CLI)&lt;/p&gt;

&lt;p&gt;*IDEs (IntelliJ, Eclipse)&lt;/p&gt;

&lt;p&gt;*Docker images&lt;/p&gt;

&lt;p&gt;*CI/CD tools (CodeBuild, Jenkins)&lt;/p&gt;

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

&lt;p&gt;*Compute / Programming Runtime&lt;/p&gt;

&lt;p&gt;*Developer Tools&lt;/p&gt;

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

&lt;p&gt;*Open source&lt;/p&gt;

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

&lt;p&gt;*No licensing fees (only AWS infrastructure costs apply)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon Corretto is a secure, cost-effective, and production-ready Java runtime for cloud-native applications. Backed by AWS with long-term support and frequent security updates, it removes licensing concerns while ensuring reliability—making it a strong choice for Java developers and DevSecOps teams alike.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding and motivating us.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>DevSecOps Periodic Table: JIRA</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sun, 21 Dec 2025 06:38:14 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/devsecops-periodic-table-jira-2p73</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/devsecops-periodic-table-jira-2p73</guid>
      <description>&lt;p&gt;&lt;strong&gt;DevSecOps Periodic Table: JIRA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the DevSecOps periodic table, JIRA represents the planning and tracking element that binds development, security, and operations together. While it doesn’t run code or scan vulnerabilities, it plays a critical role in ensuring visibility, accountability, and continuous collaboration across the software lifecycle.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Overview of the Tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JIRA is a project management and issue-tracking tool developed by Atlassian. It is widely used to manage software development tasks, bugs, operational incidents, and security findings using Agile frameworks such as Scrum and Kanban.&lt;/p&gt;

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

&lt;p&gt;*Issue and bug tracking&lt;/p&gt;

&lt;p&gt;*Scrum and Kanban boards&lt;/p&gt;

&lt;p&gt;*Sprint planning and backlog management&lt;/p&gt;

&lt;p&gt;*Custom workflows and issue types&lt;/p&gt;

&lt;p&gt;*Dashboards and reporting&lt;/p&gt;

&lt;p&gt;*Integration with CI/CD and security tools&lt;/p&gt;

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

&lt;p&gt;In a DevSecOps pipeline, JIRA acts as the single source of truth for:&lt;/p&gt;

&lt;p&gt;*Development tasks&lt;/p&gt;

&lt;p&gt;*Operational incidents&lt;/p&gt;

&lt;p&gt;*Security vulnerabilities&lt;/p&gt;

&lt;p&gt;Security issues discovered by tools like Snyk, Trivy, or SonarQube can be logged and tracked in JIRA, ensuring that security is addressed early and continuously throughout the SDLC.&lt;/p&gt;

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

&lt;p&gt;*Backend: Java&lt;/p&gt;

&lt;p&gt;*Frontend: JavaScript&lt;/p&gt;

&lt;p&gt;*Integration: REST APIs&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Parent Company of the Tool Atlassian&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open Source or Paid&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Not open source&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commercial (Paid) tool&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free tier available for small teams&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JIRA may not scan code or deploy applications, but it is a core element of DevSecOps governance. By enabling structured tracking, transparency, and collaboration, JIRA ensures that development, security, and operations teams move forward together—securely and efficiently.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; Sir for his guidance and support and for everything&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Database Normalization</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sat, 04 Oct 2025 12:50:44 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/database-normalization-b6j</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/database-normalization-b6j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Database Normalization:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Database normalization is the process of structuring a relational database to reduce redundancy and improve data integrity.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll normalize a student-course-instructor dataset from Unnormalized Form → 1NF → 2NF → 3NF, and implement it in SQL.&lt;/p&gt;

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

&lt;p&gt;The initial unnormalized table includes details of students, their courses, instructors, and corresponding grades.&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%2Fzxtq4t5r7z514y7xoewc.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%2Fzxtq4t5r7z514y7xoewc.png" alt=" " width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Identifying Anomalies&lt;/p&gt;

&lt;p&gt;Insertion anomaly: A new course cannot be added unless it is linked to a student.&lt;/p&gt;

&lt;p&gt;Update anomaly: Modifying a course name requires updating it in several rows.&lt;/p&gt;

&lt;p&gt;Deletion anomaly: Removing a student may also remove valuable course details if that student was the only enrollee.&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%2Fi8akhwa9c8b9lqjktjg9.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%2Fi8akhwa9c8b9lqjktjg9.png" alt=" " width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Rule: Eliminate repeating groups, ensure atomic values.&lt;/p&gt;

&lt;p&gt;So, we split multi-valued attributes into separate rows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Table in 1 NF&lt;/strong&gt;,&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students_1NF (&lt;br&gt;
Student_ID INT,&lt;br&gt;
Student_Name VARCHAR2(100),&lt;br&gt;
Course_ID INT,&lt;br&gt;
Course_Name VARCHAR2(100),&lt;br&gt;
Instructor VARCHAR2(100),&lt;br&gt;
Grade CHAR(2),&lt;br&gt;
PRIMARY KEY (Student_ID, Course_ID)&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%2Fcv8a9y3ot3jtgfu604qt.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%2Fcv8a9y3ot3jtgfu604qt.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Rule: Remove partial dependency → non-key attributes should depend on the whole primary key.&lt;/p&gt;

&lt;p&gt;Here, student_id depends on student info, course_id depends on course info, and instructor depends on the course.&lt;br&gt;
So, we split into three tables:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Create Tables (2NF):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students (&lt;br&gt;
StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
StudentName VARCHAR2(100)&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(100),&lt;br&gt;
Instructor VARCHAR2(100),&lt;br&gt;
InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;/p&gt;

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

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

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

&lt;p&gt;Rule: Remove transitive dependencies (non-key attributes depending on other non-key attributes).&lt;/p&gt;

&lt;p&gt;Here, instructor_phone depends on instructor, not on course_id. So we separate Instructor data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Create Tables (3NF):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;REATE TABLE Instructors (&lt;br&gt;
InstructorID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
InstructorName VARCHAR2(100),&lt;br&gt;
InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;/p&gt;

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

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

&lt;p&gt;CREATE TABLE Enrollments3NF (&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 Student3NF(StudentID),&lt;br&gt;
FOREIGN KEY (CourseID) REFERENCES Course3NF(CourseID)&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%2F8zhajhij5b3k6h7bq43l.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%2F8zhajhij5b3k6h7bq43l.png" alt=" " width="800" height="387"&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%2Fo2zm43xn8tpkg8f6an5a.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%2Fo2zm43xn8tpkg8f6an5a.png" alt=" " width="800" height="380"&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%2Fo26xmupr3wkjzpu2dfzu.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%2Fo26xmupr3wkjzpu2dfzu.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Insert Sample Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-- Instructors&lt;br&gt;
INSERT INTO Instructor VALUES ('I01', 'Dr. Kumar', '9876543210');&lt;br&gt;
INSERT INTO Instructor VALUES ('I02', 'Dr. Mehta', '9123456780');&lt;br&gt;
INSERT INTO Instructor VALUES ('I03', 'Dr. Rao', '9988776655');&lt;/p&gt;

&lt;p&gt;-- Courses&lt;br&gt;
INSERT INTO Course3NF VALUES ('C101', 'DBMS', 'I01');&lt;br&gt;
INSERT INTO Course3NF VALUES ('C102', 'Data Mining', 'I02');&lt;br&gt;
INSERT INTO Course3NF VALUES ('C103', 'AI', 'I03');&lt;/p&gt;

&lt;p&gt;-- Students&lt;br&gt;
INSERT INTO Student3NF VALUES ('S01', 'Arjun');&lt;br&gt;
INSERT INTO Student3NF VALUES ('S02', 'Priya');&lt;br&gt;
INSERT INTO Student3NF VALUES ('S03', 'Kiran');&lt;/p&gt;

&lt;p&gt;-- Enrollment&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S01', 'C101');&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S01', 'C102');&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S02', 'C101');&lt;br&gt;
INSERT INTO Enrollment3NF VALUES ('S03', 'C103');&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%2Fc96smwo502ymun0qqh01.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%2Fc96smwo502ymun0qqh01.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Query with JOINs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Enrollment3NF e&lt;br&gt;
JOIN Student3NF s ON e.StudentID = s.StudentID&lt;br&gt;
JOIN Course3NF c ON e.CourseID = c.CourseID&lt;br&gt;
JOIN Instructor 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%2F01cvg5ba9u565p72jtuq.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%2F01cvg5ba9u565p72jtuq.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀** Wrap Up**&lt;/p&gt;

&lt;p&gt;We started with an unnormalized table and step-by-step applied:&lt;/p&gt;

&lt;p&gt;1NF → Removed repeating groups&lt;/p&gt;

&lt;p&gt;2NF → Removed partial dependencies&lt;/p&gt;

&lt;p&gt;3NF → Removed transitive dependencies&lt;/p&gt;

&lt;p&gt;Result → A clean, normalized database with reduced redundancy, better integrity, and easier queries&lt;/p&gt;

&lt;p&gt;Special thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; for mentoring me on database normalization concepts!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL #Oracle #DBMS #DatabaseNormalization #1NF #2NF #3NF #BCNF #4NF #5NF #DataModeling&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>sql</category>
      <category>database</category>
      <category>learning</category>
    </item>
    <item>
      <title>Simple College Student Schema</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sat, 04 Oct 2025 12:06:37 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/simple-college-student-schema-i82</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/simple-college-student-schema-i82</guid>
      <description>&lt;p&gt;MongoDB is one of the most popular NoSQL databases, widely used for scalable and flexible applications. In this tutorial, we’ll perform CRUD (Create, Read, Update, Delete) operations on a college students collection to understand MongoDB better.&lt;/p&gt;

&lt;p&gt;To make it more exciting, we’ll run these queries directly on MongoDB Atlas Cluster (cloud-based MongoDB). Along the way, I’ll include screenshots of my MongoDB Atlas dashboard and outputs so you can follow along visually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a free MongoDB Atlas account&lt;br&gt;
Schema&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%2Fh4f9xr0op2bgotmf8syj.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4f9xr0op2bgotmf8syj.jpeg" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a cluster and a database called collegeDB&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%2Fz7elgswn1f4bedzkuz7v.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%2Fz7elgswn1f4bedzkuz7v.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside it, create a collection called 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%2F6oh8lxjke21qhv2waf0d.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%2F6oh8lxjke21qhv2waf0d.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Create *&lt;/em&gt;(Insert)&lt;/p&gt;

&lt;p&gt;Insert at least 5 student records:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S001",&lt;br&gt;
name: "Jamie",&lt;br&gt;
age: 19,&lt;br&gt;
department: "CSBS",&lt;br&gt;
year: 2,&lt;br&gt;
cgpa: 8.5&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S002",&lt;br&gt;
name: "David",&lt;br&gt;
age: 21,&lt;br&gt;
department: "CSE",&lt;br&gt;
year: 3,&lt;br&gt;
cgpa: 9&lt;br&gt;
}&lt;/p&gt;

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

&lt;p&gt;{&lt;br&gt;
student_id: "S003",&lt;br&gt;
name: "Natalia",&lt;br&gt;
age: 18,&lt;br&gt;
department: "ME",&lt;br&gt;
year: 3,&lt;br&gt;
cgpa: 8.7&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S004",&lt;br&gt;
name: "Olivia",&lt;br&gt;
age: 22,&lt;br&gt;
department: "ECE",&lt;br&gt;
year: 4,&lt;br&gt;
cgpa: 8.5&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%2F9em4fk00ynybjog01ubq.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%2F9em4fk00ynybjog01ubq.png" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
student_id: "S005",&lt;br&gt;
name: "Jonathan",&lt;br&gt;
age: 20,&lt;br&gt;
department: "IT",&lt;br&gt;
year: 3,&lt;br&gt;
cgpa: 7.9&lt;br&gt;
}&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Read (Query)&lt;/strong&gt;:-&lt;/p&gt;

&lt;p&gt;Display all student records.&lt;/p&gt;

&lt;p&gt;Fetch all 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%2Fa1ay7et01ebkaytu49uk.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%2Fa1ay7et01ebkaytu49uk.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&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;&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%2Fc9to9mife4n79g9zy6r4.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%2Fc9to9mife4n79g9zy6r4.png" alt=" " width="800" height="380"&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%2Fiivned821z9cvyewmlze.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%2Fiivned821z9cvyewmlze.png" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find students belonging to the Computer Science department.&lt;/p&gt;

&lt;p&gt;db.students.find({ department: "CSE" })&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%2Fv6do763mk1jo41enmkb3.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%2Fv6do763mk1jo41enmkb3.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;:-&lt;/p&gt;

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

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

&lt;p&gt;Increase the year of study for all 3rd year students by 1.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Delete&lt;/strong&gt;:-&lt;/p&gt;

&lt;p&gt;Delete one student record by student_id.&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%2F8wwm8z48gdhvrqgun6dm.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%2F8wwm8z48gdhvrqgun6dm.png" alt=" " width="800" height="358"&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%2Fbexfr6tghjda36sru14b.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%2Fbexfr6tghjda36sru14b.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Delete all students having 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%2Fg3emnwfeuz3e1c6lqchh.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%2Fg3emnwfeuz3e1c6lqchh.png" alt=" " width="800" height="375"&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%2F63zsxsb1110h5n3vyy85.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%2F63zsxsb1110h5n3vyy85.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Insert new student records&lt;/p&gt;

&lt;p&gt;Query students by CGPA and department&lt;/p&gt;

&lt;p&gt;Update CGPA and year of study&lt;/p&gt;

&lt;p&gt;Delete students based on conditions&lt;/p&gt;

&lt;p&gt;MongoDB CRUD operations form the foundation for building real-world apps like college portals, e-learning systems, or admin dashboards.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; sir for guiding and motivating us.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>learning</category>
      <category>coding</category>
    </item>
    <item>
      <title>ACID Properties with SQL Transactions in DBMS</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sat, 04 Oct 2025 08:00:43 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/acid-properties-with-sql-transactions-in-dbms-251</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/acid-properties-with-sql-transactions-in-dbms-251</guid>
      <description>&lt;p&gt;When working with relational databases, transactions are the building blocks that ensure reliability. They follow the ACID properties:&lt;/p&gt;

&lt;p&gt;Atomicity → All or nothing&lt;/p&gt;

&lt;p&gt;Consistency → Valid state before &amp;amp; after&lt;/p&gt;

&lt;p&gt;Isolation → Transactions don’t interfere&lt;/p&gt;

&lt;p&gt;Durability → Changes survive crashes&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore ACID with SQL scripts using an Accounts table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Database in MySql&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CREATE DATABASE acid_demo;&lt;br&gt;
USE acid_demo;&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%2Fqhwc5ismycfqibnics3z.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%2Fqhwc5ismycfqibnics3z.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Setup the Accounts Table&lt;/strong&gt;&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;
) ENGINE=InnoDB;&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%2F3itmwg3sr5ksm29cnvqd.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%2F3itmwg3sr5ksm29cnvqd.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insert 3 sample rows.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES&lt;br&gt;
(1, 'Sarah', 5000),&lt;br&gt;
(2, 'Jessie', 3000),&lt;br&gt;
(3, 'Benson', 7000);&lt;/p&gt;

&lt;p&gt;Run it.&lt;br&gt;
 Output: 3 rows inserted&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%2Ff6l1vk071alm32fzik5e.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%2Ff6l1vk071alm32fzik5e.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check the table:&lt;/strong&gt;&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%2Fdcud0pucsoibaa5hwrop.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%2Fdcud0pucsoibaa5hwrop.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;
acc_no | name | balance&lt;br&gt;
1 | Sarah| 5000&lt;br&gt;
2 | Jessie | 3000&lt;br&gt;
3 | Benson | 7000&lt;/p&gt;

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

&lt;p&gt;Definition: A transaction is atomic, meaning either all operations succeed or none do.&lt;/p&gt;

&lt;p&gt;Example: Transfer 500 from Sarah to Jessie, then rollback&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROLLBACK&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 1000 WHERE acc_no = 1;&lt;br&gt;
UPDATE Accounts SET balance = balance + 1000 WHERE acc_no = 2;&lt;br&gt;
ROLLBACK;&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
balances remain unchanged (Sarah=5000, Jessie=3000).&lt;br&gt;
This proves atomicity: either all updates happen, or none.&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%2F8vg3ap7seo6d6q45euib.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%2F8vg3ap7seo6d6q45euib.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COMMIT:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE acc_no = 1;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 2;&lt;br&gt;
COMMIT;&lt;br&gt;
SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;Output: Sarah=4500, Jessie=3500.&lt;br&gt;
Committed → permanent update.&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%2Fe6a3kyx4l05w3uwzq1gw.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%2Fe6a3kyx4l05w3uwzq1gw.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Definition: A transaction must bring the database from one valid state to another. Rules like constraints must never be violated.&lt;/p&gt;

&lt;p&gt;Example: Try inserting negative balance&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts (acc_no, name, balance) VALUES (4, 'David', -500);&lt;/p&gt;

&lt;p&gt;Output: Error – CHECK constraint failed.&lt;br&gt;
Database rejects invalid data → consistency is preserved.&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%2F1w4thttcs5mqy1fsd05p.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%2F1w4thttcs5mqy1fsd05p.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Definition: Transactions executing at the same time should not interfere with each other.&lt;/p&gt;

&lt;p&gt;Example: Two sessions&lt;/p&gt;

&lt;p&gt;Session 1 (updating):&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance - 2000 WHERE acc_no = 1;&lt;br&gt;
-- Do not commit yet&lt;br&gt;
SELECT balance FROM Accounts WHERE acc_no = 1;&lt;/p&gt;

&lt;p&gt;Session 1 sees the reduced balance (2500).&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%2Fp43039129uzizv6m13eo.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%2Fp43039129uzizv6m13eo.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Session 2 (reading at same time):&lt;/p&gt;

&lt;p&gt;SELECT balance FROM Accounts WHERE acc_no = 1;&lt;/p&gt;

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

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

&lt;p&gt;Both sessions see Sarah back to 4500.&lt;br&gt;
This shows isolation.&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%2F15s5oqyyk4udyfgbhazm.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%2F15s5oqyyk4udyfgbhazm.png" alt=" " width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Definition: Once a transaction is committed, its changes persist even if the system crashes.&lt;/p&gt;

&lt;p&gt;Example: Commit, restart DB, check again&lt;/p&gt;

&lt;p&gt;START TRANSACTION;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 3;&lt;br&gt;
COMMIT;&lt;/p&gt;

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

&lt;p&gt;Check:&lt;/p&gt;

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

&lt;p&gt;Benson’s balance increases (7500).&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%2Fxdkyrf8g775bkou7wnc7.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%2Fxdkyrf8g775bkou7wnc7.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now restart MySQL server&lt;br&gt;
Reconnect, run again:&lt;/p&gt;

&lt;p&gt;USE acid_demo;&lt;br&gt;
SELECT * FROM Accounts WHERE acc_no = 3;&lt;/p&gt;

&lt;p&gt;Balance is still 7500.&lt;br&gt;
This proves durability: committed changes survive restarts.&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%2F58ru59nwap0lt7bh5q6y.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%2F58ru59nwap0lt7bh5q6y.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We demonstrated the ACID properties using SQL:&lt;/p&gt;

&lt;p&gt;🔹 Atomicity → Rollback prevents partial updates&lt;/p&gt;

&lt;p&gt;🔹 Consistency → Constraints keep data valid&lt;/p&gt;

&lt;p&gt;🔹 Isolation → Transactions run independently&lt;/p&gt;

&lt;p&gt;🔹 Durability → Committed changes survive crashes&lt;/p&gt;

&lt;p&gt;These principles ensure that databases remain reliable, safe, and trustworthy, even under concurrent workloads or unexpected failures.&lt;/p&gt;

&lt;p&gt;Thanks &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; Sir for his guidance and support and for Everything&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dbms #MySql #oracle #transactions #acid #database #learning&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>coding</category>
      <category>sql</category>
      <category>database</category>
    </item>
    <item>
      <title>Cursor and Trigger in DBMS</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sat, 04 Oct 2025 07:32:33 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/cursor-and-trigger-in-dbms-418b</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/cursor-and-trigger-in-dbms-418b</guid>
      <description>&lt;p&gt;When working with databases, sometimes we need to process records row by row (using Cursors) or automatically respond to events (using Triggers).&lt;/p&gt;

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

&lt;p&gt;✅ Create a Cursor that fetches employees with a salary &amp;gt; 50,000&lt;/p&gt;

&lt;p&gt;✅ Build an AFTER-INSERT Trigger to maintain a student audit log&lt;/p&gt;

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

&lt;p&gt;A cursor is a pointer that lets you process query results row by row instead of all at once. Useful when applying conditions or logic to each record.&lt;/p&gt;

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

&lt;p&gt;Let’s create a cursor to display employee names with salary &amp;gt; 50,000.&lt;/p&gt;

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

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

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

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

&lt;p&gt;INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (1, 'Renner', 60000);&lt;br&gt;
INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (2, 'Samuel', 45000);&lt;br&gt;
INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (3, 'Ana',&lt;br&gt;
 75000);&lt;br&gt;
INSERT INTO Employees (Emp_ID, Emp_Name, Salary) VALUES (4, 'Kylie', 50000);&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%2Fani41mrc5i93co6lpwqe.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fani41mrc5i93co6lpwqe.jpeg" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;DECLARE&lt;br&gt;
CURSOR emp_cursor IS&lt;br&gt;
SELECT Emp_Name, Salary FROM Employees WHERE Salary &amp;gt; 50000;&lt;br&gt;
v_EmpName Employees.Emp_Name%TYPE;&lt;br&gt;
v_Salary Employees.Salary%TYPE;&lt;br&gt;
BEGIN&lt;br&gt;
OPEN emp_cursor;&lt;br&gt;
LOOP&lt;br&gt;
FETCH emp_cursor INTO v_EmpName, v_Salary;&lt;br&gt;
EXIT WHEN emp_cursor%NOTFOUND;&lt;br&gt;
DBMS_OUTPUT.PUT_LINE('Employees: ' || v_EmpName || ', Salary: ₹' || v_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%2Fd19rq77ny0249tsco52v.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd19rq77ny0249tsco52v.jpeg" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Trigger&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;We’ll now create a Students table and a Students_Audit table to keep track of new registrations.&lt;/p&gt;

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

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

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

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

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

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

&lt;p&gt;&lt;strong&gt;Step iii&lt;/strong&gt;: Create AFTER INSERT Trigger(Trigger Implementation)&lt;/p&gt;

&lt;p&gt;CREATE OR REPLACE TRIGGER trg_after_student_insert&lt;br&gt;
AFTER INSERT ON Students2&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
INSERT INTO Students_Audit (Student_ID, Student_Name, Action, Action_Time)&lt;br&gt;
VALUES (:NEW.Student_ID, :NEW.Student_Name, 'INSERT', SYSTIMESTAMP);&lt;br&gt;
END;&lt;br&gt;
/&lt;/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%2Fhqzv1757v3zzqjuaum9c.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqzv1757v3zzqjuaum9c.jpeg" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test the Trigger&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Step iv&lt;/strong&gt;: Verify Audit Table&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwo7uigq56s6z6iroiwz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwo7uigq56s6z6iroiwz.jpeg" alt=" " width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Cursor → Process query results row by row&lt;/p&gt;

&lt;p&gt;Trigger → Automatically log student registrations after insert&lt;/p&gt;

&lt;p&gt;These features add power and automation to SQL programming!&lt;/p&gt;

&lt;p&gt;Thank &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; Sir for his valuable guidance and continuous support in successfully completing this DBMS assignment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dbms #sql #oracle #plsql #database #cursors #triggers #programming #assignment #learning&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>coding</category>
      <category>database</category>
      <category>learning</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization in DBMS</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sat, 04 Oct 2025 06:55:05 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/indexing-hashing-query-optimization-in-dbms-61m</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/indexing-hashing-query-optimization-in-dbms-61m</guid>
      <description>&lt;p&gt;Databases handle massive data efficiently using indexes and hashing. Instead of scanning entire tables, indexes act like the index of a book, making lookups faster.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll build a Students table, create B-Tree, B+Tree, and Hash indexes, and run queries to see their effect.&lt;/p&gt;

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

&lt;p&gt;📖 &lt;strong&gt;Key Definitions&lt;br&gt;
🔹 Indexing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Indexing is a technique to speed up data retrieval from a database. Instead of scanning the whole table, the database uses an index (like a book index) to locate the rows quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B-Tree Index&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A B-Tree (Balanced Tree) index stores keys in a sorted order, allowing logarithmic time searches. It is efficient for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B+ Tree Index&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A B+ Tree is a variation of the B-Tree where all values are stored in the leaf nodes, and internal nodes only store keys for navigation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hash Index&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Hash Index uses a hashing function to map keys (like dept) into buckets.&lt;/p&gt;

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

&lt;p&gt;The process of minimising query execution time by leveraging indexes and writing efficient SQL statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create Students Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE Students1 (&lt;br&gt;
roll_no INT 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;&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%2Fcuodp9bidbxl4hct7m92.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuodp9bidbxl4hct7m92.jpeg" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inserting Sample Records&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO Students1 VALUES (101, 'Ana', 'CSBS', 8.5);&lt;br&gt;
INSERT INTO Students1 VALUES (102, 'Paul', 'CSBS', 7.8);&lt;br&gt;
INSERT INTO Students1 VALUES (103, 'Kevin', 'ECE', 9.0);&lt;br&gt;
INSERT INTO Students1 VALUES (104, 'Angelin', 'ME', 8.2);&lt;br&gt;
INSERT INTO Students1 VALUES (105, 'Vanessa', 'CSBS', 8.8);&lt;br&gt;
INSERT INTO Students1 VALUES (106, 'Ria', 'ECE', 7.5);&lt;br&gt;
INSERT INTO Students1 VALUES (107, 'Samuel', 'ME', 8.7);&lt;br&gt;
INSERT INTO Students1 VALUES (108, 'Noah', 'CSBS', 6.9);&lt;br&gt;
INSERT INTO Students1 VALUES (109, 'Marin', 'ECE', 8.0);&lt;br&gt;
INSERT INTO Students1 VALUES (110, 'Joseph', 'CSBS', 9.2);&lt;br&gt;
INSERT INTO Students1 VALUES (111, 'Trinita', 'ME', 7.9);&lt;br&gt;
INSERT INTO Students1 VALUES (112, 'Ryan', 'CSBS', 8.3);&lt;br&gt;
INSERT INTO Students1 VALUES (113, 'Daniel', 'ECE', 9.1);&lt;br&gt;
INSERT INTO Students1 VALUES (114, 'Kane', 'ME', 7.7);&lt;br&gt;
INSERT INTO Students1 VALUES (115, 'Isha', 'CSBS', 8.6);&lt;br&gt;
INSERT INTO Students1 VALUES (116, 'Sarah', 'ECE', 8.4);&lt;br&gt;
INSERT INTO Students1 VALUES (117, 'Merlin', 'ME', 8.0);&lt;br&gt;
INSERT INTO Students1 VALUES (118, 'James', 'CSBS', 7.6);&lt;br&gt;
INSERT INTO Students1 VALUES (119, 'Page', 'ECE', 8.9);&lt;br&gt;
INSERT INTO Students1 VALUES (120, 'Reynolds', 'ME', 8.1);&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pjpmpc4brwu0m5d1hlo.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pjpmpc4brwu0m5d1hlo.jpeg" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B-Tree Index on roll_no&lt;/strong&gt;&lt;br&gt;
Most DBMSs use B-Trees to index numeric/ordered columns.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_roll_no ON Students1(roll_no);&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%2F9x585dint764koml8myt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x585dint764koml8myt.jpeg" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query with Index&lt;/strong&gt;&lt;br&gt;
This fetches details of roll_no = 110 in O(log n) instead of scanning all rows.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiu7du7crl0jdu38w7dr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiu7du7crl0jdu38w7dr.jpeg" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B+ Tree Index on CGPA&lt;/strong&gt;&lt;br&gt;
B+ Trees are used for range queries, making them perfect for CGPA lookups.&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_cgpa ON Students1(cgpa);&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%2Fpcauuy12rlph9x4szdxn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcauuy12rlph9x4szdxn.jpeg" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query&lt;/strong&gt;&lt;br&gt;
 Display all students with a CGPA&amp;gt; 8.0&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbegg231bgwsm57azok47.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbegg231bgwsm57azok47.jpeg" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hash Index on dept&lt;/strong&gt;&lt;br&gt;
Hashing is great for exact matches (not ranges).&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_dept ON Students1(dept);&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%2Ffy7qg5qu9kgye5nlt0xn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy7qg5qu9kgye5nlt0xn.jpeg" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query&lt;/strong&gt;&lt;br&gt;
 Retrieve all students from the CSBS department&lt;/p&gt;

&lt;p&gt;SELECT * FROM Students1 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%2F8qgmu4x1429lxd2jcv80.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qgmu4x1429lxd2jcv80.jpeg" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚡ &lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;B-Tree Index → Fast lookup by roll_no&lt;/p&gt;

&lt;p&gt;B+Tree Index → Efficient range queries (CGPA &amp;gt; 8.0)&lt;/p&gt;

&lt;p&gt;Hash Index → Quick equality checks (dept = CSBS)&lt;/p&gt;

&lt;p&gt;Indexes make queries 10x–100x faster, but they also consume storage &amp;amp; slow down inserts/updates. Use them wisely for query optimization!&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; Sir for guiding me through indexing and query optimization concepts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL #Oracle #Indexing #BTree #BPlusTree #QueryOptimization #DBMS #Database&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>learning</category>
      <category>database</category>
      <category>coding</category>
    </item>
    <item>
      <title>DBMS - Transactions, Deadlocks &amp; Log-Based Recovery</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Sat, 04 Oct 2025 06:25:27 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/dbms-transactions-deadlocks-log-based-recovery-4lne</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/dbms-transactions-deadlocks-log-based-recovery-4lne</guid>
      <description>&lt;p&gt;Working with databases is not just about storing data — it’s about ensuring reliability, atomicity, and consistency, especially when multiple users or processes are involved. In this post, we’ll explore three important concepts using a simple Accounts table:&lt;/p&gt;

&lt;p&gt;✅ Transactions &amp;amp; Rollback (Atomicity)&lt;/p&gt;

&lt;p&gt;🔒 Deadlock Simulation&lt;/p&gt;

&lt;p&gt;📝 Log-Based Recovery&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup: The Accounts Table&lt;/strong&gt;&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&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%2Fxypqnacvken2d93m3so5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxypqnacvken2d93m3so5.jpeg" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INSERT INTO CustomerAccounts VALUES (1, 'Emily', 1000);&lt;br&gt;
INSERT INTO CustomerAccounts VALUES (2, 'Bobby', 1500);&lt;br&gt;
INSERT INTO CustomerAccounts VALUES (3, 'Caleb', 2000);&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Transaction – Atomicity &amp;amp; Rollback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transactions ensure all-or-nothing execution. Let’s try transferring 500 from Emily to Bobby, but roll it back midway.&lt;/p&gt;

&lt;p&gt;Deduct 500 from Emily&lt;/p&gt;

&lt;p&gt;UPDATE CustomerAccounts&lt;br&gt;
SET balance = balance - 500&lt;br&gt;
WHERE name = 'Emily';&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%2Fek4dxaztqjd120wqpbrb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fek4dxaztqjd120wqpbrb.jpeg" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-- Add 500 to Bobby&lt;br&gt;
UPDATE Accounts &lt;br&gt;
SET balance = balance + 500 &lt;br&gt;
WHERE name = 'Bob';&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%2Fdu1lco6ag1j08bw8iyfs.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdu1lco6ag1j08bw8iyfs.jpeg" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rollback transaction&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;** Check balances**&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%2F3ibt2rbx7w6frukiy701.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ibt2rbx7w6frukiy701.jpeg" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deadlock Simulation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Deadlocks occur when two transactions wait on each other’s locks. Let’s simulate with two sessions:&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Session 2:&lt;/strong&gt;&lt;br&gt;
-- Lock Bobby&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance - 200 WHERE name = 'Bobby';&lt;br&gt;
-- Do NOT commit&lt;/p&gt;

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

&lt;p&gt;Continuing Session 2&lt;br&gt;
-- Try updating Emily (held by Session 1)&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 200 WHERE name = 'Emily';&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%2Frv0v96jazyin94ugr5lq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv0v96jazyin94ugr5lq.jpeg" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log-Based Recovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern DBMSs use logs (MySQL → Binary Log, PostgreSQL → WAL) to ensure durability and rollback safety.&lt;/p&gt;

&lt;p&gt;-- Update Caleb&lt;br&gt;
UPDATE CustomerAccounts SET balance = balance + 300 WHERE name = 'Caleb';&lt;/p&gt;

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

&lt;p&gt;-- Verify balances&lt;br&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%2F3x1x297xt5qmowp32t6f.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x1x297xt5qmowp32t6f.jpeg" alt=" " width="800" height="372"&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%2Fdghlx0hj5fsm5int6yzf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdghlx0hj5fsm5int6yzf.jpeg" alt=" " width="800" height="422"&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%2Fe1ha5yavibq74ctoxnab.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1ha5yavibq74ctoxnab.jpeg" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Transactions &amp;amp; Rollback → Ensures atomicity&lt;/p&gt;

&lt;p&gt;Deadlock Simulation → Shows concurrency pitfalls&lt;/p&gt;

&lt;p&gt;Log-Based Recovery → Demonstrates how databases ensure durability&lt;/p&gt;

&lt;p&gt;These concepts form the backbone of ACID properties in relational databases.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;dbms #oracle #sql #transactions #deadlock #recovery #assignment&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>coding</category>
      <category>sql</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>COLLEGE STUDENT AND COURSE MANAGEMENT SYSTEM</title>
      <dc:creator>Jerlin vanessa Vincent paul</dc:creator>
      <pubDate>Fri, 22 Aug 2025 06:10:02 +0000</pubDate>
      <link>https://dev.to/jerlin_vanessavincentpa/college-student-and-course-management-system-20od</link>
      <guid>https://dev.to/jerlin_vanessavincentpa/college-student-and-course-management-system-20od</guid>
      <description>&lt;p&gt;I have just completed the database management system for college student and course management system.&lt;br&gt;
Here,is the step by step process :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating the Students Table&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First, we define a Students table to store basic information about each student.&lt;/p&gt;

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

&lt;p&gt;Key Points:&lt;/p&gt;

&lt;p&gt;StudentID is the primary key, ensuring uniqueness.&lt;/p&gt;

&lt;p&gt;Email has a unique constraint to avoid duplicates.&lt;/p&gt;

&lt;p&gt;Name is marked as NOT NULL to ensure every student has a name.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating the Courses Table&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, we define the Courses table that lists all courses offered.&lt;/p&gt;

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

&lt;p&gt;Later, we’ll add a check constraint on the Credits column to ensure values stay within a valid range.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating the Enrollments Table&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This table maps students to the courses they’re enrolled in.&lt;/p&gt;

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

&lt;p&gt;Key Points:&lt;/p&gt;

&lt;p&gt;StudentID and CourseID are foreign keys linking to their respective tables.&lt;/p&gt;

&lt;p&gt;Grade stores the letter grade (like A+, B, etc.).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inserting Student Records&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now let’s add three students from different departments:&lt;/p&gt;

&lt;p&gt;INSERT INTO Students (StudentID, Name, Dept, DOB, Email)&lt;br&gt;
VALUES (1, 'VINCENT', 'Computer Science', TO_DATE('2004-03-15', 'YYYY-MM-DD'), '&lt;a href="mailto:vincent.cs@example.com"&gt;vincent.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, 'SYLVIA', 'Electrical Engineering', TO_DATE('2005-11-22', 'YYYY-MM-DD'), '&lt;a href="mailto:sylvia.ee@example.com"&gt;sylvia.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, 'TOM HOLLAND', 'Mechanical Engineering', TO_DATE('2006-07-09', 'YYYY-MM-DD'), '&lt;a href="mailto:tomholland.mech@example.com"&gt;tomholland.mech@example.com&lt;/a&gt;');&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adding a New Column: PhoneNo&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We realized students need a phone number field. Here’s how to add it:&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Adding a Check Constraint on Course Credits&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We only want courses to have between 1 and 5 credits:&lt;/p&gt;

&lt;p&gt;ALTER TABLE Courses&lt;br&gt;
ADD CHECK (Credits BETWEEN 1 AND 5);&lt;/p&gt;

&lt;p&gt;This helps maintain data integrity by preventing invalid credit values.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inserting Courses&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s add three sample courses into our Courses table:&lt;/p&gt;

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

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

&lt;p&gt;INSERT INTO Courses (CourseID, CourseName, Credits)&lt;br&gt;
VALUES (103, 'FLUID MECHANICS', 5);&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Committing Changes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In Oracle, changes aren’t permanent until you commit:&lt;/p&gt;

&lt;p&gt;COMMIT;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Querying the Database
a. Display Student Names in Uppercase and Email Length
SELECT 
UPPER(Name) AS Student_Name,
LENGTH(Email) AS Email_Length
FROM Students;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This returns names in uppercase along with the length of each email.&lt;/p&gt;

&lt;p&gt;b. View All Courses&lt;br&gt;
SELECT CourseID, CourseName, Credits&lt;br&gt;
FROM Courses;&lt;/p&gt;

&lt;p&gt;Useful for displaying a course catalog.&lt;/p&gt;

&lt;p&gt;c. View All Students&lt;br&gt;
SELECT StudentID, Name, Dept, DOB, Email, PhoneNo&lt;br&gt;
FROM Students;&lt;/p&gt;

&lt;p&gt;Shows all students, including the newly added PhoneNo field.&lt;/p&gt;

&lt;p&gt;In this simple Oracle SQL project, we:&lt;/p&gt;

&lt;p&gt;Created relational tables with primary and foreign keys&lt;/p&gt;

&lt;p&gt;Added constraints for data validation&lt;/p&gt;

&lt;p&gt;Populated the tables with sample data&lt;/p&gt;

&lt;p&gt;Executed basic queries to retrieve and format information&lt;/p&gt;

&lt;p&gt;This project forms a foundational structure for any educational management system. From here, you can explore adding features like attendance, scheduling, and advanced reports.&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%2Fu21yjijfjat6fwo2eyw0.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%2Fu21yjijfjat6fwo2eyw0.png" alt=" " width="800" height="397"&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%2Fuur5v80wso7jmljw9j8l.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%2Fuur5v80wso7jmljw9j8l.png" alt=" " width="800" height="397"&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%2Flq7ip0xr5kiowopnodom.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%2Flq7ip0xr5kiowopnodom.png" alt=" " width="800" height="414"&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%2Fmjqmt398mhl041k2tdd8.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%2Fmjqmt398mhl041k2tdd8.png" alt=" " width="800" height="406"&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%2Fz7z5v7980ajo11hjiv10.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%2Fz7z5v7980ajo11hjiv10.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;br&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>
