Uploaded by Janet Zhu

Database Midterm 2.pdf

advertisement
Domain Types​​:
char(n)
varchar(n)
int
number(p,d)
float(n)
Timestamp
Table
create table instructor (
ID
char(5),
name
varchar(20) not null,
dept_name varchar(20),
salary
numeric(8,2));
insert into instructor values (‘10211’, ’Smith’,
’Biology’, 66000);
A relational schema R is in first normal
form if the domains of all attributes of R
are atomic
Functional Dependency
dept_name -> building, budget
K is a superkey for relation schema R if and
only if K -> R
K is a candidate key for R if and only if
K -> R, and for no α K, α -> R
A functional dependency is trivial if it is
satisfied by all instances of a relation
Boyce Codd Normal Form
Aggregate Functions
avg: average value
min: minimum value
max: maximum value
sum: sum of values
count: number of values
Joins
Views
create view
departments_total_salary(dept_name,
total_salary) as
select dept_name, sum (salary)
from instructor
group by dept_name;
Constraints on Single Relation
not null
primary key
unique
check (P), where P is a predicate
Decomposing into BCNF
Third Normal Form
1. SELECT DISTINCT id, name FROM takes NATURAL JOIN student WHERE course_id='CS-101' AND
grade = 'A' AND id IN (SELECT id FROM takes WHERE course_id='CS-319' AND grade = 'A');
2. SELECT DISTINCT id, name FROM takes NATURAL JOIN student WHERE course_id='CS-319' AND
grade = 'A' AND id IN (SELECT id FROM takes WHERE course_id='CS-101') AND id NOT IN (SELECT
id FROM takes WHERE course_id='CS-101' AND grade = 'A');
3. SELECT DISTINCT id FROM takes GROUP BY id, course_id HAVING count(*) > 1
4. SELECT id, sum( points * credits ) / sum( credits ) AS gpa FROM course NATURAL JOIN takes
NATURAL JOIN gradepoint GROUP BY id
6. SELECT id FROM student AS s WHERE ( SELECT max( points ) FROM takes NATURAL JOIN
gradepoint WHERE id = s.id AND course_id = 'CS-101') > ( SELECT max( points ) FROM takes
NATURAL JOIN gradepoint WHERE id = s.id AND course_id = 'CS-347')
7. SELECT id FROM student s WHERE NOT EXISTS( SELECT points FROM takes NATURAL JOIN
gradepoint WHERE id = s.id AND points < 3.7) -- Use ALL in WHERE: SELECT id FROM student s
WHERE 3.7 <= ALL ( SELECT points FROM takes NATURAL JOIN gradepoint WHERE id = s.id)
8. SELECT DISTINCT course_id FROM section s WHERE course_id IN ( SELECT course_id FROM
section
WHERE year = s.year +1
9. SELECT id, name FROM instructor as I WHERE ((SELECT COUNT(*) FROM teaches WHERE ID =
I.ID) = (SELECT COUNT(*) FROM course WHERE dept_name = 'Comp Sci'))
11. SELECT title, year FROM tvseries WHERE (title, year) NOT IN (SELECT title, year FROM watches)
12. SELECT DISTINCT course.course_id, ID FROM course LEFT OUTER JOIN teaches ON
course.course_id = teaches.course_id
Download