Database design
The Entity-Relationship model
1
Database design The Entity-Relationship model 1 The - - PowerPoint PPT Presentation
Database design The Entity-Relationship model 1 The Entity-Relationship approach Design your database by drawing a picture of it an Entity-Relationship diagram Allows us to sketch the design of a database informally (which is good
1
2
Course
3
4
a name and the name of the teacher.
e.g. (TDA357, Databases, Niklas Broberg). Course
name code Keys are underlined teacher
5
Course
name code
Courses(code, name, teacher)
teacher
6
7
8
in that room.
Course
name code teacher
Room
name #seats
LecturesIn
9
Course
name code teacher
Room
name #seats LecturesIn
Courses(code, name, teacher) Rooms(name, #seats) LecturesIn(code, name)
10
Courses(code, name, teacher) Rooms(name, #seats) LecturesIn(code, name) Courses(code, name, teacher) Rooms(name, #seats) LecturesIn(code, name) code -> Courses.code name -> Rooms.name
References
11
12
Course
name code teacher
Room
name #seats LecturesIn
#times
13
Course
name code teacher
Room
name #seats LecturesIn
#times
14
Courses(code, name, teacher) Room(name, #seats) LecturesIn(code, name, #times) code -> Courses.code name -> Rooms.name
Course
name code teacher
Room
name #seats LecturesIn
#times
15
lectures in a given room on several weekdays!
Course
name code teacher
Room
name #seats LecturesIn
weekday
16
17
Course
name code teacher
Room
name #seats LecturesIn
Weekday
day 18
Course
name code teacher
Room
name #seats LecturesIn
Weekday
day
Courses(code, name, teacher) Rooms(name, #seats) Weekdays(day) LecturesIn(code, name, day) code -> Courses.code name -> Rooms.name day -> Weekdays.day
19
– A course can have lectures in many rooms. – Many courses can have lectures in the same room.
Course
name code teacher
Room
name #seats LecturesIn 20
– Courses have all their lectures in the same room. – Many courses can share the same room.
Course
name code teacher
Room
name #seats ResidesIn Arrow means ”at most one” 21
– All courses have all their lectures in some room. – Many courses can share the same room.
Course
name code teacher
Room
name #seats ResidesIn Rounded arrow means ”exactly one” 22
– Courses have all their lectures in the same room. – Only one course in each room. – Not all rooms have courses in them.
Course
name code teacher
Room
name #seats ResidesIn 23
Courses(code, name, teacher) Rooms(name, #seats) LecturesIn(code, name, #times) code -> Courses.code name -> Rooms.name
Course
name code teacher
Room
name #seats LecturesIn
#times
24
Course
name code teacher
Room
name #seats ResidesIn
Courses(code, name, teacher, room) room -> Rooms.name Rooms(name, #seats)
25
Course
name code teacher
Room
name #seats ResidesIn
Courses(code, name, teacher, room) Room(name, #seats) Courses(code, name, teacher) Room(name, #seats) ResidesIn(code, room)
26
27
– Will lead to NULLs for courses that have no room. – Can sometimes be preferred when not having a room is an uncommon exception to the rule. – Reduces the need for joins. Courses(code, name, teacher, room) Rooms(name, #seats) Courses(code, name, teacher) Rooms(name, #seats) ResidesIn(code, room) – Safe translation - no NULLs anywhere. – May lead to duplication of the course code. – May lead to more joins. – Default translation rule, use unless you have a good reason not to.
Note that ”room” is not a key here
28
Course
name code teacher
Room
name #seats ResidesIn room
29
Course
name code
Room
name #seats ResidesIn
Teacher
HeldBy name 30
31
Courses(code, name, teacher) Rooms(name, #seats) LecturesIn(course, room, #times) course -> Courses.code room -> Rooms.name
Course
name code teacher
Room
name #seats LecturesIn
#times
32
Room
name #seats NextTo left right
Rooms(name, #seats) NextTo(left, right) left -> Rooms.name right -> Rooms.name
33
Course
name code teacher
Room
name #seats LecturesIn 34
35
– E.g. an airplane seat is identified by its number, but is not uniquely identified when we consider other
36
GivenCourse
teacher
Room
name #seats LecturesIn
Course
code name period Given
discriminator (sometimes dotted line)
37
Courses(code, name) GivenCourses(course, period, teacher) course -> Courses.code LecturesIn(course, period, room) (course, period) -> GivenCourses.(course, period) room -> Rooms.name Rooms(name, #seats)
GivenCourse
teacher
Room
name #seats LecturesIn
Course
code name period Given 38
39
Course
name code teacher
Room
name #seats LecturesIn
Weekday
day
Room
name #seats In On Of
Course
name code teacher
Weekday
day
LectureIn
40
41
– ISA = ”is a”
42
Course
name code teacher
Room
name #seats ClassesIn
ComputerRoom
#computers
ISA
43
44
45
Room
name #seats
ComputerRoom
#computers
ISA
Rooms(name, #seats) ComputerRooms(name, #computers) name -> Rooms.name
name #seats
VR 216 ED6225 52
name #computers
ED6225 26
46
47
Room
name #seats
ComputerRoom
#computers
ISA
Rooms(name, #seats, #computers)
name #seats #computers
VR 216 NULL ED6225 52 26
48
Room
name #seats
ComputerRoom
#computers
ISA
Rooms(name, #seats) ComputerRooms(name, #seats, #computers)
name #seats
VR 216
name #seats #computers
ED6225 52 26
49
50
belong to the superclass as well, so foreign keys would have no single table to refer to.
51
the subclass can participate in the relationship.
52
Course
code name teacher teacher
Courses(code,name) HeldBy(code,teacher) code -> Courses.code
Course
code name teacher
Teacher
HeldBy
Courses(code,name) Teachers(teacher) HeldBy(code,teacher) code -> Courses.code teacher -> Teachers.teacher
53
– less flexible to insert a constraint on what values are allowed than to use an extra table.
– No reason NOT to use an entity.
54
Course
code name teacher
Teacher
HeldBy responsible
Course
code name teacher
Teacher
Responsible Assistant
55
– If important, can be recovered via assertions (costly).
56
57
– Course codes and names, and the period the courses are given – The number of students taking a course – The name of the course responsible – The names of all lecture rooms, and the number of seats in them – Weekdays and hours of lectures
58
In code name
Lecture
Of weekday time Given
GivenCourse
teacher period #students
Course Room
name #seats 59
Courses(code, name) GivenCourses(course, period, #students, teacher) course -> Courses.code Lectures(course, period, room, weekday, hour) (course, period) -> GivenCourses.(course, period) room -> Rooms.name Rooms(name, #seats)
60
”A small train company wants to design a booking system for their customers. …”
diagram.
61
62