- 참고하면 좋을 것 같은 강의
https://www.edwith.org/database/lecture/27867?isDesc=false
Entity sets과 relationship sets은 데이터베이스의 내용물을 나타내는 relation schema로 균등하게(?)(uniformly) 표현될 수 있다.
E-R diagram을 따르는 데이터베이스는 schema들의 모음으로 표현될 수 있다.
각각의 entity set과 relationship set의 이름에 할당되는 unique한 schema가 존재한다.
각 schema는 unique한 이름이 있는 여러 개의 column이 있다. (일반적으로 attribute에 해당된다
- Strong Entity:
A strong entity is not dependent on any other entity in the schema. A strong entity will always have a primary key. The relationship of two strong entities is represented by a single diamond.
타이핑 편의를 위해, primary key를 표현하는 밑줄은 취소선으로 표현하겠다
- Weak Entity:
A weak entity is dependent on a strong entity to ensure its existence. Unlike a strong entity, a weak entity does not have any primary key. It instead has a partial discriminator key. The relation between one strong and one weak entity is represented by a double diamond. This relationship is also known as identifying relationship.
relation, schema, table 다 비슷하게 이해하면 될까?...
time_slot |
---|
{ |
day |
start_time |
end_time |
} |
instructor |
---|
name |
salary |
student |
---|
name |
tot_cred |
department |
---|
building |
budget |
partial을 무시하고 위 방법과 동일하게 진행하면,
student(s_id, name, tot_cred, dept_name, i_id) 로 쓸 수 있다.
여기서 dept_name은 위에서 department entity 때문에 생긴 것으로 볼 수 있고, "one" side의 primary key인 'i_id'를 "many" side의 속성으로 추가해 주었다.
문제는, 현재 관계가 partial이기 때문에 i_id가 null일 수도 있기 때문이다. foreign key에 유배되는 건 아니지만, 기분이 좀 찜찜하다.
그래서 advisor 스키마를 하나 추가로 만든다
advisor(i_id, s_id)
역시 primary key는 'many' side의 것만 잡아준다.
새로 만든 advisor에서 i_id가 null인지 체크한다. (null이면, 지도교수가 없다고 확인)
student(s_id, name, tot_cred, dept_name)
course |
---|
title |
credits |
section |
---|
sec_id (점선) |
semester (점선) |
year (점선) |
(course <- sec_course = section)
이 두 entity set 사이의 관계인 sec_course에 대한 schema를 만든다면,
sec_course(course_id, sec_id, semester, year)로 만들 수 있지만,
이건 이미 section entity에 대한 schema에 다 있는 정보이다.
따라서 필요 없당