Why functional dependencies guide schema design in DBMS Theory - Performance Analysis
We want to understand how the time to check or use functional dependencies changes as the data grows.
How does the work needed to keep data consistent grow when the table gets bigger?
Analyze the time complexity of checking a functional dependency in a table.
-- Check if attribute B functionally depends on A in table T
SELECT A, COUNT(DISTINCT B) AS distinct_B
FROM T
GROUP BY A
HAVING COUNT(DISTINCT B) > 1;
This query finds if any value of A maps to more than one value of B, violating the dependency A -> B.
Look at what repeats as the table size grows.
- Primary operation: Scanning all rows in the table to group by A.
- How many times: Once over all rows, but grouping requires comparing and counting values per group.
As the number of rows grows, the database must process more data to group and count.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 rows scanned and grouped |
| 100 | About 100 rows scanned and grouped |
| 1000 | About 1000 rows scanned and grouped |
Pattern observation: The work grows roughly in direct proportion to the number of rows.
Time Complexity: O(n)
This means the time to check the functional dependency grows linearly with the number of rows.
[X] Wrong: "Checking functional dependencies is instant no matter the data size."
[OK] Correct: The database must look at all rows to be sure, so more data means more work.
Understanding how data size affects dependency checks helps you design efficient databases and explain your reasoning clearly.
"What if the table had an index on attribute A? How would that change the time complexity of checking the functional dependency?"
Practice
Solution
Step 1: Understand functional dependencies
Functional dependencies show how one attribute or set of attributes determines another attribute in a table.Step 2: Connect to schema design
Using these dependencies helps split tables to reduce duplication and avoid data inconsistencies.Final Answer:
They help organize data to avoid duplication and errors -> Option DQuick Check:
Functional dependencies guide clean design = They help organize data to avoid duplication and errors [OK]
- Thinking functional dependencies speed up queries directly
- Believing all data should be in one table
- Confusing functional dependencies with keys
Solution
Step 1: Recall functional dependency notation
Functional dependency is written asA -> B, meaning A determines B.Step 2: Check other options
Other options show arithmetic or equality, not functional dependencies.Final Answer:
<code>A -> B</code> means A functionally determines B -> Option BQuick Check:
Functional dependency symbol = -> [OK]
- Confusing functional dependency with equality
- Using arithmetic symbols instead of ->
- Misreading notation as assignment
StudentID, CourseID, Instructor and the functional dependency CourseID -> Instructor, what does this imply?Solution
Step 1: Interpret the functional dependency
CourseID -> Instructormeans for each CourseID, there is one Instructor assigned.Step 2: Understand implication
This means each course has exactly one instructor, but an instructor can teach many courses.Final Answer:
Each CourseID is taught by exactly one Instructor -> Option AQuick Check:
CourseID determines Instructor = Each CourseID is taught by exactly one Instructor [OK]
- Assuming Instructor determines CourseID
- Confusing StudentID with CourseID
- Thinking one instructor per student
OrderID, ProductID, Quantity, Price with functional dependencies OrderID, ProductID -> Quantity and ProductID -> Price. Which of the following is a problem in this design?Solution
Step 1: Analyze functional dependencies
OrderID, ProductID -> Quantitymeans quantity depends on both order and product, which is correct.Step 2: Identify redundancy issue
ProductID -> Pricemeans price depends only on product, so storing price in the order table repeats it many times.Final Answer:
Price depends only on ProductID, causing redundancy if repeated for each order -> Option AQuick Check:
Price repeated per order causes redundancy = Price depends only on ProductID, causing redundancy if repeated for each order [OK]
- Ignoring redundancy caused by partial dependencies
- Mixing up which attribute depends on what
- Assuming all dependencies are correct
Employee(ID, Name, Dept, DeptHead) with functional dependencies ID -> Name, Dept and Dept -> DeptHead. How should you redesign the schema to avoid redundancy?Solution
Step 1: Identify functional dependencies
ID -> Name, Deptmeans employee ID determines name and department;Dept -> DeptHeadmeans department determines its head.Step 2: Apply normalization
To avoid repeating DeptHead for every employee in the same department, split into two tables: one for employees and one for departments with heads.Final Answer:
Split into two tables: Employee(ID, Name, Dept) and Department(Dept, DeptHead) -> Option CQuick Check:
Separate tables for dependent attributes = Split into two tables: Employee(ID, Name, Dept) and Department(Dept, DeptHead) [OK]
- Trying to keep all data in one table causing redundancy
- Misusing primary keys for dependent attributes
- Removing important data like DeptHead
Ready to prove it?
Pass the test and this pattern moves unknown
