0% found this document useful (0 votes)
3 views17 pages

Normalization DBMS

The document explains database normalization, focusing on the different normal forms (1NF, 2NF, 3NF, and BCNF) and their rules. It illustrates how to eliminate redundancy and anomalies through examples, showing the transformation of tables to meet normalization criteria. Additionally, it outlines the process of converting an ER model into a relational model, emphasizing the importance of functional dependency in database design.

Uploaded by

Nitheesh Kasaram
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views17 pages

Normalization DBMS

The document explains database normalization, focusing on the different normal forms (1NF, 2NF, 3NF, and BCNF) and their rules. It illustrates how to eliminate redundancy and anomalies through examples, showing the transformation of tables to meet normalization criteria. Additionally, it outlines the process of converting an ER model into a relational model, emphasizing the importance of functional dependency in database design.

Uploaded by

Nitheesh Kasaram
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

🔹 1NF (First Normal Form)

✅ Rule:

 Every column should have atomic (indivisible) values.

 No repeating groups or arrays/lists in a column.

🔸 Problem Example (Not in 1NF):

StudentID StudentName Courses

101 Nitheesh OS, DBMS, ML

102 Ravi DBMS

Here:

 Courses has multiple values (a list). ❌ Not atomic.

 This is not in 1NF.

❌ What Problems It Causes:

 Hard to search/filter by individual courses.

 Wastes space or creates confusion during updates.

 Difficult to maintain or extend data.

✅ Convert to 1NF:

StudentID StudentName Course

101 Nitheesh OS

101 Nitheesh DBMS

101 Nitheesh ML

102 Ravi DBMS

Now:

 Each field has atomic values

 Repeating groups removed

✅ Now the table is in 1NF.

🔹 What is Partial Dependency?


A partial dependency occurs when a non-prime attribute (i.e., not part
of a candidate key) is dependent on part of a composite primary key,
not the full key.
👉 This only occurs when the table has a composite key (i.e., primary key
made of more than one column).

🔸 Example: A Table Not in 2NF


Let’s say we have this table:

Student Course StudentNa CourseNa


ID ID me me

101 C1 Nitheesh OS

102 C2 Ravi DBMS

101 C2 Nitheesh DBMS

Here, primary key = (StudentID, CourseID) (composite key).


Now look at the dependencies:
 StudentName depends on StudentID ✅
 CourseName depends on CourseID ✅
These are partial dependencies, since:
 StudentName depends on only part of the key: StudentID
 CourseName depends only on CourseID
This violates Second Normal Form (2NF).

❌ What Problem Does Partial Dependency Cause?


Partial dependency leads to:
1. Redundant Data (Data Repetition)
 StudentName is repeated for every course that student takes.
 CourseName is repeated for every student who takes that course.
That wastes space and increases chance of inconsistency.

2. Update Anomaly
If the student changes name (e.g., Nitheesh → Nithin),
you need to update every row where StudentID = 101.
Miss one row? Boom — inconsistent data.
3. Insert Anomaly
You can’t add a new student unless they enroll in a course.
Can’t insert:
sql
CopyEdit
(104, NULL, "New Student", NULL)
Because CourseID is part of the key.

4. Delete Anomaly
If a student drops their last course, you lose their name too.

✅ How 2NF Solves This?


👉 Solution: Break the table into smaller ones to remove partial
dependency
Split into:
🔹 Student Table:

Student StudentNa
ID me

101 Nitheesh

102 Ravi

🔹 Course Table:

Course CourseNa
ID me

C1 OS

C2 DBMS

🔹 Enrollment Table:

Student Course
ID ID

101 C1

102 C2

101 C2

Now:
 No data repetition ✅
 No anomalies ✅
 All non-prime attributes depend on the whole key ✅

🔁 Summary

Concept Explanation

Partial Non-prime attribute depends on part of


dependency composite key

Problem Redundancy, update/insert/delete anomalies

Remove partial dependency by breaking into


2NF Goal
separate tables

🧠 What is 3NF (Third Normal Form)?


A table is in 3NF if:
1. It is already in 2NF
2. No non-prime attribute is transitively dependent on the primary
key

😵 What is Transitive Dependency?


Transitive Dependency is when:
 A non-key column depends on another non-key column, not
directly on the primary key.
Real-World Analogy:
If:
 A → B and B → C
 Then A → C is transitive (indirect)
In databases:
 If StudentID → DepartmentID → DepartmentName
 Then StudentID → DepartmentName is transitive
That’s what 3NF wants to avoid.
📄 Example Table (NOT in 3NF)

Student StudentNa Departmen DepartmentN


ID me tID ame

101 Nitheesh D1 Computer Sci

102 Ravi D2 Mechanical

103 Keerthi D1 Computer Sci

 StudentID is the Primary Key


 But DepartmentName depends on DepartmentID (not directly on
StudentID)
→ This is a transitive dependency.
So this table is NOT in 3NF

✅ Fixing It (Convert to 3NF)


Step 1: Split into Two Tables
1. Student Table

Student StudentNa Departmen


ID me tID

101 Nitheesh D1

102 Ravi D2

103 Keerthi D1

2. Department Table

Departmen DepartmentN
tID ame

D1 Computer Sci

D2 Mechanical

✅ Now It’s in 3NF Because:


 DepartmentName no longer transitively depends on StudentID
 Every non-key attribute depends directly on the primary key
 It avoids repetition and update anomalies

🔁 Summary
Step What It Does

Removes repeating groups /


1NF
multivalued fields

2NF Removes partial dependency

✅ 3NF Removes transitive dependency

If you want, I can explain this using a real Instagram DB example, like
how a post table might be normalized using 3NF. Want that?
You said:
what happens if the transitive dependency happens what problem it is
creating
ChatGPT said:
Great follow-up, Nitheesh! Let’s clearly understand:

❗ What Happens If Transitive Dependency Is Not Removed (i.e., Not in


3NF)?
When a table has transitive dependency, it causes data anomalies —
problems during insert, update, or delete operations.
Let’s see these with the same example 👇
📄 Table with Transitive Dependency

Student StudentNa Departmen DepartmentN


ID me tID ame

101 Nitheesh D1 Computer Sci

102 Ravi D2 Mechanical

103 Keerthi D1 Computer Sci

Here:
 DepartmentName depends on DepartmentID
 But it’s stored with each student → transitive dependency

🧨 1. Update Anomaly
If the DepartmentName changes, say “Computer Sci” → “Computer
Science,”
you have to update every row where DepartmentID = D1.
If you miss one, the data becomes inconsistent.
Student StudentNa Departmen
DepartmentName
ID me tID

101 Nitheesh D1 Computer Sci ← ❌ Old name

Computer Science ← ✅ New


103 Keerthi D1
name

Now there are two names for the same department. This is a data
integrity issue.

🚫 2. Insert Anomaly
Suppose a new department is being created (like D3, "Civil Engg"),
but no student has joined it yet.
You can’t insert department info because there’s no student to insert
with it.
You’re blocked from inserting valid department info → this is an insert
anomaly.

🧽 3. Delete Anomaly
If you delete the last student in a department, you also lose
department info.

Student StudentNa Departmen DepartmentN


ID me tID ame

103 Keerthi D1 Computer Sci

If Keerthi is deleted and she was the only student in D1,


the info about "Computer Sci" (D1) is also lost.
This is a delete anomaly.

✅ So, Why Remove Transitive Dependencies?


To prevent:

Problem Why It Happens

Update Need to update same info in


anomaly many rows

Insert
Can't add partial info
anomaly

Delete Deleting a row removes


anomaly needed info
🔁 Solution: Normalize to 3NF
Split the transitive dependency (like DepartmentID → DepartmentName)
into a separate table.

🔹 BCNF (Boyce-Codd Normal Form)

✅ Rule:

 For every functional dependency A → B, A should be a super key.

 BCNF is stricter than 3NF.

🔸 Problem Example (In 3NF but Not BCNF):

CourseID Instructor Room

C1 Prof. A R1

C2 Prof. B R2

C3 Prof. A R1

Assume:

 CourseID → Instructor ✅

 Instructor → Room ✅

Now:

 Instructor is not a super key but still determines another column → violates BCNF.

So, even though this might be in 3NF, it is not in BCNF.

❌ What Problems It Causes:

 Redundancy: If Prof. A always teaches in R1, that data is repeated.

 Update anomaly: If Prof. A changes room, must update every row.

✅ Convert to BCNF:

Split into:

Table 1: Courses

CourseID Instructor

C1 Prof. A
CourseID Instructor

C2 Prof. B

C3 Prof. A

Table 2: Instructors

Instructor Room

Prof. A R1

Prof. B R2

Now:

 In each table, left side of functional dependency is a super key ✅

 No redundancy or anomalies

✅ BCNF achieved.

🧠 Summary Table:

Form Rule Problem Solved Fix

1NF Atomic values only Repeating groups, multi-valued fields Split rows

Redundancy when using composite Break table by full


2NF No partial dependency
keys dependency

Update anomalies due to indirect Separate dependent


3NF No transitive dependency
dependency attributes

LHS of every FD is a super More strict than 3NF, still avoids Decompose into proper
BCNF
key anomalies relations

Great question, Nitheesh! Let's step-by-step learn how to convert an ER model into a relational
model (i.e., converting it into tables for a relational database like MySQL or PostgreSQL).

✅ Step-by-Step Process to Convert ER Model to Relational Model

1. Entities → Tables

 Strong Entity becomes a table.

 Attributes become columns.


 Choose a Primary Key (PK).

✅ Example:

Entity: Student
Attributes: RollNo (PK), Name, Age

🔄 Convert to:

sql

CopyEdit

Student(RollNo PRIMARY KEY, Name, Age)

2. Weak Entities → Tables with Foreign Key

 Weak entities depend on a strong entity.

 Include a Foreign Key (FK) and part of the Primary Key.

✅ Example:

Entity: Dependent
Attributes: Name (partial key), Age
Related to: Employee(EmpID)

🔄 Convert to:

sql

CopyEdit

Dependent(EmpID, Name, Age,

PRIMARY KEY(EmpID, Name),

FOREIGN KEY(EmpID) REFERENCES Employee(EmpID))

3. Relationships → Tables or Foreign Keys

There are three types:

🔹 a) One-to-One (1:1)

 Add the primary key of one table as a foreign key in the other.

Example:
Student ↔ Passport (1:1)

sql

CopyEdit
Student(RollNo PRIMARY KEY, Name, ...)

Passport(PassportID PRIMARY KEY, RollNo UNIQUE,

FOREIGN KEY(RollNo) REFERENCES Student(RollNo))

🔹 b) One-to-Many (1:N)

 Add foreign key in the “many” side.

Example:
Department(DeptID) → Employee(EmpID, DeptID)

sql

CopyEdit

Employee(EmpID PRIMARY KEY, Name, DeptID,

FOREIGN KEY(DeptID) REFERENCES Department(DeptID))

🔹 c) Many-to-Many (M:N)

 Create a new table for the relationship.

Example:
Student ↔ Course

sql

CopyEdit

StudentCourse(StudentID, CourseID,

PRIMARY KEY(StudentID, CourseID),

FOREIGN KEY(StudentID) REFERENCES Student(StudentID),

FOREIGN KEY(CourseID) REFERENCES Course(CourseID))

4. Multivalued Attributes → Separate Table

 Convert multivalued attribute into new relation.

 Include foreign key to original entity.

Example:
Entity: Person → PhoneNumbers (can be multiple)

🔄 Convert:

sql

CopyEdit
PhoneNumber(PersonID, Phone,

PRIMARY KEY(PersonID, Phone),

FOREIGN KEY(PersonID) REFERENCES Person(PersonID))

5. Composite Attributes → Break into Simple Columns

Example:
Attribute: Name → FirstName, LastName

sql

CopyEdit

Student(RollNo PRIMARY KEY, FirstName, LastName, Age)

🧠 Summary Table

ER Concept Relational Concept

Entity Table

Attribute Column

Primary Key (PK) Primary Key

Weak Entity Table with PK + FK

Relationship (1:1) Foreign Key in either table

Relationship (1:N) FK in “many” side

Relationship (M:N) New table with 2 FKs

Multivalued Attribute New table with FK

Composite Attribute Multiple columns

If you want, I can take an Instagram or ecommerce ER diagram and show how it’s converted. Want
to try that?

You said:

like in the ocmpanies while designig db they do this wright and explain above functional dep and
normlatization with clesr example

ChatGPT said:

Yes, Nitheesh, you're absolutely right ✅ — companies do this during database design, especially
when building products like Instagram, Amazon, Zomato, etc. This process ensures their data is
clean, optimized, and doesn't get repeated unnecessarily, which is why Functional Dependency
(FD) and Normalization are super important.

Let’s explain both with a clear example step-by-step:

🌟 Scenario: "Instagram-like App" (Simple)

We want to build a database to track:

 Users

 Their posts

 Followers

 Comments

Let's say we start with a single table like this:

diff

PostTable:

+----------+-----------+-----------+------------------+---------------+

| PostID | UserID | UserName | PostCaption | UserPhone |

+----------+-----------+-----------+------------------+---------------+

| 101 | U001 | Ram | Nice Sunset 🌇 | 9876543210 |

| 102 | U001 | Ram | Good Vibes 💫 | 9876543210 |

| 103 | U002 | Priya | Nature 🍃 | 9123456789 |

+----------+-----------+-----------+------------------+---------------+

🔹 Functional Dependency (FD)

Definition: If you know the value of one column, and you can uniquely determine the value of
another, that’s a functional dependency.

✅ Example from above:

 UserID → UserName (because if you know UserID, you know the name)

 UserID → UserPhone (same reason)

🔍 What’s the Problem?

If Ram updates his phone number, we must update it in all rows where UserID = U001. If we miss
any — we get inconsistent data.

This problem is called data redundancy and anomaly, and that's why we use Normalization.
🔧 Normalization Process (with examples)

✅ Step 1: 1NF (First Normal Form)

Goal: No multivalued or composite attributes. All values must be atomic (1 value only).

→ Already satisfied here — each cell has a single value.

✅ Step 2: 2NF (Second Normal Form)

Goal: Remove partial dependencies.

A partial dependency means a non-key attribute depends on part of a composite key.

In our table, if we used (PostID, UserID) as a composite key, then:

 UserName and UserPhone depend only on UserID, not on the whole key.

🔧 Fix:

Break into two tables:

📄 User Table:

scss

CopyEdit

User(UserID PRIMARY KEY, UserName, UserPhone)

📄 Post Table:

scss

CopyEdit

Post(PostID PRIMARY KEY, UserID FOREIGN KEY, PostCaption)

Now no repetition of UserPhone or UserName.

✅ Step 3: 3NF (Third Normal Form)

Goal: Remove transitive dependencies.

A transitive dependency is when:

A→B→C
Then, C is transitively dependent on A.

In our case, if:

nginx

CopyEdit
UserID → UserName → UserInitials

Then UserInitials is transitively dependent on UserID. So we move it into a separate table if needed.

✅ Final Tables (Normalized):

1. User(UserID, UserName, UserPhone)

2. Post(PostID, UserID, PostCaption)

3. (Optional) UserInitials(UserName, Initials)

💡 Summary: Why Companies Use This?

Benefit How It Helps

✅ No Repetition Saves storage, avoids redundancy

✅ Easy Updates Change data in 1 place

✅ Avoids Inconsistencies Keeps data clean and trusted

✅ Better Design Matches real-world structure

✅ Faster Queries Joins are optimized

🧠 Functional Dependency Types

Type Meaning

Trivial A → A or A → subset of A

Non-Trivial A → B where B is not part of A

Full A → B but removing part of A breaks the dependency

Partial Only part of a composite key determines an attribute

Transitive A → B → C implies A → C (indirect dependency)

Would you like me to design a full database schema like Instagram with normalization and SQL
tables for practice?

You said:

what is wait die schema and wound wait schema and why it is used what irt solves

ChatGPT said:

Great question, Nitheesh! Let’s understand what Wait-Die and Wound-Wait schemes are, why
they're used, and what they solve in the context of DBMS concurrency control.
🔄 Background: Why Do We Need This?

In DBMS, when multiple transactions are accessing the same data concurrently, there's a risk of
deadlock.
➡️A deadlock occurs when two or more transactions are waiting forever for each other to release
locks.

To avoid this, deadlock prevention techniques like Wait-Die and Wound-Wait are used.

🔹 What is Wait-Die Scheme?

This is a deadlock prevention technique based on transaction timestamps.

🧠 Concept:

 Each transaction has a timestamp (TS) based on when it started.

 Older transactions have smaller timestamps.

⛔ Conflict:

If T1 (TS = 10) wants to access a locked item held by T2 (TS = 20), we have two cases:

Case Action in Wait-Die

Older wants resource T1 (old) waits for T2 (young) → T1 waits ✅

Younger wants resource T2 (young) wants T1’s lock → T2 is aborted (dies) ❌

➡️Only older transactions can wait. Younger transactions are rolled back (they "die").

🔹 What is Wound-Wait Scheme?

This is another deadlock prevention technique that works in the opposite way.
⛔ Conflict:

If T1 (TS = 10) wants resource held by T2 (TS = 20):

Case Action in Wound-Wait

Older wants resource T1 (old) forces T2 to abort → T2 is wounded (aborted) ❌

Younger wants resource T2 waits for T1 to release → T2 waits ✅

➡️Older transactions “wound” the younger ones by forcing them to roll back.
Younger ones always wait.

🔄 Why Are These Used?

Both schemes prevent deadlock by ensuring a consistent order of waits using timestamps.
They avoid circular waits (which cause deadlocks).

🔧 Problem They Solve:

✅ Prevent Deadlocks:
No cycle of waiting forms, because waiting decisions are based on timestamps.

✅ Fairness Based on Age:

 In Wait-Die: Younger ones keep retrying until they can get the lock.

 In Wound-Wait: Older ones don’t wait for younger ones, so they finish sooner.

🔍 Summary Table

Feature Wait-Die Wound-Wait

Rule Older waits, younger dies Older wounds, younger waits

Abort case Younger dies Younger waits

Type of technique Non-preemptive Preemptive

Used for Deadlock prevention Deadlock prevention

📌 Real-World Analogy:

Imagine a doctor’s queue.

 In Wait-Die: Senior citizen waits patiently; young guy is kicked out and asked to come again
later.

You might also like